Bring error-summary test coverage to 100%

Checklist:

[ ] Documentation N/A
[x] Tests
[x] Ready to be merged

Deploy preview for affectionate-nobel-f3a8ec processing.
Built with commit 1381b6c94eb08b67405cdd53de85b38636403db2
https://app.netlify.com/sites/affectionate-nobel-f3a8ec/deploys/5bd3252c73f2cf76e40368c5

Codecov Report

Merging #438 into master will increase coverage by <.01%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master     #438      +/-   ##
==========================================
+ Coverage   99.73%   99.73%   +<.01%
==========================================
  Files          76       77       +1
  Lines         372      374       +2
  Branches       15       16       +1
==========================================
+ Hits          371      373       +2
  Misses          1        1

Impacted Files
Coverage Δ

components/paragraph/src/index.js
100% <0%> (ø)
:arrow_up:

components/paragraph/src/link-renderer.js
100% <0%> (ø)

Continue to review full report at Codecov.

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


Update Fotoapparat dependency to 2.2.0

This needed some code changes as Fotoapparat was re-written in Kotlin

I used this code while working on our Attestation app 1, thought I might as well push the changes here.
One thing I noticed (before and after the update) is that preview is laggy on debug app builds, for more details see: https://github.com/Fotoapparat/Fotoapparat/issues/205


UDP Logger Window

Hi Anthony,
I've added a new window to collect upd messages.
I included a new python depenency 'ifaddr' in the requirements.txt file. I hope this was the right way to do this.
I never worked with requirements.txt. I'm using pipenv to manage the depencies.
On the main window there is a new Button "View UPD Log". This button opens a new Window.
In this window you have to select the network where the SmartSpin2k is connected to (normally the WLan).
After you has selected the network, a thread is started and the log messages are collected from the UPD broadcast.

That's pretty cool Marcus!
I'll admit, I was a tad bit hesitant about ever using the UDP logging but after riding with it last night, It's really slick. Having one less tool on the desktop will be really nice as well. Thanks for your contribution!


initial work on migrating to new plugins

disabled old style plugins
create Danger::Plugin, that is a base class for plugins (look at https://github.com/dbgrandi/danger-proselint/blob/master/lib/danger_plugin.rb for what it should look like, but be aware that it has not been tested/integrated yet)
added init_plugins method to Dangerfile that adds plugins as instance variables to a Dangerfile, allowing them to extend the DSL
added some specs
disabled some other specs

Rubocop will fail because some of the commented out specs have emoji, and it does not allow emoji in comments. This is known and should be okay.
Note: this will break all existing plugins.

Yep, all rubocop over the pizza emoji 👯

        1 Warning

  </th>
 </tr>

:warning:
Author @dbgrandi is not a contributor

  Generated by :no_entry_sign: danger

Author @dbgrandi is not a contributor

Something we should change: https://github.com/danger/danger/pull/222


Preview missing

Not sure if you are aware but the preview option on betterdiscord site is bugged out its not showing the theme

This would be an issue with the BD website. The branch needs to be specified in the preview link like below: Note @gh-pages after the repo name
<EMAIL_ADDRESS>


Pair problem with ZCM2 on Windows 10 1903

Okay I've managed to connect the controller using psmoveapi which mentioned in this video.
But there goes some wired issues. My PS Move does not lighted on the top, which I do set the color for it, but it doesn't show the color. And I only have Gtyroscope able to calibrate, config tool shows Magnetometer Disabled.
I wonder how to solve these two issues.

oh it's interesting..
when I open steam vr and runs into some vr program, it all becomes what I've set...

can you help me? I have very weirdo problem i cant pair to controllers. I try connect to move, but i can't do it. Console show me it:
[2020-09-05 12:33:56.287]: AsyncBluetoothPairDeviceRequest - Device not connected
[2020-09-05 12:33:56.604]: AsyncBluetoothPairDeviceRequest - Connection attempt: 55/80
[2020-09-05 12:33:56.607]: AsyncBluetoothPairDeviceRequest - Device not connected
[2020-09-05 12:33:56.924]: AsyncBluetoothPairDeviceRequest - Connection attempt: 56/80
[2020-09-05 12:33:56.927]: AsyncBluetoothPairDeviceRequest - Device not connected
[2020-09-05 12:33:57.243]: AsyncBluetoothPairDeviceRequest - Connection attempt: 57/80
[2020-09-05 12:33:57.246]: AsyncBluetoothPairDeviceRequest - Device not connected
Windows 10-19041

Hey @DSVAR ，I'm not sure if your PC opens bluetooth or what?
If so, you can try connect with this?


NNBD Migration Tool - Core Functionality

This epic tracks the engineering work required to implement the core algorithms of the NNBD migration tool, so that it produces correct migrated results.  The user interface of the migration tool is tracked elsewhere (#38421).

I'd like to review the open "core functionality" issues and hopefully close this issue.


Volume data display error with the fourth 'STOKES' dimension

If the data cube is with a fourth dimension as STOKES then the 3d-volume-viewer will prompt a error as Volume visual needs a 3D image. Is there any smart 'data_loading' scheme in Glue for this problem?

Yes - open the data from glue and select 'CASA PPV cube' - this needs to be renamed, but will basically split the 4D cube into 4 3D cubes (each will be a component in the dataset)

Will be solved by https://github.com/glue-viz/glue/issues/924


Create ServerMember object

A object which create a connection between a user and a server
Implement object to ServerMemberUpdate event

Closed by 2c1b9f44de2dca2529f1cac24aa7f48557efbd2a


make some fields in IqThirdPartyAPIServerPollingResult optional

:tada: This PR is included in version 1.0.24 :tada:
The release is available on:

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


hotfix/auth-working

Multiple fixes have been added to the auth section.
-The times of the events have been corrected
-Now the student is added to the atendees section, allowing admins to check this updated value
-You can only add the authorization of children that are in that lesson

When I give it to inspect I get this error {"detail": "You do not have permission to perform this action."}

This is due to the backend code not being added yet. You may wait for it to be updated or fix this line in the views section of center-exit


Ending ChangeTask Workflow Results in Odd Error

When completing the editing of a task through the repeater option, the user is told the update was a success, but their next two commands are met with responses of "I'm not sure what went wrong, but it was bad" and then "You're not changing a task right now!"
This indicates that the chat state isn't getting reset properly.

Fixed with #38


Ansible project error in demo generator tool

Error while creating release definition: Tasks with versions 'Replace variables in Ansible script to deploy Azure resources:4., Run playbook to deploy Azure resources:0.' are not valid for deploy job 'Agent job' in stage Azure Dev.
When trying to install the Ansible project, I can't see the Ansible and Replace Tokens installation option as a pre-requisite and keep failing with above error. I manage to figure it out what is missing and installed those two extensions but not other people will so please check.

If you are running Demo Generator on a brand new organization, please enable the Third-party application access via OAuth under  Organization Setting >> Policies


Consider adding a Bidirectional Dictionary

Last summer I looked into new collections to consider adding to .NET. I ultimately decided on adding the MultiValueDictionary, but a close contender was the bi-directional dictionary. Now that we have corefxlab and we're working in the open, I'd like to revisit the BiDictionary as a possible addition.
If I remember correctly, my basic implementation for a BiMap that I took to API review a year ago had two Dictionaries – one that maps from Key->Value and the other that maps Value->Key. Any time the BiMap is mutated, both internal dictionaries have to be updated. There was also a Property “Reverse” to get the Value->Key mapping such that you could do:
BiMap<int, string> map = new BiMap<int, string>();
Map[1] = “cat”;
BiMap<string, int> reverse = map.Reverse;
Assert.Equal(1, reverse[“cat”]);

Both “map” and “reverse” used the same internal store.
So moving forward we should look at the above as our “worst case” scenario. I think we can do something more clever.
The biggest design issue I'd like to get resolved is whether we should Implement IDictionary<TKey, Value> and IDictionary<TValue, TKey> or just the former.
@ReedKimble

@ianhays, I don't think the compiler would let you implement IDictionary<TKey, Value> and IDictionary<TValue, TKey>. As there would be ambiguities when TKey and TValue were the same type.

@KrzysztofCwalina we've already discussed using a small wrapper type around TKey/TValue to resolve the ambiguity problem.  I am probably holding up this issue because Ian is waiting for me to post info about some of my previous attempts at this.  I need to take the mock I have for an extended hashset and modify it to include the wrapper classes for the generic arguments.

Here's some of what I've been experimenting with.
This first code block was the latest experiment, where I was using indexer collections into a single list of paired values.  But after talking this over we determined that this wouldn't be more efficient than just having two internal dictionaries.  But it does demonstrate the wrapper types for the generic arguments.
Public Class BijectiveSet(Of TLeft, TRight)
    'holds the hash value of left objects and the index of the pair in the core list
    Private leftHashIndexer As New Dictionary(Of Integer, Integer)
    'holds the hash value of right objects and the index of the pair in the core list
    Private rightHashIndexer As New Dictionary(Of Integer, Integer)
    'holds the pairs of left and right objects
    Private listCore As New List(Of Tuple(Of LeftValue, RightValue))
    'records empty indicies in the core list where items were removed from the set
    Private emptyIndicies As New Stack(Of Integer)

    'wraps the left type to prevent ambiguity when the left and right types are the same
    Public Class LeftValue
        Public Property Value As TLeft
        Public Sub New(left As TLeft)
            Value = left
        End Sub
    End Class

    'wraps the right type to prevent ambiguity when the left and right types are the same
    Public Class RightValue
        Public Property Value As TRight
        Public Sub New(right As TRight)
            Value = right
        End Sub
    End Class

    'provides a convienent empty tuple to use when releasing an entry in the core list due to removal
    'should this class be stubbed out and used to replace the tuple in the core list?
    Public Class BijectivePair
        Inherits Tuple(Of LeftValue, RightValue)
        Public Shared ReadOnly Empty As New BijectivePair
        Sub New()
            MyBase.New(Nothing, Nothing)
        End Sub
    End Class

    'records a bijective pair in the collection
    'since there is a distinct one-to-one relation on all items in the collection,
    '  we can blindly remove and replace items in the collection if they already exist
    Protected Sub UpdatePair(left As TLeft, right As TRight)
        Dim hashLeft = left.GetHashCode
        Dim hashRight = right.GetHashCode
        If leftHashIndexer.ContainsKey(hashLeft) Then
            SafeRemovePair(left)
        End If
        If rightHashIndexer.ContainsKey(hashRight) Then
            SafeRemovePair(right)
        End If
        Dim itemIndex As Integer
        If emptyIndicies.Count > 0 Then
            itemIndex = emptyIndicies.Pop
            listCore.Item(itemIndex) = New Tuple(Of LeftValue, RightValue)(New LeftValue(left), New RightValue(right))
        Else
            listCore.Add(New Tuple(Of LeftValue, RightValue)(New LeftValue(left), New RightValue(right)))
            itemIndex = listCore.Count - 1
        End If
        leftHashIndexer.Item(hashLeft) = itemIndex
        rightHashIndexer.Item(hashRight) = itemIndex
    End Sub

    'add overloads to access method with unwrapped type parameters
    'underlying method used by other overloads
    Public Function Remove(left As TLeft) As Boolean
        If leftHashIndexer.ContainsKey(left.GetHashCode) Then
            SafeRemovePair(left)
            Return True
        End If
        Return False
    End Function

    'add overloads to access method with unwrapped type parameters
    'underlying method used by other overloads
    Public Function Remove(right As TRight) As Boolean
        If rightHashIndexer.ContainsKey(right.GetHashCode) Then
            SafeRemovePair(right)
            Return True
        End If
        Return False
    End Function

    'removes a pair when the left item is known to exist
    Protected Sub SafeRemovePair(left As TLeft)
        Dim hashLeft = left.GetHashCode
        Dim itemIndex = leftHashIndexer(hashLeft)
        Dim hashRight = listCore(itemIndex).Item2.Value.GetHashCode
        listCore(itemIndex) = BijectivePair.Empty
        emptyIndicies.Push(itemIndex)
        leftHashIndexer.Remove(hashLeft)
        rightHashIndexer.Remove(hashRight)
    End Sub

    'removes a pair when the right item is known to exist
    Protected Sub SafeRemovePair(right As TRight)
        Dim hashRight = right.GetHashCode
        Dim itemIndex = rightHashIndexer(hashRight)
        Dim hashLeft = listCore(itemIndex).Item1.Value.GetHashCode
        listCore(itemIndex) = BijectivePair.Empty
        emptyIndicies.Push(itemIndex)
        leftHashIndexer.Remove(hashLeft)
        rightHashIndexer.Remove(hashRight)
    End Sub
End Class

'this partial class contains all of the method implementations for
'  IDictionary(Of LeftValue, RightValue) and IDictionary(Of RightValue, LeftValue)
'perhaps IDictionary is not the most appropriate interface to implement, but the
'  BijectiveSet does want to implement most of its functionality.
'the custom enumerator is not implemented in this example, but should be trival (if time consuming) to add
Partial Public Class BijectiveSet(Of TLeft, TRight)
    Implements IDictionary(Of LeftValue, RightValue)
    Implements IDictionary(Of RightValue, LeftValue)

    Public ReadOnly Property Count As Integer Implements ICollection(Of KeyValuePair(Of LeftValue, RightValue)).Count
        Get
            Return listCore.Count
        End Get
    End Property

    Public ReadOnly Property IsReadOnly As Boolean Implements ICollection(Of KeyValuePair(Of LeftValue, RightValue)).IsReadOnly
        Get
            Return False
        End Get
    End Property

    'add overloads to access Item property by unwrapped type
    Default Public Property Item(key As TRight) As TLeft
        Get
            Dim hash = key.GetHashCode
            If rightHashIndexer.ContainsKey(hash) Then
                Return listCore.Item(rightHashIndexer(hash)).Item1.Value
            End If
            Return Nothing
        End Get
        Set(value As TLeft)
            UpdatePair(value, key)
        End Set
    End Property
    Default Public Property Item(key As RightValue) As LeftValue Implements IDictionary(Of RightValue, LeftValue).Item
        Get
            Dim hash = key.Value.GetHashCode
            If rightHashIndexer.ContainsKey(hash) Then
                Return listCore.Item(rightHashIndexer(hash)).Item1
            End If
            Return Nothing
        End Get
        Set(value As LeftValue)
            UpdatePair(value.Value, key.Value)
        End Set
    End Property

    'add overloads to access Item property by unwrapped type
    Default Public Property Item(key As TLeft) As TRight
        Get
            Dim hash = key.GetHashCode
            If leftHashIndexer.ContainsKey(hash) Then
                Return listCore.Item(leftHashIndexer(hash)).Item2.Value
            End If
            Return Nothing
        End Get
        Set(value As TRight)
            UpdatePair(key, value)
        End Set
    End Property

    Default Public Property Item(key As LeftValue) As RightValue Implements IDictionary(Of LeftValue, RightValue).Item
        Get
            Dim hash = key.Value.GetHashCode
            If leftHashIndexer.ContainsKey(hash) Then
                Return listCore.Item(leftHashIndexer(hash)).Item2
            End If
            Return Nothing
        End Get
        Set(value As RightValue)
            UpdatePair(key.Value, value.Value)
        End Set
    End Property

    Public ReadOnly Property Keys As ICollection(Of LeftValue) Implements IDictionary(Of LeftValue, RightValue).Keys
        Get
            Return (From t In listCore Select t.Item1).ToArray
        End Get
    End Property

    Public ReadOnly Property Values As ICollection(Of RightValue) Implements IDictionary(Of LeftValue, RightValue).Values
        Get
            Return (From t In listCore Select t.Item2).ToArray
        End Get
    End Property

    Private ReadOnly Property ICollection_Count As Integer Implements ICollection(Of KeyValuePair(Of RightValue, LeftValue)).Count
        Get
            Return Count
        End Get
    End Property

    Private ReadOnly Property ICollection_IsReadOnly As Boolean Implements ICollection(Of KeyValuePair(Of RightValue, LeftValue)).IsReadOnly
        Get
            Return IsReadOnly
        End Get
    End Property

    Private ReadOnly Property IDictionary_Keys As ICollection(Of RightValue) Implements IDictionary(Of RightValue, LeftValue).Keys
        Get
            Return CType(Keys, ICollection(Of RightValue))
        End Get
    End Property

    Private ReadOnly Property IDictionary_Values As ICollection(Of LeftValue) Implements IDictionary(Of RightValue, LeftValue).Values
        Get
            Return CType(Values, ICollection(Of LeftValue))
        End Get
    End Property

    Public Sub Add(item As KeyValuePair(Of RightValue, LeftValue)) Implements ICollection(Of KeyValuePair(Of RightValue, LeftValue)).Add
        UpdatePair(item.Value.Value, item.Key.Value)
    End Sub

    Public Sub Add(item As KeyValuePair(Of LeftValue, RightValue)) Implements ICollection(Of KeyValuePair(Of LeftValue, RightValue)).Add
        UpdatePair(item.Key.Value, item.Value.Value)
    End Sub

    'add overloads to access method with unwrapped type parameters
    Public Sub Add(left As TLeft, right As TRight)
        UpdatePair(left, right)
    End Sub

    Public Sub Add(key As RightValue, value As LeftValue) Implements IDictionary(Of RightValue, LeftValue).Add
        UpdatePair(value.Value, key.Value)
    End Sub

    Public Sub Add(key As LeftValue, value As RightValue) Implements IDictionary(Of LeftValue, RightValue).Add
        UpdatePair(key.Value, value.Value)
    End Sub

    Public Sub Clear() Implements ICollection(Of KeyValuePair(Of LeftValue, RightValue)).Clear
        listCore.Clear()
        leftHashIndexer.Clear()
        rightHashIndexer.Clear()
    End Sub

    'could be implemented/lazy example
    Protected Sub CopyTo(array() As KeyValuePair(Of RightValue, LeftValue), arrayIndex As Integer) Implements ICollection(Of KeyValuePair(Of RightValue, LeftValue)).CopyTo
        Throw New NotImplementedException()
    End Sub

    Protected Sub CopyTo(array() As KeyValuePair(Of LeftValue, RightValue), arrayIndex As Integer) Implements ICollection(Of KeyValuePair(Of LeftValue, RightValue)).CopyTo
        Throw New NotImplementedException()
    End Sub

    Private Sub ICollection_Clear() Implements ICollection(Of KeyValuePair(Of RightValue, LeftValue)).Clear
        Clear()
    End Sub

    Public Function Contains(item As KeyValuePair(Of RightValue, LeftValue)) As Boolean Implements ICollection(Of KeyValuePair(Of RightValue, LeftValue)).Contains
        Return ContainsKey(item.Key) AndAlso ContainsKey(item.Value)
    End Function

    Public Function Contains(item As KeyValuePair(Of LeftValue, RightValue)) As Boolean Implements ICollection(Of KeyValuePair(Of LeftValue, RightValue)).Contains
        Return ContainsKey(item.Key) AndAlso ContainsKey(item.Value)
    End Function

    'add overloads to access method with unwrapped type parameter
    Public Function ContainsKey(key As TRight) As Boolean
        Return rightHashIndexer.ContainsKey(key.GetHashCode)
    End Function
    'add overloads to access method with unwrapped type parameter
    Public Function ContainsKey(key As TLeft) As Boolean
        Return leftHashIndexer.ContainsKey(key.GetHashCode)
    End Function

    Public Function ContainsKey(key As RightValue) As Boolean Implements IDictionary(Of RightValue, LeftValue).ContainsKey
        Return rightHashIndexer.ContainsKey(key.Value.GetHashCode)
    End Function

    Public Function ContainsKey(key As LeftValue) As Boolean Implements IDictionary(Of LeftValue, RightValue).ContainsKey
        Return leftHashIndexer.ContainsKey(key.Value.GetHashCode)
    End Function

    'could be implemented with custom enumerator/lazy example
    Public Function GetEnumerator() As IEnumerator(Of KeyValuePair(Of LeftValue, RightValue)) Implements IEnumerable(Of KeyValuePair(Of LeftValue, RightValue)).GetEnumerator
        Throw New NotImplementedException()
    End Function

    Public Function Remove(item As KeyValuePair(Of LeftValue, RightValue)) As Boolean Implements ICollection(Of KeyValuePair(Of LeftValue, RightValue)).Remove
        Return Remove(item.Key)
    End Function

    Public Function Remove(key As RightValue) As Boolean Implements IDictionary(Of RightValue, LeftValue).Remove
        Return Remove(key.Value)
    End Function

    Public Function Remove(item As KeyValuePair(Of RightValue, LeftValue)) As Boolean Implements ICollection(Of KeyValuePair(Of RightValue, LeftValue)).Remove
        Return Remove(item.Key)
    End Function

    Public Function Remove(key As LeftValue) As Boolean Implements IDictionary(Of LeftValue, RightValue).Remove
        Return Remove(key.Value)
    End Function

    Public Function TryGetValue(key As RightValue, ByRef value As LeftValue) As Boolean Implements IDictionary(Of RightValue, LeftValue).TryGetValue
        Dim hashRight = key.Value.GetHashCode
        If rightHashIndexer.ContainsKey(hashRight) Then
            value = listCore(rightHashIndexer(hashRight)).Item1
            Return True
        End If
        Return False
    End Function

    Public Function TryGetValue(key As LeftValue, ByRef value As RightValue) As Boolean Implements IDictionary(Of LeftValue, RightValue).TryGetValue
        Dim hashLeft = key.Value.GetHashCode
        If leftHashIndexer.ContainsKey(hashLeft) Then
            value = listCore(leftHashIndexer(hashLeft)).Item2
            Return True
        End If
        Return False
    End Function

    Private Function IEnumerable_GetEnumerator() As IEnumerator Implements IEnumerable.GetEnumerator
        Return GetEnumerator()
    End Function

    Private Function IEnumerable_GetEnumerator1() As IEnumerator(Of KeyValuePair(Of RightValue, LeftValue)) Implements IEnumerable(Of KeyValuePair(Of RightValue, LeftValue)).GetEnumerator
        Return CType(IEnumerable_GetEnumerator(), IEnumerator(Of KeyValuePair(Of RightValue, LeftValue)))
    End Function
End Class

Next, this was one of the attempts to take advantage of the internal workings of HastSet(Of T).  In this attempt I used a custom interface instead of IDictionary, though I've tried a similar one with the wrappers and IDictionary implementations.  The big drawback here is that using the internal IndexOf within HashSet makes the performance drop considerably as the collection gets larger.
Public Class BijectiveSet(Of TKeyLeft, TKeyRight)
    Implements IBijectiveSet(Of TKeyLeft, TKeyRight)

    Private leftHash As New HashSet(Of TKeyLeft)
    Private leftHashIndexAccessor As Func(Of TKeyLeft, Integer)
    Private rightHash As New HashSet(Of TKeyRight)
    Private rightHashIndexAccessor As Func(Of TKeyRight, Integer)

    Public Sub New()
        Dim info As System.Reflection.MethodInfo = leftHash.GetType.GetMethod("InternalIndexOf", Reflection.BindingFlags.Instance Or Reflection.BindingFlags.NonPublic)
        leftHashIndexAccessor = CType(info.CreateDelegate(GetType(Func(Of TKeyLeft, Integer)), leftHash), Func(Of TKeyLeft, Integer))
        info = rightHash.GetType.GetMethod("InternalIndexOf", Reflection.BindingFlags.Instance Or Reflection.BindingFlags.NonPublic)
        rightHashIndexAccessor = CType(info.CreateDelegate(GetType(Func(Of TKeyRight, Integer)), rightHash), Func(Of TKeyRight, Integer))
    End Sub

    Public Sub Add(left As TKeyLeft, right As TKeyRight) Implements IBijectiveSet(Of TKeyLeft, TKeyRight).Add
        leftHash.Add(left)
        rightHash.Add(right)
    End Sub

    Public Sub Clear() Implements IBijectiveSet(Of TKeyLeft, TKeyRight).Clear
        leftHash.Clear()
        rightHash.Clear()
    End Sub

    Public Function ContainsLeft(value As TKeyLeft) As Boolean Implements IBijectiveSet(Of TKeyLeft, TKeyRight).ContainsLeft
        Return leftHash.Contains(value)
    End Function

    Public Function ContainsRight(value As TKeyRight) As Boolean Implements IBijectiveSet(Of TKeyLeft, TKeyRight).ContainsRight
        Return rightHash.Contains(value)
    End Function

    Public ReadOnly Property Count As Integer Implements IBijectiveSet(Of TKeyLeft, TKeyRight).Count
        Get
            Return leftHash.Count
        End Get
    End Property

    Public Function GetEnumerator() As IEnumerator(Of Tuple(Of TKeyLeft, TKeyRight)) Implements IBijectiveSet(Of TKeyLeft, TKeyRight).GetEnumerator
        Return New Enumerator(Me)
    End Function

    Protected Function GetEnumeratorCore() As IEnumerator Implements IBijectiveSet(Of TKeyLeft, TKeyRight).GetEnumerator
        Return GetEnumerator()
    End Function

    Public Function GetEnumeratorLeft() As IEnumerator(Of TKeyLeft) Implements IBijectiveSet(Of TKeyLeft, TKeyRight).GetEnumeratorLeft
        Return leftHash.GetEnumerator
    End Function

    Public Function GetEnumeratorRight() As IEnumerator(Of TKeyRight) Implements IBijectiveSet(Of TKeyLeft, TKeyRight).GetEnumeratorRight
        Return rightHash.GetEnumerator
    End Function

    Public Function GetLeft(key As TKeyRight) As TKeyLeft Implements IBijectiveSet(Of TKeyLeft, TKeyRight).GetLeft
        If rightHash.Contains(key) Then
            Return ItemAtLeft(IndexOfRight(key))
        End If
        Throw New KeyNotFoundException
    End Function

    Public Function GetRight(key As TKeyLeft) As TKeyRight Implements IBijectiveSet(Of TKeyLeft, TKeyRight).GetRight
        If leftHash.Contains(key) Then
            Return ItemAtRight(IndexOfLeft(key))
        End If
        Throw New KeyNotFoundException
    End Function

    Public Function IndexOfLeft(value As TKeyLeft) As Integer Implements IBijectiveSet(Of TKeyLeft, TKeyRight).IndexOfLeft
        Return leftHashIndexAccessor(value)
    End Function

    Public Function IndexOfRight(value As TKeyRight) As Integer Implements IBijectiveSet(Of TKeyLeft, TKeyRight).IndexOfRight
        Return rightHashIndexAccessor(value)
    End Function

    Public Function ItemAtLeft(index As Integer) As TKeyLeft Implements IBijectiveSet(Of TKeyLeft, TKeyRight).ItemAtLeft
        Return leftHash(index)
    End Function

    Public Function ItemAtRight(index As Integer) As TKeyRight Implements IBijectiveSet(Of TKeyLeft, TKeyRight).ItemAtRight
        Return rightHash(index)
    End Function

    Public Function RemoveLeft(value As TKeyLeft) As Boolean Implements IBijectiveSet(Of TKeyLeft, TKeyRight).RemoveLeft
        If leftHash.Contains(value) Then
            rightHash.Remove(ItemAtRight(IndexOfLeft(value)))
            leftHash.Remove(value)
            leftHash.TrimExcess()
            rightHash.TrimExcess()
            Return True
        End If
        Return False
    End Function

    Public Function RemoveRight(value As TKeyRight) As Boolean Implements IBijectiveSet(Of TKeyLeft, TKeyRight).RemoveRight
        If rightHash.Contains(value) Then
            leftHash.Remove(ItemAtLeft(IndexOfRight(value)))
            rightHash.Remove(value)
            leftHash.TrimExcess()
            rightHash.TrimExcess()
            Return True
        End If
        Return False
    End Function

    Public Class Enumerator
        Implements IEnumerator(Of Tuple(Of TKeyLeft, TKeyRight))

        Protected core As BijectiveSet(Of TKeyLeft, TKeyRight)
        Protected keys As List(Of TKeyLeft)
        Protected index As Integer

        Protected Friend Sub New(bset As BijectiveSet(Of TKeyLeft, TKeyRight))
            core = bset
            keys = New List(Of TKeyLeft)(core.leftHash.ToArray)
            index = -1
        End Sub

        Public ReadOnly Property Current As Tuple(Of TKeyLeft, TKeyRight) Implements IEnumerator(Of Tuple(Of TKeyLeft, TKeyRight)).Current
            Get
                If index > -1 AndAlso index < core.leftHash.Count Then
                    Dim key As TKeyLeft = keys(index)
                    Return New Tuple(Of TKeyLeft, TKeyRight)(key, core.GetRight(key))
                End If
                Return Nothing
            End Get
        End Property

        Protected ReadOnly Property CurrentCore As Object Implements IEnumerator.Current
            Get
                Return Current
            End Get
        End Property

        Public Function MoveNext() As Boolean Implements IEnumerator.MoveNext
            index += 1
            Return index < core.leftHash.Count
        End Function

        Public Sub Reset() Implements IEnumerator.Reset
            index = -1
        End Sub

#Region "IDisposable Support"
        Private disposedValue As Boolean
        Protected Overridable Sub Dispose(disposing As Boolean)
            If Not Me.disposedValue Then
                If disposing Then
                    core = Nothing
                End If
            End If
            Me.disposedValue = True
        End Sub
        Public Sub Dispose() Implements IDisposable.Dispose
            Dispose(True)
            GC.SuppressFinalize(Me)
        End Sub
#End Region

    End Class
End Class

Public Interface IBijectiveSet(Of TKeyLeft, TKeyRight)
    Inherits IEnumerable(Of Tuple(Of TKeyLeft, TKeyRight))
    Sub Add(left As TKeyLeft, right As TKeyRight)
    Sub Clear()
    Function ContainsLeft(value As TKeyLeft) As Boolean
    Function ContainsRight(value As TKeyRight) As Boolean
    ReadOnly Property Count As Integer
    Function GetEnumeratorLeft() As IEnumerator(Of TKeyLeft)
    Function GetEnumeratorRight() As IEnumerator(Of TKeyRight)
    Function GetLeft(key As TKeyRight) As TKeyLeft
    Function GetRight(key As TKeyLeft) As TKeyRight
    Function IndexOfLeft(value As TKeyLeft) As Integer
    Function IndexOfRight(value As TKeyRight) As Integer
    Function ItemAtLeft(index As Integer) As TKeyLeft
    Function ItemAtRight(index As Integer) As TKeyRight
    Function RemoveLeft(value As TKeyLeft) As Boolean
    Function RemoveRight(value As TKeyRight) As Boolean
End Interface

So all of this (and more) has brought me full circle back to implementing a customized hashset.  I tried this route about a year ago and at that time didn't have access to the clr source to actually add a class (could only view it in ReferenceSource).  So I had to try building a class which reimplements hashset but then I ran into issues of needing to recode a lot of internal functionality.  Now though it might be possible to revist the idea.  Here's just a little bit of how I thought to approach this:
Public Class BijectiveDictionary(Of TKeyLeft, TKeyRight)

    Private Structure Entry
        Public hashCode As Integer
        Public nextIndex As Integer
        Public leftKey As TKeyLeft
        Public rightKey As TKeyRight
    End Structure

    Private buckets() As Integer
    Private entries() As Entry
    Private _count As Integer
    Private version As Integer
    Private freeList As Integer
    Private freeCount As Integer
    Private comparerLeft As IEqualityComparer(Of TKeyLeft)
    Private comparerRight As IEqualityComparer(Of TKeyRight)
    Private keysLeft As KeyLeftCollection
    Private keysRight As KeyRightCollection
    Private _syncRoot As Object

So the general idea is to have the internal Entry object hold references to both TLeft and TRight and then to add overloads of all methods to handle both left and right cases (this snippet doesnt have the wrapper types but they might be necessary).
Sorry this is all in VB but hopefully it helps demonstrate some of the thinking.

Sorry, the Entry structure in that last example may need a second hashCode field; I forgot that I was also playing around (unsuccessfully) with an idea of trying to get custom equality comparers to return the same hash code for both the left and right object instances.

I'm not sure that I understand the concept of the wrapper type. Could you explain it in more detail? Thinking again on the first example, I don't see how the compiler can distinguish between Remove(TLeft) and Remove(TRight) when typeof(TLeft) == typeof(TRight). When they are the same type, both removes should have the same signature.
In your partial implementation that fulfills the IDictionary interface you use explicit definitions for all functions which makes sense and is fine, but I don't see how the public Removes above work without ambiguity. The code I'm talking about:
    'add overloads to access method with unwrapped type parameters
    'underlying method used by other overloads
    Public Function Remove(left As TLeft) As Boolean
        If leftHashIndexer.ContainsKey(left.GetHashCode) Then
            SafeRemovePair(left)
            Return True
        End If
        Return False
    End Function

    'add overloads to access method with unwrapped type parameters
    'underlying method used by other overloads
    Public Function Remove(right As TRight) As Boolean
        If rightHashIndexer.ContainsKey(right.GetHashCode) Then
            SafeRemovePair(right)
            Return True
        End If
        Return False
    End Function

From an API perspective, for the second example I think a system where we can get the inverse dictionary would be more user-friendly than GetLeft, GetRight, AddLeft, AddRight, etc. That way we could keep the API as simple as possible while adding all of the necessary functionality (albeit through the inverse redirect).
If we did that, our API for the BiDictionary would be essentially one function on top of IDictionary:
    public class BiDictionary<TLeft, TRight> : IDictionary<TLeft, TRight>
    {
        #region new API surface area

        public BiDictionary<TRight, TLeft> Inverse { get; } // Changes to the inverse dictionary are reflected in the original BiDictionary.

        #endregion

        #region Implemented from IDictionary
        // For these functions the BiDictionary of TLeft, TRight is functionally equivalent to a Dictionary of TLeft, TRight with a few exceptions e.g. TRight values must be unique.
        #endregion
    }

The question of API is somewhat parallel to the question of implementation structure, but once we determine the best route for the former our options for the latter will likely narrow down. I'd be interested to see some perf results and memory usage stats for the methods above, particularly the hashset of Pair<TLeft, TRight>. I'd be worried that the extra layer of indirection would be bad for perf for Reference objects when compared to the double-dictionary approach particularly if wrapper objects were required.
Thanks for starting the conversation on this, Reed. The BiDictionary/BiMap is a fun structure :)

You are correct; in the case where TLeft = TRight you cannot use the overloads which take the generic type parameters.  In that case you must use the overloads which take the LeftValue/RightValue (wrapper type) parameters.  Maybe the overloads which take the generic type parameter should be removed.  The wrapper type can be extended to perform implicit conversions to/from the generic type so consumers could still pass the generic type parameter to an overload which takes the wrapper type when TLeft <> TRight.  When TLeft = TRight then the explicit wrapper types would have to be used.
I expect the common usage scenario to have different types for TLeft and TRight, so maybe it is not a big deal if the usage is a little more cumbersome when the two types are the same.
I posted everything just to show the various ideas I've experimented with, but I think you are right that the hashset of pair would only offer potential savings with large value types.  In most cases with small value types or reference types it would be disadvantageous.
I also don't like the Left/Right-specific members and would prefer to keep the API simple.  While it does deal with the ambiguity problem it doesn't make for a clean class layout.
I understand the ease of implementation offered by BiDictionary<TRight, TLeft> Inverse, however, I'm not sure about ease of use... in a situation where you are constantly accessing both sides of the collection you would probably end up holding a reference to the inverse dictionary so you'd still have two collections to work with. From a look-up standpoint this isn't really any better than just having two dictionaries, though from an update standpoint you would still have the advantage of only needing to update one collection and the changes would be reflected in the other.
What do you think about the last idea, where we recreate HashSet with extended functionality to hold two objects?

in a situation where you are constantly accessing both sides of the collection you would probably end up holding a reference to the inverse dictionary so you'd still have two collections to work with.

Yeah, this would likely be the case. Having to do biDictionary.Inverse every time would get old fast, but having to do biDictionary.AddLeft etc. would be equally annoying. For cases when TLeft != TRight, having the compiler determine which side to use would definitely be the most friendly.
I suppose we could always special case the situation where TLeft == TRight.... not sure if there's precedent for that anywhere else in the framework. That's sort of what you mentioned in the first part of your comment, though I think exposing the wrapper types would be more hassle than just forcing use of AddRight, AddLeft, etc. when TLeft == TRight. But then the API gets very large very fast...

From a look-up standpoint this isn't really any better than just having two dictionaries, though from an update standpoint you would still have the advantage of only needing to update one collection and the changes would be reflected in the other.

This is what the MultiValueDictionary ended up being: a wrapper around an existing collection that simplifies special-case usage. While I do think that has value for the MVD, I'm not sure that it has enough value - particularly for the BiDictionary.

What do you think about the last idea, where we recreate HashSet with extended functionality to hold two objects?

I'm probably being pedantic here, but I don't think looking at HashSet as a starting point would be as productive as looking at Dictionary as a starting point. Dictionary is already a HashSet with extended functionality to hold two objects: we just need to add some extra methods and another Buckets array to make it capable for bidirectional access.
HashSet{T}:
        internal struct Slot
        {
            internal int hashCode;      // Lower 31 bits of hash code, -1 if unused
            internal int next;          // Index of next entry, -1 if last
            internal T value;
        }

        private int[] _buckets;
        private Slot[] _slots;
        private int _count;
        private int _lastIndex;
        private int _freeList;
        private IEqualityComparer<T> _comparer;
        private int _version;

Dictionary{TKey, TValue}:
    private struct Entry {
            public int hashCode;    // Lower 31 bits of hash code, -1 if unused
            public int next;        // Index of next entry, -1 if last
            public TKey key;           // Key of entry
            public TValue value;         // Value of entry
        }

        private int[] buckets;
        private Entry[] entries;
        private int count;
        private int version;
        private int freeList;
        private int freeCount;
        private IEqualityComparer<TKey> comparer;
        private KeyCollection keys;
        private ValueCollection values;

BiDictionary{Tleft, TRight}:
    private struct Entry {
            public int hashCode;    // Lower 31 bits of hash code, -1 if unused
            public int next;        // Index of next entry, -1 if last
            public Tleft key;           // left entry
            public TRight value;         // Right entry
        }

        private int[] leftbuckets;
        private int[] rightBuckets;
        private Entry[] entries;
        private int count;
        private int version;
        private int freeList;
        private int freeCount;
        private IEqualityComparer<TLeft> leftcomparer;
        private IEqualityComparer<TRight> rightcomparer;
        private KeyLeftCollection leftkeys;
        private KeyRightCollection rightkeys;

I think that's probably what you meant anyways, but better to be sure :)
So anyways, back to the recreation. What does is give us? How is it better than two Inverse Dictionaries? Off the top of my head:
Pros:

Only one Entries array instead of two
Only one copy of _count, _version, _freelist, and _freecount
One less layer of indirection to the underlying Entries list since we don't have to go through a private Dictionary reference to get to it.

Cons:

More complicated of an implementation
Lots of copied code from Dictionary. Any future Dictionary modifications will need to manually copied to the BiDictionary. This probably isn't a big deal.

I can't think of any other major cons. Do you have anything else to add to this list? For very large BiDictionaries, only having one Entries array could be a worthwhile memory savings.

I suppose we could always special case the situation where TLeft == TRight.... not sure if there's precedent for that anywhere else in the framework

I wondered about precedent as well and couldn't really think of any; that's why I'm not sure if those overloads should exist or not.

...I think exposing the wrapper types would be more hassle than just forcing use of AddRight, AddLeft, etc. when TLeft == TRight.

That's the argument I've been having with myself all along lol.  The Left/Right-specific members are less hassle in the long run if the wrapper types have to be explicitly created... its definitely best when the wrappers can be abstracted away from the consumer.
Though I suppose we could make it easier to use the wrappers by offering simple methods like MakeLeft(value As TLeft) As LeftValue so that consumers can just call instance.MakeLeft(x) when they need a wrapped value.  Just talking about it, I think I like that idea better than AddRight/AddLeft/etc.

I think that's probably what you meant anyways, but better to be sure :)

Yup, that's what I meant.  :)  I used HashSet as the lowest common denominator but you're right that it's really more of a modification of Dictionary.
I think you hit the Pros/Cons list quite well.  I can't really think of anything to add.  The single Entries array is the critical performance piece and the complicated implementation is the only real con (I also doubt that potential future changes to Dictionary would cause difficulty).
So I think we have a direction from a code-implementation point of view, now we just have to hammer down the actual API structure.

So I think we have a direction from a code-implementation point of view, now we just have to hammer down the actual API structure.

Agreed. That's the fun part :)

I wondered about precedent as well and couldn't really think of any; that's why I'm not sure if those overloads should exist or not.

Though I suppose we could make it easier to use the wrappers by offering simple methods like MakeLeft(value As TLeft) As LeftValue so that consumers can just call instance.MakeLeft(x) when they need a wrapped value. Just talking about it, I think I like that idea better than AddRight/AddLeft/etc.

So to Add you would do
biDictionary<T, T>;
T leftThingToAdd, rightRightToAdd
biDictionary.Add(biDictionary.MakeLeft(leftThingToAdd), biDictionary.MakeRight(rightThingToAdd));

Or I suppose you could circumvent the necessity for the wrapper on one side by making the internal structure akin to a Dictionary<TLeft, TRightWrapper>, but that could get potentially very confusing. That would then look like:
biDictionary<T, T>;
T leftThingToAdd, rightRightToAdd
biDictionary.Add(leftThingToAdd, biDictionary.MakeRight(rightThingToAdd));

Personally I don't like either of the above. I would rather just be able to do:
biDictionary<T, T>;
T leftThingToAdd, rightRightToAdd
biDictionary.AddByLeft(leftThingToAdd, rightThingToAdd);

or
biDictionary<T, T>;
T leftThingToAdd, rightRightToAdd
biDictionary.Add(leftThingToAdd, rightThingToAdd); //OR: biDictionary.Inverse.Add(rightThingToAdd, leftThingToAdd);

So to Add you would do
biDictionary<T, T>;
T leftThingToAdd, rightRightToAdd
biDictionary.Add(biDictionary.MakeLeft(leftThingToAdd), biDictionary.MakeRight(rightThingToAdd

Yes, that is what I was getting at.  However, you wouldn't have to explicitly provide both parameters that way; as soon as you do the first one the signature is narrowed down and the second parameter type can be implied/auto-cast.  Assuming of course that there are no overloads which take TLeft/TRight directly (that is, only the wrapper types are used in parameters).
I guess it really comes down to whether or not we are going to implement the IDictionary interface(s).  If we do, then the wrapper types are necessary, if we don't then AddByLeft/AddByRight would be fine (if we agree that the extra members on the class are better than having to create the wrapper instances).
I think the reason I favor the wrappers is because they only have to be manually used in the situation where TLeft == TRight.  Whenever that is not the case, the wrappers can be completely abstracted through type conversion defined on LeftValue and RightValue.
I kind of like the implication of providing the Inverse wrapper just to house the members that deal with inverted parameters (there'd still just be the one core BiDictionary underneath) but that would preclude implementing IDictionary<TRight, TLeft> as all of the "Right" members would be in the Inverse wrapper.

Sorry for the delay in response, I just got back from vacation.

I guess it really comes down to whether or not we are going to implement the IDictionary interface(s). If we do, then the wrapper types are necessary

My issue with this is that we would have to implement the IDictionary interfaces for the wrapper types, not the actual types. And I don't imagine this has much value since you can't pass it around as a Dictionary< type, type> which is the whole point of implementating the IDictionary< type, type> interface.

(if we agree that the extra members on the class are better than having to create the wrapper instances).

I think so, yes.

I kind of like the implication of providing the Inverse wrapper just to house the members that deal with inverted parameters (there'd still just be the one core BiDictionary underneath) but that would preclude implementing IDictionary as all of the "Right" members would be in the Inverse wrapper.

Well the inverse wrapper would implement IDictionary< TRight>, but the primary BiDictionary would only implement IDictionary< TLeft>. I envisioned them both being full Dictionaries but with the same underlying information.

Hi Ian, sorry I dropped on the face on the Earth on this.  But I think we reached a consensus on the design.  What should be our next step?

I'm not sure exactly what the API review process is like for corefxlab. In CoreFX the process is strictly documented, but corefxlab may be less restrictive since it is more of a work-in-progress repo.
This is what I imagine it will look like:

It would probably be the most helpful to start with an initial implementation submitted as a PR to CoreFXLab. That way we can get some more feedback on the real result and refine our best-case API and implementation.
Next up we'll want to make a formal API proposal and submit it to CoreFX as an issue. The System.Buffers issue is a perfect example of what we'll want this to look like since that also came from Corefxlab and was merged into the main CoreFX repo. We'll no doubt get significantly more feedback in this stage.
Go through API reviews and further refine the prototype
Submit the implementation to CoreFX as a Pull Request.
After more feedback, merge in the BiDictionary.

[Nit, BiDirectional woudl be capitalized Bidirectional because bi is not a word]
Some good motivating scenarios would be valuable. I have probably used one (at least, two dictionaries) a few times but good examples do not come to mind.

JSON.Net uses bidirectional for cyclic references (de)serialization. I guess bidirectional is useful whenever you need cyclic features like when object contain key to itself (e. g. tag system)

I've added a motivation section and have submitted a the PR implementation #2613.

From @Symbai in https://github.com/dotnet/corefxlab/issues/2793:

I would like to request a new collection type which features fast lookup support in both directions. To make this possible not only the key but also the value has to be unique.
There currently is no collection for this and the workaround of creating two dictionaries but one is reversed increases memory and performance footprints by 2x.


Update package index

new packages:

fortran-curl
FKB
hipfort
fpm

updates packages:

sqliteff, elsi, vegetables, erloff, tapenade, strff, iso_varying_string, fortjson, fortran-csv-module, openmolcas, octopus, WHIZARD, MESA, Truchas, quaff, psblas3, ElmerFEM, ogpf, jsonff, parff

new features:

use https://badgen.net/ for gitlab badges

#build_preview

Hi @awvwgk, are you able to check the effect of these changes on the package search functionality? I think the Gitlab projects now need special attention in the Javascript search.
https://github.com/fortran-lang/fortran-lang.org/blob/f3ea348612f944de4c396b05aab9a970a9dd6cfb/assets/js/package_search.js#L112-L162

Seems the search is still finding results, see https://fortran-lang.org/pr/196/packages/search/?query=strff, but not generating the correct links.

Seems the search is still finding results, see https://fortran-lang.org/pr/196/packages/search/?query=strff, but not generating the correct links.

Yep, and it would be nice to retain the Gitlab icons as well :+1:

I got the search working with 8623b32877bad348e16c6a238129db21d5b6b948, somewhat tricky to find all the right places to add a new field, but now it seems fine.

#build_preview

#delete_preview

I added a bunch more of packages, mainly formatters I have recommended recently to colleagues and the interface generators discussed on the discourse.


fix: Updated required version of AWS provider to 3.56.0

Fixes #1570

v17.11.0 has been just released.


[BUG] - Log buffering issue

Internal
Area
Logging
Summary
When the node is shutdown improperly (eg machine or VM it runs in dies) and then restarted there are some initial log messages then a seeming hang for a lttle over two hours before the stdout log messages are finally printed (with the log time stamps being from near the start of the seeming hang.
Steps to reproduce
Steps to reproduce the behavior:

Run the node in a VM.

Restart the VM and the node within the VM.
See error

Expected behavior
THe logs should continue to be displayed while the node is validating its on-disk storage.
Screenshots and attachments
The last log message before the seeming hang was:
[nix:cardano.node.ip-producers:Notice:5] [2021-08-28 04:29:22.40 UTC] IPSubscriptionTarget {ispIps = [], ispValency = 0}

then over 2 hour later the log was:
[nix:cardano.node.ChainDB:Info:5] [2021-08-28 04:35:11.25 UTC] Opened imm db with immutable tip at 5114891c5fe54befc11ae2e2d5f6ab74d086ecfce5f4a046cf5d25026f3f7982 at slot 38515068 and chunk 1783

Same issue. Log output of a standalone node (nothing else running in this VM):
[nix:cardano.node.dns-producers:Notice:5] [2021-09-11 07:36:57.94 UTC] [DnsSubscriptionTarget {dstDomain = "relays-new.cardano-mainnet.iohk.io", dstPort = 3001, dstValency = 1}]
[nix:cardano.node.ip-producers:Notice:5] [2021-09-11 07:36:57.94 UTC] IPSubscriptionTarget {ispIps = [], ispValency = 0}

the no output (or any signs of life) for over 30 minutes asnd then
[nix:cardano.node.ChainDB:Info:5] [2021-09-11 07:37:17.61 UTC] Opened imm db with immutable tip at 3b39fb8a5d97c18e79075bc8b1db12bdf64b7054f240d452d0e5ed4f012e63d0 at slot 39736285 and chunk 1839
[nix:cardano.node.ChainDB:Info:5] [2021-09-11 07:37:19.13 UTC] Opened vol db

Resolved since node 1.33.0 https://github.com/input-output-hk/cardano-node/releases/tag/1.33.0


[DCOS_OSS-2177] Add instructions for deploying on Windows, with supporting Vagrantfile

(edit by Adam for convenience: https://jira.mesosphere.com/browse/DCOS_OSS-2177)
Add instructions for running DC/OS E2E on Windows.  The only way we could get it to work was using Vagrant.  This works similarly to dcos-docker's Vagrant setup, but I have rewritten it to use Ubuntu 16.04. Because Ubuntu is generally more up-to-date than CentOS, it is simpler to install Python 3.5 and newer versions of Docker.
Having the Docker build in this repo means the users have to wait for the VM software to install, but it also provides the flexibility to change the setup. I've also tried to explain why everything is in there, to avoid any "magic that just makes it work".
The description for the Windows installation is applicable to Mac and Linux as well. Just needs different commands to download the Vagrantfile and to setup the routing.

This deserves a CHANGELOG.rst entry!

What happens when you run dcos-docker web inside the VM?

We can merge this without tests but we need the linter to pass.
First issue:
lists of files in version control and sdist do not match!
missing from sdist:
  vagrant
  vagrant/Vagrantfile
make: *** [check-manifest] Error 1
The command "make lint" failed and exited with 2 during .

Use setup.cfg to say that we don't want to distribute these files to people pip installing the package.


fix: Remove @internal annotation from snapshot_

This commit removes the @internal annotation from snapshot_,
and fixes https://github.com/firebase/firebase-functions-test/issues/87.
snapshot_ is currently referenced here.
More context here
I'm happy to work through better alternatives too.
Thank you for opening a Pull Request! Before submitting your PR, there are a few things you can do to make sure it goes smoothly:

[x] Make sure to open an issue as a bug/issue before writing your code!  That way we can discuss the change, evaluate designs, and agree on the general idea
[x] Ensure the tests and linter pass
[x] Code coverage does not decrease (if any source code was changed)
[?] Appropriate docs were updated (if necessary)

Fixes https://github.com/firebase/firebase-functions-test/issues/79  🦕

Is there an appropriate person I should ping for review? 🐼


Emojis in Comments

Emojis throw errors when creating Comments.
The  code block below shows what happened locally when I clicked Create after putting an emoji in a Summary. The same thing happens for emojis in the Comment body.
Not sure what to do about this:

Allow emojis, vs
Prohibit emojis but don't throw Errors.

ActiveRecord::StatementInvalid in CommentsController#create
Trilogy::ProtocolError: 1366: Incorrect string value: '\xF0\x9F\xA5\xB8' for column 'summary' at row 1
Rails.root: /Users/joe/mushroom-observer

Application Trace | Framework Trace | Full Trace
Request
Parameters:

{"utf8"=>"✓", "authenticity_token"=>"[FILTERED]", "comment"=>{"summary"=>"asdf🥸", "comment"=>""}, "commit"=>"Create", "q"=>"1oaSB", "target"=>"547363", "type"=>"Observation"}

@mo-nathan suggests migrating the entire database to use utf8mb4 and also standardize the collation on utf8mb4_0900_ai_ci, which are the current Rails standards. See Slack General Discussion

I looked a bit more at this and I don't think there's direct support for this in the rails migration framework, but I think it just needs to run some direct SQL per this page: https://stackoverflow.com/questions/8906813/how-to-change-the-default-charset-of-a-mysql-table.
Probably should be written as a migration that has an up and down and runs the appropriate ALTER TABLE queries.  It's possible that this has to be a one way migration since it might throw an error trying to switch from  utf8mb4 to utf8mb3.

Before I read the above comment, CoPIlot suggested:
def self.up
  execute "ALTER DATABASE `#{ActiveRecord::Base.connection.current_database}` CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;"
end

But:

per @mo-nathan's comment above, the migration should instead be on a per-table basis, affecting only the tables which are not on utf8mb4 or utf8mb4_0900_ai_ci.
Do we have to use CONVERT CHARACTER SET instead of CHARACTER SET?

Yes, I think we need "CONVERT CHARACTER SET".  The point is that we are changing the table not the database (ALTER TABLE vs. ALTER DATABASE).  The CoPilot suggestion would only change the default for new tables which are already getting created correctly with the current Rails default of utf8mb4/utf8mb4_0900_ai_ci.

Thanks!
Maybe I'll deal with this later. It's really low priority for me. But at least we have a record of how to do it.

I ran the migration below, which updated the schema.
Than manually created a Comment with some emoji's, and got this Trilogy error:
Trilogy::ProtocolError: 1366: Incorrect string value: '\xF0\x9F\x91\x8D u...' for column 'notes' at row 1 Rails.root: /Users/joe/mushroom-observer

Application Trace | Framework Trace | Full Trace Request Parameters:

{"utf8"=>"✓", "authenticity_token"=>"[FILTERED]", "comment"=>{"summary"=>"👍", "comment"=>"🍄🟫🍄🟫"}, "commit"=>"Create", "q"=>"1vU6y", "target"=>"561686", "type"=>"Observation"}

When I go back and display the Observation, the Comment is correct:

Here's my generator:
rails generate migration ChangeCommentsCharsetAndCollation

and migration:
class ChangeCommentsCharsetAndCollation < ActiveRecord::Migration[7.1]
  def up
    execute <<-SQL
      ALTER TABLE comments CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
    SQL
  end

  def down
    execute <<-SQL
      ALTER TABLE comments CONVERT TO CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci;
    SQL
  end
end


chore: update docs links

This PR...
Changes

Fixes

How to test it

screenshots

Checklist

[ ] tested locally
[ ] added new dependencies
[ ] updated the docs
[ ] added a test

Should some links be updated in https://github.com/kubeshop/testkube-cloud-ui too?


can't use semicolons in strings

semicolons cant be used in strings because the interpreter uses it to split

fixed -- waiting on pr


Stop using ColumnVector.spark32BitMurmurHash3

cudf is planning to remove the Spark-specific MurmurHash3 kernel since it has been implemented in the Hash class in spark-rapids-jni.  See rapidsai/cudf#15074 for details.  The code needs to be updated to stop using ai.rapids.cudf.ColumnVector.spark32BitMurmurHash3 and start using com.nvidia.spark.rapids.jni.Hash.murmurHash32.

fixed by #10652


Interaction mode doesn't show statements in the else block

Description:
When the diagram is drawn, statements in the else block are not displayed in Interaction mode.

Steps to reproduce:
Affected Versions:
1.0.0-RC1
OS, DB, other environment details and versions:
Related Issues (optional):

Suggested Labels (optional):

Suggested Assignees (optional):

Closing since the fix has been merged


Possibility to separate mouse and headset lighting settings

Some RGB headsets are wireless. I am wondering whether it is possible to keep the LED on the headset off when using Aurora to prolong battery life.

Maybe there is a setting at your device setting to deactive the SDK support for your headset?

The headset is Logitech G933. There is one setting to allow/disallow all Logitech devices to be controlled by third party application, but no setting for individual devices.

I can add 3 options: "Disable Mouse Lighting", "Disable Headset Lighting", and "Disable Keyboard Lighting"
Each function is self explanatory. It will work out for Corsair and Razer SDKs, but for Logitech headsets and mice are bundled together in one command. So disabling mouse and/or headset lighting will result in both Logitech mouse and headset being turned off.

Not bad. At least it'll work with Logitech headset + Logitech keyboard + some other brand mouse setup.

If logitech keyboard and mouse are not bundled together in one command, I could benefit from that. My mouse lighting is not working at the moment.


resource is not added in the classpath

src/main/resources is not added to the classpath => resources
can't be used. (probably will be true for src/test/resources)
Cheers

There are tests in place that prove that resources are added. Therefore I need more information from you, e.g. which version of sbteclipse you are using and a reproducible test case, preferably as a GitHub repo.
Thanks
Heiko

Will change this immediately. Thanks!

There will be at least a simple and a full blown example as soon as all the settings are written in stone. Some still change, though and therefore the documentation is kept as simple as possible to avoid lots of changes.

Ok, thanks Heiko. My little akka project is now fully functional :)
On 04/01/12 12:00, Heiko Seeberger wrote:

Will change this immediately. Thanks!

There will be at least a simple and a full blown example as soon as all the settings are written in stone. Some still change, though and therefore the documentation is kept as simple as possible to avoid lots of changes.

Reply to this email directly or view it on GitHub:
https://github.com/typesafehub/sbteclipse/issues/73#issuecomment-3353661


Need aka.ms/connect-to-bot link

Sample information
4.3.x Node.js samples
Describe the bug
Need a link/doc for this aka.ms link: https://aka.ms/connect-to-bot (or we replace or remove the link)
This link should have info on how to connect to a bot with and without a botfile using the 4.3 emulator.
FYI @cwhitten

I believe we decided not to create this link so I'm going to close the issue.


Update checkmarx-scanner-reference.md

Correction about Additional CLI flag and about Settings. In Setting the example is what to set up to be able to pass through a proxy, however this might be placed in a specific proxy paragraph.
Harness Developer Pull Request
Thanks for helping us make the Developer Hub better. The PR will be looked at
by the maintainers.
What Type of PR is This?

[ ] Issue
[ ] Feature
[ ] Maintenance/Chore

If tied to an Issue, list the Issue(s) here:

Issue(s)

House Keeping
Some items to keep track of. Screen shots of changes are optional but would help the maintainers review quicker.

[ ] Tested Locally
[ ] Optional Screen Shoot.

Please check the Execution Link of the Pipeline for the Website Draft URL. This is located in the Preview Step and also is available in #hdh_alerts. E.g Website Draft URL: https://unique-id--harness-developer.netlify.app

Please check the Execution Link of the Pipeline for the Website Draft URL. This is located in the Preview Step and also is available in #hdh_alerts. E.g Website Draft URL: https://unique-id--harness-developer.netlify.app

Please check the Execution Link of the Pipeline for the Website Draft URL. This is located in the Preview Step and also is available in #hdh_alerts. E.g Website Draft URL: https://unique-id--harness-developer.netlify.app

Please check the Execution Link of the Pipeline for the Website Draft URL. This is located in the Preview Step and also is available in #hdh_alerts. E.g Website Draft URL: https://unique-id--harness-developer.netlify.app


do not create persistent routes on windows

It's always bothered me a little that the persistent routes we create on Windows will not be reset on reboot. It's the only such change we make to the system and I think it's now, in conjunction with the increased numbers of routes we recently started adding to bypass LAN addresses, creating issues for users:
https://github.com/Jigsaw-Code/outline-client/issues/366
After some testing on my laptop, it seems we no longer need persistent routes to recover from sleep/suspend - perhaps some of the recent changes around listening for network changes helped?
As you pointed out, auto-reconnect is the one thing that will behave a little differently now: the system won't reconnect to the LAN until the user logs in and Outline starts. However, given a choice between bricking someone's network configuration and this, I'll take this (BTW, this will also be the case on Linux: Outline won't make any permanent changes to the system and auto-reconnect can only happen when the user logs in).

LGTM! I don't have my Windows laptop with me, but I'll test it on Monday.

@alalamav Thanks for testing.


compile: is it a implicit cast?

C:\Users\chan>go version
go version go1.5.2 windows/amd64

package main

import (
	"fmt"
)

var num int64 = 0xfffff

func main() {
	// section 1
	x := string(num)
	fmt.Println(len(x))

	// section 2
	y := string(rune(num))
	fmt.Println(len(y))
}

see section 1, is it a implicit cast?
I think section 2 is better.

@chanxuehong the issue tracker is only used for tracking bugs, please don't ask questions here.
Please ask questions on the mailing list or the go forum, see https://golang.org/wiki/Questions.
Thanks
Dave

@davecheney it think it is a bug, but I am not ensure.

It's not a bug
https://golang.org/ref/spec#Conversions
"""
Conversions to and from a string type
Converting a signed or unsigned integer value to a string type yields a string containing the UTF-8 representation of the integer.
"""

ok , thanks


create_elb_service_linked_role expects an integer and not a bool

I have issues
I'm submitting a...

[x] bug report

What is the current behaviour?
create_elb_service_linked_role expects an integer, and not a boolean as described in the docs.
https://github.com/terraform-aws-modules/terraform-aws-eks/blob/0180644770878a28bc9511b7a0ce285c0e7454db/README.md#L105
If this is a bug, how to reproduce? Please include a code sample if relevant.
Instantiate the module with:

module "eks" {
  // trimmed ...

   create_elb_service_linked_role = "true"
}

And run terraform plan:
Error: Error refreshing state: 1 error(s) occurred:

* module.infrastructure.module.eks.aws_iam_service_linked_role.elasticloadbalancing: cannot parse "true" as an integer

This appears to be because create_elb_service_linked_role is used directly as the count field.
https://github.com/terraform-aws-modules/terraform-aws-eks/blob/405e170f90a6b0ac0ef9b1e63e622996bf28dabe/cluster.tf#L62-L64
What's the expected behavior?
Expect to be able to pass create_elb_service_linked_role = "true" instead of create_elb_service_linked_role = 1. The former is the usage described in README.md file
Are you able to fix this problem and submit a PR? Link here if you have already.
Very happy to make a PR; I believe it's a simple update of:
count = "${var.create_elb_service_linked_role == "true" ? 1 : 0}"

Environment details

Affected module version: 1.6.0
OS: Linux
Terraform version: v0.11.6

Any other relevant info

Can you set create_elb_service_linked_role = true, without the quotes and it works?

I see. So do you think it's it a bug or a documentation issue?

@max-rocket-internet yes, it is a documentation issue.

But it's documented the same way as all the other true/false variables in the README, right? Are you saying they should all be documented differently?

@max-rocket-internet the confusing part in the README is the string type hint:
 | create_elb_service_linked_role | Whether to create the service linked role for the elasticloadbalancing service. Without this EKS cannot create ELBs. | string | `false` | no |

A change from string to bool would be enough and maybe include create_elb_service_linked_role = true in one of the examples in the README.

what's required to make eks to be able to create elb if you set create_elb_service_linked_role=true, from what I understand is that it just apply these lines
https://github.com/terraform-aws-modules/terraform-aws-eks/blob/405e170f90a6b0ac0ef9b1e63e622996bf28dabe/cluster.tf#L62-L65
and it will create Service role name AWSServiceRoleForElasticLoadBalancing .
but what I experienced is that if I apply ingress-nginx from https://github.com/kubernetes/ingress-nginx/blob/master/docs/deploy/index.md.
the external ip will always be
kubectl get svc -n ingress-nginx
NAME                   TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
default-http-backend   ClusterIP      <IP_ADDRESS>   <none>        80/TCP                       34m
ingress-nginx          LoadBalancer   <IP_ADDRESS>   <pending>     80:30537/TCP,443:30088/TCP   32m

I finally get what's going on. if we also provision the vpc by terraform vpc module, we must add tag to the public sub net which is used by eks to create ELB
the tag format should be
 kubernetes.io/cluster/<eks-cluster-name> = shared

then when you create LoadBalancer type of service , it can create ELB based for public subnet which has tag  kubernetes.io/cluster/ = shared

@email2liyang You are right. This would look like this:
  vpc_tags = {
    "kubernetes.io/cluster/${var.cluster_name}" = "shared"
  }

  public_subnet_tags = {
    Subnet = "public"

    # this is a workaround for the case in which terraform is run twice.
    # Otherwise Terraform will remove those tags.
    "kubernetes.io/cluster/${var.cluster_name}" = "shared"
  }

  private_subnet_tags = {
    Subnet = "private"

    "kubernetes.io/cluster/${var.cluster_name}" = "shared"
  }

However, this only happens if you run terraform apply twice. The issue is that, when you run it the second time terraform tries to remove the "kubernetes.io/cluster/<your-cluster-name>" = "shared" tag.

yes, same, here, you should manage the tag in vpc module rather than eks module.
and I don't think we need to apply  "kubernetes.io/cluster/${var.cluster_name}" = "shared" to private subnet, as private subnet can't create ELB

We are talking about a few issues here.

Documentation

A change from string to bool would be enough and maybe include

Yeah, I get you and I agree but the doc is automatically generated using terraform-docs. All "booleans" are treated and documented in the same way. I think it would be good to change this.

K8s choosing subnets for ELBs. You've already worked out the tagging.

Issue with aws_iam_service_linked_role. Is there any issue here? There's a couple of related issues https://github.com/terraform-aws-modules/terraform-aws-eks/issues/120 https://github.com/terraform-aws-modules/terraform-aws-eks/issues/132 so this seems to be a pain point. I'm not sure what the solution is.

for this var  setting "create_elb_service_linked_role" it will apply these lines https://github.com/terraform-aws-modules/terraform-aws-eks/blob/405e170f90a6b0ac0ef9b1e63e622996bf28dabe/cluster.tf#L62-L65.
and it will create Service role named AWSServiceRoleForElasticLoadBalancing. but if it's already exist, the terraform apply will failed, this happens to at least 2 of my aws account, but the eks cluster has been created successfully.
is there way to detect if AWSServiceRoleForElasticLoadBalancing has already created in the underling aws account to avoid the duplication error?
Thanks

On 1. I agree it's confusing docs that led me to open the issue.
IMO it would be better if the variable type here was bool:
https://github.com/terraform-aws-modules/terraform-aws-eks/blob/0180644770878a28bc9511b7a0ce285c0e7454db/README.md#L105

I agree about the labelling of bool types but I think this will all change in TF version 0.12.
I am going to close this issue as it's not really about create_elb_service_linked_role parameter, it's about how all parameters are labelled. And this is generated from terraform-docs.
For now the options are:

Wait until TF 0.12 as this has a lot of type changes and handling.
Create a new issue with a proposal to change terraform-docs to something else. Or stop using it.

@max-rocket-internet How about adding this parameter in one of the examples in Terraform module description. That should be possible right now, without waiting for TF version 0.12.


OpenAPI or Swagger for REST APIs [Proposal]

I want to say, I love how Docusaurus easily enables creation of sites & documentation at the same time. Nice job.
I am writing regarding a question or possible enhancement.
Are there any suggestions on how to use Docusaurus to document simple REST APIs ?
Obviously I can document by my API in markdown by hand, but I am wondering what the next level of efficiency would be where I have evolving APIs, without re-updating my Docusaurus markdown by hand after each change to my API specification.
The Slate project has a number of 3rd party tools to convert from Swagger specs to Slate-markdown, maybe one thing I could explore is creating or adjusting a tool to perform the same function for Docusaurus.
link: OpenAPI to Slate-markdown
Any suggestions on how to best use Docusaurus in this manner?, or how how I might tweak or improve Docusaurus for documenting smaller REST APIs? All suggestions appreciated. Including, don't do this! :)

We've been using redoc (outside of docusaurus) to display our api docs. I've been pretty happy with it. Rather than reinventing the wheel, you could just make that available to parse openapi/swagger format json files.

@willvincent That is definitely a reasonable idea. The question I have been struggling with is which tools to support. Once you add support for one, you will get asked to support a lot more. Maybe that is ok. Start with one or two. That's why I think being able to plugin various tools or formats would be optimal. We can provide a couple for reference and then show how others could be incorporated.

Just curious, has the core Docusaurus team had any discussions oh this topic that would help people still pondering this?

Just giving some thought. On the next major version, we have a plugin system that basically let you pull any data sources.
See https://github.com/facebook/Docusaurus/issues/1438 for an overview of plugins/themes/presets API.

This is basically the reason we didn't choose docusaurus. Progress on this would be great, we loved everything else.

@yangshun Do you know if there has been any work on this for v2, even if just planning? Thanks.

@JoelMarcey not planned. It's unlikely we'll pursue this effort as FB Docusaurus sites don't use it. We made v2 as a platform so that the community can support features on their own. Even if we were to build this, we don't use it for our own sites and maintainability will be an issue. This is better left up to community members who need to use it and can maintain it.

I've started working on an OpenAPI Docusaurus plugin. It's still a work in progress, but this is what it looks like:

@bourdakos1 how usable is it in it's current state?

@willvincent it should be pretty usable minus some bugs here and there. I've only been working on the plugin for a couple days, should be pretty stable by the end of the week.

@willvincent I haven't pushed the plugin to npm yet, so you would need to copy the docusaurus-plugin-openapi folder into your project and then add the following to your docusaurus.config.js:
plugins: [
    [path.resolve(__dirname, "./docusaurus-plugin-openapi"), {
      openapiPath: require.resolve('./openapi.json')
    }],
  ],

It's on npm now so just:
yarn add docusaurus-plugin-openapi

update docusaurus.config.js:
plugins: [
  ["docusaurus-plugin-openapi", {
    openapiPath: require.resolve("./openapi.json"),
  }],
],

and maybe add a link themeConfig.navbar.links:
{
  to: "api/",
  activeBasePath: "api",
  label: "API",
  position: "left",
}

Hey, that looks great.
Wondering: why not integrating open-api as an iframe of a D2 website? I've not used it for a long time now but isn't there some kind of client UI already provided (SwaggerUI or something like that?).
A basic integration could be to add this UI as an iframe in an existing page, or even embedded into a MDX document.
This deeper integration via plugin would need to rebuild each time there's a change to your api file, unlike the iframe solution. Isn't that a problem?

@slorber Thanks :)
I’m personally not a huge fan of SwaggerUI, I’d rather have something that look and feels more native to the rest of the docs.
With the way the plugin is set up now it would need to rebuild whenever you change the api file. This doesn’t really affect me, because I redeploy my docs when I make updates to my services. I think building it also has the benefits of the pages being more static.
However, I can see how it would be useful to be able to point Docusaurus to a link to your openapi spec and be able to adapt whenever it changes. I think this is still possible as a plugin (make the openapi component browser only and fetch the spec dynamically) you would just lose the benefit of the pages being prerendered

With v2 it is really easy to use redoc since we can use any react components in it. Problem comes in theming it correctly. It works pretty great with normal theme, but the styles conflict in dark mode and text becomes unreadable.

great to know, thanks :)
If this is a problem it's possible to just disable the dark mode for now :)
@bourdakos1 your solution works, but you are doing it the hard way (I mean, duplicating the docs plugin code).
Do you really need all the features of docs, with the sidebar, custom paths per api etc?
One solution is to just plug some React components in a JSX page and render the openapi stuff dynamically.
There may be value in having a hierarchy of routes for the apis, and organize them, but there's probably little value in doing SSR rendering for dynamic api widgets.

@slorber I definitely want a sidebar, but don't really need custom paths. I started out by doing it with only one api page and hash routing for all the sections, but switched to actual routes for no real reason 🤷♂

I published a simple gist with a Redocusaurus component with redoc theme options included to match Docusaurus styling (including dark mode) : https://gist.github.com/rohit-gohri/b1a19f37702cfe4a6c5a47933a11785b

Thanks @rohit-gohri that looks nice
If you want some help to publish this as a plugin tell me.

@bourdakos1  . Thats amazing !
I have multiple projects each with one openapi spec. It seems its meant to have only one spec ? I can  open an issue on the repo if you think this is easy to support.

@ymolists thanks 😁 feel free to open an issue, Ill take a look and see how hard it will be to add

damn we really need  something like this. any ETA for this feature?

@dude-awesome it's not planned that core Docusaurus contributors work on this.
We are a small team and should concentrate on core features, and let the community tackle specific needs in plugins.
If plugin authors are blocked to implement such features, we'll do our best to unlock them.

Just found this implementation that does the same thing, without the scrolling issue and uses a plugin.
Sébastien, maybe it might be worth a shot to contact the creator?

Just found this implementation that does the same thing, without the scrolling issue and uses a plugin.
Sébastien, maybe it might be worth a shot to contact the creator?

Thanks for this interesting article. The creator is @davidjgoss so let's just ping him here 😅
I don't have time to do it right now but I think adding some kind of "recipes" section to our doc with the most frequent how-to questions would be nice.

Thanks for this interesting article. The creator is @davidjgoss so let's just ping him here 😅
I don't have time to do it right now but I think adding some kind of "recipes" section to our doc with the most frequent how-to questions would be nice.

Hi @ArtFlag @slorber!
I'm happy to wrap this up and publish as a plugin if people will find it useful.

Hi @ArtFlag @slorber!
I'm happy to wrap this up and publish as a plugin if people will find it useful.

It would be nice to have a plugin for that thanks.

It would be nice to have a plugin for that thanks.

I have made a preset, redocusaurus, from the gist. Can use it like:
// docusaurus.config.js

module.exports = {
  // ...
  presets: [
    [
      'redocusaurus',
      {
        specs: [{
          routePath: '/api/'
          specUrl: 'https://redocly.github.io/redoc/openapi.yaml',
        }],
      }
    ],
  ],
  // ...
};

It includes a theme docusaurus-theme-redoc with the Redoc component and styling changes, and a plugin to create pages from OpenAPI yaml files or links, docusaurus-plugin-redoc.
Read more here: https://github.com/rohit-gohri/redocusaurus/
Demo here: https://rohit-gohri.github.io/redocusaurus/
The docs are a little WIP, if anything is missing please open an issue.

I have made a preset, redocusaurus, from the gist. Can use it like:
// docusaurus.config.js

module.exports = {
  // ...
  presets: [
    [
      'redocusaurus',
      {
        specs: [{
          routePath: '/api/'
          specUrl: 'https://redocly.github.io/redoc/openapi.yaml',
        }],
      }
    ],
  ],
  // ...
};

It includes a theme docusaurus-theme-redoc with the Redoc component and styling changes, and a plugin to create pages from OpenAPI yaml files or links, docusaurus-plugin-redoc.
Read more here: https://github.com/rohit-gohri/redocusaurus/
Demo here: https://rohit-gohri.github.io/redocusaurus/
The docs are a little WIP, if anything is missing please open an issue.

Thanks for doing that @rohit-gohri - looks great! I've added an update to my post.

There are already plugins like redocusaurus or plugin-openapi that do this.


Support on_schema_change feature on incremental model

This PR was originally created by @hiro-o918 over at: https://github.com/Tomme/dbt-athena/pull/114
Problem
Currently, dbt-athena does not support on_schema_change option.
closes https://github.com/Tomme/dbt-athena/issues/47
Solution

Add custom column class AthenaColumn

Athena has different column type between DML and DDL (e.g. integer)

https://docs.aws.amazon.com/athena/latest/ug/data-types.html

To avoid error on alter table statement because of difference of column type

Overwrite macro sync_column_schemas

Athena does not support drop columns statement, but replace columns

https://docs.aws.amazon.com/athena/latest/ug/alter-table-replace-columns.html

this causes inconsistency with original sync_column_schemas, so overwrite this macro on this adaptor

Thank you for migrating the PR!

rebased changes just resolves conflict with the release/1.0.4.

@thenaturalist we need to re-open this one

@hiro-o918 will you be so nice to open a pr against this new fork with this super valuable changes? when we merge the release branch the auto-delete feature, deleted the release branch and closed this one. We would like to have this feeature in soon.


Enable asynchronous on beforeRender method

Doc: https://github.com/costrojs/costrojs.github.io/pull/39

For testing, npm pack result: costro-2.2.0.tgz


ARROW-10785: [Rust] Optimize take string

Further optimizes take string to benefit from creating a buffer directly.
Interestingly, it seems it is still faster to copy a Vec  than to use a buffer for the the values. Presumably extend_from_slice is much slower than the Vec one.
Benchmark results
take str 512            time:   [2.1942 us 2.1956 us 2.1971 us]
                        change: [-22.950% -22.847% -22.738%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 4 outliers among 100 measurements (4.00%)
  2 (2.00%) low severe
  1 (1.00%) high mild
  1 (1.00%) high severe

take str 1024           time:   [3.7476 us 3.7529 us 3.7605 us]
                        change: [-23.958% -23.825% -23.678%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 7 outliers among 100 measurements (7.00%)
  1 (1.00%) low mild
  3 (3.00%) high mild
  3 (3.00%) high severe

take str null indices 512
                        time:   [2.0983 us 2.1015 us 2.1056 us]
                        change: [-24.742% -24.387% -23.981%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 8 outliers among 100 measurements (8.00%)
  5 (5.00%) high mild
  3 (3.00%) high severe

take str null indices 1024
                        time:   [3.6767 us 3.6788 us 3.6812 us]
                        change: [-22.588% -22.497% -22.406%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 2 outliers among 100 measurements (2.00%)
  2 (2.00%) high mild

take str null values 1024
                        time:   [3.6732 us 3.6773 us 3.6836 us]
                        change: [-23.029% -22.857% -22.695%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 3 outliers among 100 measurements (3.00%)
  2 (2.00%) high mild
  1 (1.00%) high severe

take str null values null indices 1024
                        time:   [5.3789 us 5.3821 us 5.3853 us]
                        change: [-10.711% -10.610% -10.509%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 1 outliers among 100 measurements (1.00%)

@jorgecarleitao
Ready for review :)


Broken links on Wiki Home Page

2 links on the home page are broken:
- [Debugging TypeScript problems](./debugging)
- [Wanting to contribute to the TypeScript codebase or to understand the compiler](./learn-the-compiler)

Those links are:

https://github.com/microsoft/TypeScript/wiki/debugging
https://github.com/microsoft/TypeScript/wiki/learn-the-compiler

Fixed!


Use virtualenv to embed requirements

Hi,
Here's a way to quickly reproduce a working dev environment

Thank you, looks good!


Issue with deploying 100 ASIM rules playbook

Hey all,
Trying to deploy the rules you provided here - https://portal.azure.com/#create/Microsoft.Template/uri/https%3A%2F%2Fsoc.cyber.wa.gov.au%2Fonboarding%2Fwasoc-sentinel-rules-deployment.json - but the ARM template just failed over and over again.
I suspect it's related to this issue - https://github.com/Azure/Azure-Sentinel/issues/8623
Are you seeing this happen on your end?

Hi jusso, yep I believe the issue you linked will mean there are some failures depending on the ASIM state in target tenant. We are currently re-architecting our standard rules to utilise https://learn.microsoft.com/en-us/azure/sentinel/ci-cd?tabs=github and once tested will switch our guidance over to using that process - will link this issue to appropriate merge once we complete the change.

Hi @jusso-dev,
We have adjusted our docs to follow the content hub approach for deployment in the interim, see https://soc.cyber.wa.gov.au/baselines/data-sources/#51-improving-microsoft-sentinel-detection-coverage
Kind Regards,
Adon


Uncaught Socket exceptions.

Describe the bug
Whilst investigating a socket error in some personal code and looking at the atServer code to see how we caught the exception, it seems from the logs we also crash. However I now do not think it is a fatal crash.
Here is are some sample log file entries
<EMAIL_ADDRESS>  | SEVERE|2023-12-05 00:31:19.268232|OutboundMessageListener|SocketException: Connection reset by peer (OS Error: Connection reset by peer, errno = 104), address = 2ffeca71-aaad-52d1-ba55-9173d5504f1f.swarm0002.atsign.zone, port = 42152
<EMAIL_ADDRESS>  | SEVERE|2023-12-05 00:31:19.269954|SecondaryServerBootStrapper|Uncaught error: SocketException: Connection reset by peer (OS Error: Connection reset by peer, errno = 104), address = 2ffeca71-aaad-52d1-ba55-9173d5504f1f.swarm0002.atsign.zone, port = 42152

This would seem to suggest that we have a SocketException but it is not being caught by either binding or the socket itself.
I see the same thing with my test code located at:-
https://github.com/atsign-company/Colin-snippets/blob/master/socket-listener/bin/socket_listener.dart
This code does not crash but a simple nmap upsets it.
Steps to reproduce

First I run the code at https://github.com/atsign-company/Colin-snippets/blob/master/socket-listener/bin/socket_listener.dart
Then I run a nmap scan
And then I see the crash
I cannot seem to catch the SocketException in the main loop so I have had to runZoneGuarded

Expected behavior
The SocketException should just get caught and things just move along ? Why the unCaught Exception up to main?
Screenshots
See the software running in a three windows and 'crash' when a port scan is run....
https://asciinema.org/a/fTtlBiZnHeCmFPxNeffw7mc90

@cconstab See https://github.com/atsign-company/Colin-snippets/pull/17

Perfect catch thank you..

@cconstab Do you know how to reproduce this on your atServer? Running nmap in itself isn't enough (at least, for me)

After some further testing I've proven that the problem is that, when we write data onto sockets in the secondary server, we do not subsequently call flush(). Per documentation of dart.io's IOSink interface
  /// This operation is non-blocking. See [flush] or [done] for how to get any
  /// errors generated by this call.
  void write(Object? object);

As a result, if the socket has been closed (for example by the other end) then the call to write() does not itself throw an exception, but an exception is thrown asynchronously shortly afterwards.
There are two things to do

Update the interfaces and implementations of the write method in classes/interfaces which wrap sockets in some way (InboundConnection, OutboundConnection et al) from void write(String data); to Future<void> write(String data); and update any code which calls that method accordingly.
Ensure that for every socket connection made we have a block of code like `socket.done.onError(() {// connection clean-up code});


Where is CNN2 mentioned in the article?

Hi, I find that after fc7, you put a fc8 and then compute the loss. But in the article, the author says that he also has a CNN2 for classification(however, the author didn't mention the structure of the CNN2……). I'm confused……

i think this can be any structure,like cnn1.


fix: make workers-chat-demo work

This required a couple more changes in chat.html.
Closes https://github.com/cloudflare/wrangler2/issues/477
(A proper fix would be to automatically choose the right protocol, and we should also probably default wrangler dev to https.)

yolo, landing


[SPARK-43033][SQL] Avoid task retries due to AssertNotNull checks

What changes were proposed in this pull request?
This PR update the task retry logic to not retry if the exception has an error class which means a user error.
Why are the changes needed?
As discussed https://github.com/apache/spark/pull/40655#discussion_r1156693696, tasks that failed because of exceptions generated by AssertNotNull should not be retried.
Does this PR introduce any user-facing change?
No
How was this patch tested?
This PR comes with tests.

cc @Ngone51 @jiangxb1987 too FYI

According to the two ideas provided by @cloud-fan  on how to differentiate user-facing errors and user-triggered errors ([have a special prefix] or [create a base trait for transient errors]), in the implementation process, I think having a special prefix may be a more good idea.
I defined a new SparkThrowable#isTransientError method with reference to SparkThrowable#isInternalError, and decided whether to skip the retry logic based on the return value of the SparkThrowable#isTransientError.
can you re-review the code when you are free, and make some comments. @cloud-fan @aokolnychyi

OK, I'm on the fence now. On one hand, the number of transient errors should be much smaller than the number of user-triggered errors, so it's better to find out these transient errors and mark them. On the other hand, not retrying the task can be a regression that leads to job failure, so we should make sure we only skip task retry when the error is definitely user-triggered.
To be conservative, now I'm leaning towards picking some errors and marking them as "can skip task retry". I like the idea from @aokolnychyi that we can add a JSON field for it.

I would be on the conservative side and skip retry when we are absolutely certain that a retry will not help.
SerDe failures, for example, are good candidates (which is already handled), and similar ... note that in non deterministic tasks, a retry can succeed which earlier failed with a user exception

+1 for being safe

OK, I'm on the fence now. On one hand, the number of transient errors should be much smaller than the number of user-triggered errors, so it's better to find out these transient errors and mark them. On the other hand, not retrying the task can be a regression that leads to job failure, so we should make sure we only skip task retry when the error is definitely user-triggered.
To be conservative, now I'm leaning towards picking some errors and marking them as "can skip task retry". I like the idea from @aokolnychyi that we can add a JSON field for it.

I'm trying to change the code now

I would be on the conservative side and skip retry when we are absolutely certain that a retry will not help. SerDe failures, for example, are good candidates (which is already handled), and similar ... note that in non deterministic tasks, a retry can succeed which earlier failed with a user exception
I see, I'm trying to change the code now.

I would be on the conservative side and skip retry when we are absolutely certain that a retry will not help.
SerDe failures, for example, are good candidates (which is already handled), and similar ... note that in non deterministic tasks, a retry can succeed which earlier failed with a user exception

I would be on the conservative side and skip retry when we are absolutely certain that a retry will not help. SerDe failures, for example, are good candidates (which is already handled), and similar ... note that in non deterministic tasks, a retry can succeed which earlier failed with a user exception

I'm trying to change the code now

I would be on the conservative side and skip retry when we are absolutely certain that a retry will not help. SerDe failures, for example, are good candidates (which is already handled), and similar ... note that in non deterministic tasks, a retry can succeed which earlier failed with a user exception

I see, I'm trying to change the code now

I would be on the conservative side and skip retry when we are absolutely certain that a retry will not help. SerDe failures, for example, are good candidates (which is already handled), and similar ... note that in non deterministic tasks, a retry can succeed which earlier failed with a user exception

I see, I'm trying to change the code now

I have modified the code, can you re-review the code when you are free, and make some comments. @cloud-fan @aokolnychyi @mridulm

According to the suggestions provided by @cloud-fan @aokolnychyi .I modified the code.
I added the isTransient  attribute to some error_classes such as AMBIGUOUS_LATERAL_COLUMN_ALIAS, CANNOT_PARSE_DECIMAL, DATATYPE_MISMATCH, DIVIDE_BY_ZERO, _LEGACY_ERROR_TEMP_3043(npe)
  "CANNOT_PARSE_DECIMAL" : {
    "message" : [
      "Cannot parse decimal."
    ],
    "sqlState" : "22018",
    "isTransient" : false
  },

When these errors occur, the retry logic is skipped.
   if (!ef.isTransient) {
        // if the exception has an error class which means a non-transient error, not retry
        logError(s"$task has a non-transient exception: ${ef.description}; not retrying")
        sched.dagScheduler.taskEnded(tasks(index), reason, null, accumUpdates, metricPeaks, info)
        abort(s"$task has a non-transient exception: ${ef.description}", ef.exception)
        return
    }

hope you leave some comments in your free time. @cloud-fan @aokolnychyi @mridulm

useful feature, any updates here?

useful feature, any updates here?

I modified the code according to the suggestions provided by @cloud-fan @aokolnychyi @mridulm , next step may be to seek help from people who worked on the error framework. Can you give some suggestions on the next work?


Use add-module-exports babel plugin to reduce *.default

These have been creeping into common.js, especially.  Seems simple to eliminate?
https://www.npmjs.com/package/babel-plugin-add-module-exports

@gigabo I was looking into this and think I can help. Is this something that you want only in the react-server package or throughout all packages?

Hi @karanjthakkar thanks for taking this on!
Yeah, I think react-server is the biggest offender.
Looks like react-server-core-middleware has a couple, too.

@gigabo I've set it up locally but running into this issue on my local machine: https://github.com/redfin/react-server/issues/292 on node 4.2.3. Trying it out now with the latest node.


Split ___innerBuild function into multiple subfunctions

Motivation:
The ___innerBuild function in the generated entity implementation classes is responsible for building the query string. Due to the peculiarities of the implementation, the function can get very large. For example, in my production schema, the size of the generated function in mutation entity implementation already reaches 3 thousand lines. In this issue, the user has encountered an 18k line function that Kotlin cannot compile. We have to break this function into a number of sub-functions so that we can work with large schemas using the Kobby plugin.

Available since release 2.0.0-beta.01


Create hierarchical package.json structure

react-qr-code is a dependency only in PMS. The Common service shouldn't have this, but instead we should modify the Docker scripts in a way to install all missing packages for the projects.

@material-ui/pickers is only for GPA

react-to-print only in PMS
react-csv only in PMS

Closing - no reason to do this as package info are different for the projects (e.g. different default ports).


wasm-sync file index error in package.json

Report

[x] I have searched existing issues and this is not a duplicate

Issues and Steps to Reproduce
import "yoga-layout/wasm-sync" jump to wrong file.
Expected Behavior
import "yoga-layout/wasm-sync" jump to ./src/entrypoint/wasm-sync-web.js
Actual Behavior
import "yoga-layout/wasm-sync" jump to ./src/entrypoint/wasm-async-web.js
Link to Code
https://github.com/facebook/yoga/commit/5310eb3cf7892ae905c9492355b088dd5269547a#r131421132
"./wasm-sync": {
  "browser": "./src/entrypoint/wasm-sync-web.js",
  "node": "./src/entrypoint/wasm-sync-node.js",
  "default": "./src/entrypoint/wasm-async-web.js"
  //                                ^^^^^ it should be sync
}

Oof. I can publish a new version with a fix.
Next version of Yoga (planning to do a release at the same time as RN 0.74) is single flavor, but relies on ES module top-level await to do that.

Pushed a fix: https://www.npmjs.com/package/yoga-layout/v/2.0.1