Microsoft VBScript Runtime error on Windows

Etcher v1.0.0-beta.17
Windows 10 x64

I am receiving a Microsoft VBScript error when I installed this and ran it on Windows 10, this is the first time that I have encountered this issue. Screenshot of the full error:

Interesting, thanks for reporting! It seems we have an issue in our VBScript drive detection script: https://github.com/resin-io-modules/drivelist/blob/master/scripts/win32.bat.
I'll look at it today and see if I can find the issue. Its unlikely that I'll be able to reproduce, so I might bother you to confirm my fix :)
BTW, can you actively reproduce? You can try running the script above directly and see if you can still reproduce, so we discard any issue caused by Electron packaging or any interference between the GUI application and the drive detection script.

Just to confirm, do you want me to see if I could reproduce the bug by running the bat script or the js script?

Just to confirm, do you want me to see if I could reproduce the bug by running the bat script or the js script?

Hi @rakeshdas1 ,
Yeah, if you could do that, it would be awesome! :)

Same error, same line!

Also, just opened up said batch file, and these are the contents.

So the issue happens on the Add() method of our custom List class:
Public Sub Add(element)
    Dictionary.Add element, ""
End Sub

This class is used in several places, and Windows doesn't seem to give us a precise stack trace.
Can you try running the following (slightly modified) script? I've added some debugging information which should hopefully help us trace down the issue:
<!-- : Begin batch script
@echo off

:: Ensure System32 is in the PATH, to avoid weird
:: 'cscript' is not recognized as an internal or external command"" errors.
set PATH=%PATH%;%SYSTEMROOT%\System32

cscript //nologo "%~f0?.wsf"
exit /b

----- Begin wsf script --->
<job><script language="VBScript">

Class List
	Private Dictionary

	Private Sub Class_Initialize()
		Set Dictionary = CreateObject("Scripting.Dictionary")
	End Sub

	Public Sub Add(element)
    Wscript.Echo element
		Dictionary.Add element, ""
	End Sub

	Public Function GetArray()
		GetArray = Dictionary.Keys()
	End Function

	Public Function Count
		Count = UBound(Dictionary.Keys()) + 1
	End Function
End Class

Set WMIService = GetObject("winmgmts:\\.\root\cimv2")

Function BooleanToString(ByVal Value)
	If Value Then
		BooleanToString = "True"
	Else
		BooleanToString = "False"
	End If
End Function

Function GetOperatingSystemDevice()
	Set OperatingSystemsColumn = WMIService.ExecQuery("SELECT SystemDrive FROM Win32_OperatingSystem")
	Err.Clear
	For Each OperatingSystem in OperatingSystemsColumn
		On Error Resume Next
		GetOperatingSystemDevice = OperatingSystem.Properties_("SystemDrive")
		If Err.Number <> 0 Then
			GetOperatingSystemDevice = Nothing
			Err.Clear
		End If
	Next
End Function

Function GetLogicalDisks(ByVal DriveDevice)
  Wscript.Echo "Created GetLogicalDisks"
	Set GetLogicalDisks = new List
	Set DrivePartitionsColumn = WMIService.ExecQuery _
		("ASSOCIATORS OF {Win32_DiskDrive.DeviceID=""" & _
			DriveDevice & """} WHERE AssocClass = " & _
				"Win32_DiskDriveToDiskPartition")

	For Each DrivePartition In DrivePartitionsColumn
		Set DriveLogicalDisksColumn = WMIService.ExecQuery _
			("ASSOCIATORS OF {Win32_DiskPartition.DeviceID=""" & _
				DrivePartition.DeviceID & """} WHERE AssocClass = " & _
					"Win32_LogicalDiskToPartition")

		For Each DriveLogicalDisk In DriveLogicalDisksColumn
			Set LogicalDisk = CreateObject("Scripting.Dictionary")
			LogicalDisk.Add "Device", DriveLogicalDisk.DeviceID
			LogicalDisk.Add "IsProtected", DriveLogicalDisk.Access = 1
			GetLogicalDisks.Add(LogicalDisk)
		Next
	Next
End Function

Function GetTopLevelDrives()
	OperatingSystemDevice = GetOperatingSystemDevice()
  Wscript.Echo "Created GetTopLevelDrives"
	Set GetTopLevelDrives = new List
	Set TopLevelDrivesColumn = WMIService.ExecQuery("SELECT * FROM Win32_DiskDrive")
	For Each TopLevelDrive In TopLevelDrivesColumn
		Set Summary = CreateObject("Scripting.Dictionary")

		DeviceID = Replace(TopLevelDrive.DeviceID, "\", "\\")
		Summary.Add "Device", DeviceID

		Summary.Add "Description", TopLevelDrive.Caption
		Summary.Add "Size", TopLevelDrive.Size

    Wscript.Echo "Created Mountpoints"
		Set Mountpoints = new List
		IsRemovable = InStr(TopLevelDrive.MediaType, "Removable") = 1
		IsProtected = False

		Set LogicalDisks = GetLogicalDisks(DeviceID)

		For Each LogicalDisk In LogicalDisks.GetArray()
			Mountpoints.Add(LogicalDisk.Item("Device"))

			If LogicalDisk.Item("IsProtected") Then
				IsProtected = True
			End If

			If LogicalDisk.Item("Device") = OperatingSystemDevice Then
				IsRemovable = False
			End If
		Next

		Summary.Add "Mountpoints", Mountpoints
		Summary.Add "IsRemovable", IsRemovable
		Summary.Add "IsProtected", IsProtected

		GetTopLevelDrives.Add(Summary)
	Next
End Function

For Each TopLevelDrive In GetTopLevelDrives().GetArray()
	Wscript.Echo "device: """ & TopLevelDrive.Item("Device") & """"
	Wscript.Echo "description: """ & TopLevelDrive.Item("Description") & """"
	Wscript.Echo "size: " & TopLevelDrive.Item("Size")
	Wscript.Echo "raw: """ & TopLevelDrive.Item("Device") & """"
	Wscript.Echo "system: " & BooleanToString(Not TopLevelDrive.Item("IsRemovable"))
	Wscript.Echo "protected: " & BooleanToString(TopLevelDrive.Item("IsProtected"))

	If TopLevelDrive.Item("Mountpoints").Count = 0 Then
		Wscript.Echo "mountpoints: []"
	Else
		Wscript.Echo "mountpoints:"
		For Each Mountpoint In TopLevelDrive.Item("Mountpoints").GetArray()
			Wscript.Echo "  - path: """ & Mountpoint & """"
		Next
	End If

	Wscript.Echo ""
Next
</script></job>

@jviotti This was the output:
Created Mountpoints
Created GetLogicalDisks
Created Mountpoints
Created GetLogicalDisks
Created Mountpoints
Created GetLogicalDisks
Created Mountpoints
Created GetLogicalDisks
C:\Users\Rakesh\AppData\Local\Temp\E19D.tmp.bat?.wsf(22, 4) Microsoft VBScript runtime error: This key is already associated with an element of this collection

Thanks a lot for the help so far @rakeshdas1. That sadly still doesn't say much :/
Can you try the following new edits?
<!-- : Begin batch script
@echo off

:: Ensure System32 is in the PATH, to avoid weird
:: 'cscript' is not recognized as an internal or external command"" errors.
set PATH=%PATH%;%SYSTEMROOT%\System32

cscript //nologo "%~f0?.wsf"
exit /b

----- Begin wsf script --->
<job><script language="VBScript">

Class List
	Private Dictionary

	Private Sub Class_Initialize()
		Set Dictionary = CreateObject("Scripting.Dictionary")
	End Sub

	Public Sub Add(element)
		Dictionary.Add element, ""
	End Sub

	Public Function GetArray()
		GetArray = Dictionary.Keys()
	End Function

	Public Function Count
		Count = UBound(Dictionary.Keys()) + 1
	End Function
End Class

Set WMIService = GetObject("winmgmts:\\.\root\cimv2")

Function BooleanToString(ByVal Value)
	If Value Then
		BooleanToString = "True"
	Else
		BooleanToString = "False"
	End If
End Function

Function GetOperatingSystemDevice()
	Set OperatingSystemsColumn = WMIService.ExecQuery("SELECT SystemDrive FROM Win32_OperatingSystem")
	Err.Clear
	For Each OperatingSystem in OperatingSystemsColumn
		On Error Resume Next
		GetOperatingSystemDevice = OperatingSystem.Properties_("SystemDrive")
		If Err.Number <> 0 Then
			GetOperatingSystemDevice = Nothing
			Err.Clear
		End If
	Next
End Function

Function GetLogicalDisks(ByVal DriveDevice)
	Wscript.Echo "Created GetLogicalDisks"
	Set GetLogicalDisks = new List
	Set DrivePartitionsColumn = WMIService.ExecQuery _
		("ASSOCIATORS OF {Win32_DiskDrive.DeviceID=""" & _
			DriveDevice & """} WHERE AssocClass = " & _
				"Win32_DiskDriveToDiskPartition")

	For Each DrivePartition In DrivePartitionsColumn
		Set DriveLogicalDisksColumn = WMIService.ExecQuery _
			("ASSOCIATORS OF {Win32_DiskPartition.DeviceID=""" & _
				DrivePartition.DeviceID & """} WHERE AssocClass = " & _
					"Win32_LogicalDiskToPartition")

		For Each DriveLogicalDisk In DriveLogicalDisksColumn
			Wscript.Echo "Created LogicalDisk"
			Set LogicalDisk = CreateObject("Scripting.Dictionary")
			Wscript.Echo "Add Device to LogicalDisk"
			LogicalDisk.Add "Device", DriveLogicalDisk.DeviceID
			Wscript.Echo "Add IsProtected to LogicalDisk"
			LogicalDisk.Add "IsProtected", DriveLogicalDisk.Access = 1
			Wscript.Echo "Add LogicalDisk to GetLogicalDisks"
			GetLogicalDisks.Add(LogicalDisk)
		Next
	Next
End Function

Function GetTopLevelDrives()
	OperatingSystemDevice = GetOperatingSystemDevice()
	Wscript.Echo "Created GetTopLevelDrives"
	Set GetTopLevelDrives = new List
	Set TopLevelDrivesColumn = WMIService.ExecQuery("SELECT * FROM Win32_DiskDrive")
	For Each TopLevelDrive In TopLevelDrivesColumn
		Wscript.Echo "Created Summary"
		Set Summary = CreateObject("Scripting.Dictionary")

		DeviceID = Replace(TopLevelDrive.DeviceID, "\", "\\")
		Wscript.Echo "Add Device to Summary"
		Summary.Add "Device", DeviceID

		Wscript.Echo "Add Description to Summary"
		Summary.Add "Description", TopLevelDrive.Caption
		Wscript.Echo "Add Size to Summary"
		Summary.Add "Size", TopLevelDrive.Size

		Wscript.Echo "Created Mountpoints"
		Set Mountpoints = new List
		IsRemovable = InStr(TopLevelDrive.MediaType, "Removable") = 1
		IsProtected = False

		Set LogicalDisks = GetLogicalDisks(DeviceID)

		For Each LogicalDisk In LogicalDisks.GetArray()
			Wscript.Echo "Add LogicalDisk Device to Mountpoints"
			Mountpoints.Add(LogicalDisk.Item("Device"))

			If LogicalDisk.Item("IsProtected") Then
				IsProtected = True
			End If

			If LogicalDisk.Item("Device") = OperatingSystemDevice Then
				IsRemovable = False
			End If
		Next

		Wscript.Echo "Add Mountpoints to Summary"
		Wscript.Echo "Add IsRemovable to Summary"
		Wscript.Echo "Add IsProtected to Summary"
		Summary.Add "Mountpoints", Mountpoints
		Summary.Add "IsRemovable", IsRemovable
		Summary.Add "IsProtected", IsProtected

		Wscript.Echo "Add Summary to GetTopLevelDrives"
		GetTopLevelDrives.Add(Summary)
	Next
End Function

For Each TopLevelDrive In GetTopLevelDrives().GetArray()
	Wscript.Echo "device: """ & TopLevelDrive.Item("Device") & """"
	Wscript.Echo "description: """ & TopLevelDrive.Item("Description") & """"
	Wscript.Echo "size: " & TopLevelDrive.Item("Size")
	Wscript.Echo "raw: """ & TopLevelDrive.Item("Device") & """"
	Wscript.Echo "system: " & BooleanToString(Not TopLevelDrive.Item("IsRemovable"))
	Wscript.Echo "protected: " & BooleanToString(TopLevelDrive.Item("IsProtected"))

	If TopLevelDrive.Item("Mountpoints").Count = 0 Then
		Wscript.Echo "mountpoints: []"
	Else
		Wscript.Echo "mountpoints:"
		For Each Mountpoint In TopLevelDrive.Item("Mountpoints").GetArray()
			Wscript.Echo "	- path: """ & Mountpoint & """"
		Next
	End If

	Wscript.Echo ""
Next
</script></job>

This is the output:
Created GetTopLevelDrives
Created Summary
Add Device to Summary
Add Description to Summary
Add Size to Summary
Created Mountpoints
Created GetLogicalDisks
Created LogicalDisk
Add Device to LogicalDisk
Add IsProtected to LogicalDisk
Add LogicalDisk to GetLogicalDisks
Add LogicalDisk Device to Mountpoints
Add Mountpoints to Summary
Add IsRemovable to Summary
Add IsProtected to Summary
Add Summary to GetTopLevelDrives
Created Summary
Add Device to Summary
Add Description to Summary
Add Size to Summary
Created Mountpoints
Created GetLogicalDisks
Created LogicalDisk
Add Device to LogicalDisk
Add IsProtected to LogicalDisk
Add LogicalDisk to GetLogicalDisks
Add LogicalDisk Device to Mountpoints
Add Mountpoints to Summary
Add IsRemovable to Summary
Add IsProtected to Summary
Add Summary to GetTopLevelDrives
Created Summary
Add Device to Summary
Add Description to Summary
Add Size to Summary
Created Mountpoints
Created GetLogicalDisks
Created LogicalDisk
Add Device to LogicalDisk
Add IsProtected to LogicalDisk
Add LogicalDisk to GetLogicalDisks
Created LogicalDisk
Add Device to LogicalDisk
Add IsProtected to LogicalDisk
Add LogicalDisk to GetLogicalDisks
Add LogicalDisk Device to Mountpoints
Add LogicalDisk Device to Mountpoints
Add Mountpoints to Summary
Add IsRemovable to Summary
Add IsProtected to Summary
Add Summary to GetTopLevelDrives
Created Summary
Add Device to Summary
Add Description to Summary
Add Size to Summary
Created Mountpoints
Created GetLogicalDisks
Created LogicalDisk
Add Device to LogicalDisk
Add IsProtected to LogicalDisk
Add LogicalDisk to GetLogicalDisks
Created LogicalDisk
Add Device to LogicalDisk
Add IsProtected to LogicalDisk
Add LogicalDisk to GetLogicalDisks
Add LogicalDisk Device to Mountpoints
Add LogicalDisk Device to Mountpoints
C:\Users\Rakesh\AppData\Local\Temp\E19D.tmp.bat?.wsf(22, 4) Microsoft VBScript runtime error: This key is already associated with an element of this collection```

Thanks a lot again! So it seems that for some reason, a device has a duplicate mount point coming from Win32_DiskPartition or Win32_LogicalDiskToPartition. Can you relate to this? Have you noticed your PC reporting duplicated drive letters for certain drives?
Here is a new modified script (hopefully the final one). I added extra debugging information to see what is the duplicated letter, and I also fixed the issue, so it should work fine without any errors this time:
<!-- : Begin batch script
@echo off

:: Ensure System32 is in the PATH, to avoid weird
:: 'cscript' is not recognized as an internal or external command"" errors.
set PATH=%PATH%;%SYSTEMROOT%\System32

cscript //nologo "%~f0?.wsf"
exit /b

----- Begin wsf script --->
<job><script language="VBScript">

Class List
	Private Dictionary

	Private Sub Class_Initialize()
		Set Dictionary = CreateObject("Scripting.Dictionary")
	End Sub

	Public Sub Add(element)
		Dictionary.Add element, ""
	End Sub

	Public Function GetArray()
		GetArray = Dictionary.Keys()
	End Function

	Public Function Count
		Count = UBound(Dictionary.Keys()) + 1
	End Function

	' Only works for simple types (e.g: not objects)
	Public Function Has(element)
		Result = False
		For Each Key In Dictionary.Keys()
			If Key = Element Then
				Result = True
			End If
		Next
		Has = Result
	End Function
End Class

Set WMIService = GetObject("winmgmts:\\.\root\cimv2")

Function BooleanToString(ByVal Value)
	If Value Then
		BooleanToString = "True"
	Else
		BooleanToString = "False"
	End If
End Function

Function GetOperatingSystemDevice()
	Set OperatingSystemsColumn = WMIService.ExecQuery("SELECT SystemDrive FROM Win32_OperatingSystem")
	Err.Clear
	For Each OperatingSystem in OperatingSystemsColumn
		On Error Resume Next
		GetOperatingSystemDevice = OperatingSystem.Properties_("SystemDrive")
		If Err.Number <> 0 Then
			GetOperatingSystemDevice = Nothing
			Err.Clear
		End If
	Next
End Function

Function GetLogicalDisks(ByVal DriveDevice)
	Set GetLogicalDisks = new List
	Set DrivePartitionsColumn = WMIService.ExecQuery _
		("ASSOCIATORS OF {Win32_DiskDrive.DeviceID=""" & _
			DriveDevice & """} WHERE AssocClass = " & _
				"Win32_DiskDriveToDiskPartition")

	Wscript.Echo "DriveDevice: " & DriveDevice

	For Each DrivePartition In DrivePartitionsColumn
		Wscript.Echo "DrivePartition.DeviceID: " & DrivePartition.DeviceID
		Set DriveLogicalDisksColumn = WMIService.ExecQuery _
			("ASSOCIATORS OF {Win32_DiskPartition.DeviceID=""" & _
				DrivePartition.DeviceID & """} WHERE AssocClass = " & _
					"Win32_LogicalDiskToPartition")

		For Each DriveLogicalDisk In DriveLogicalDisksColumn
			Set LogicalDisk = CreateObject("Scripting.Dictionary")

			Wscript.Echo "DriveLogicalDisk.DeviceID: " & DriveLogicalDisk.DeviceID
			Wscript.Echo "DriveLogicalDisk.Access: " & DriveLogicalDisk.Access
			LogicalDisk.Add "Device", DriveLogicalDisk.DeviceID
			LogicalDisk.Add "IsProtected", DriveLogicalDisk.Access = 1
			GetLogicalDisks.Add(LogicalDisk)
		Next
	Next
End Function

Function GetTopLevelDrives()
	OperatingSystemDevice = GetOperatingSystemDevice()
	Set GetTopLevelDrives = new List
	Set TopLevelDrivesColumn = WMIService.ExecQuery("SELECT * FROM Win32_DiskDrive")
	For Each TopLevelDrive In TopLevelDrivesColumn
		Set Summary = CreateObject("Scripting.Dictionary")

		DeviceID = Replace(TopLevelDrive.DeviceID, "\", "\\")
		Summary.Add "Device", DeviceID

		Summary.Add "Description", TopLevelDrive.Caption
		Summary.Add "Size", TopLevelDrive.Size

		Set Mountpoints = new List
		IsRemovable = InStr(TopLevelDrive.MediaType, "Removable") = 1
		IsProtected = False

		Wscript.Echo "Fetching logical disks"
		Set LogicalDisks = GetLogicalDisks(DeviceID)

		Wscript.Echo "Create Mountpoints List for " & DeviceID
		For Each LogicalDisk In LogicalDisks.GetArray()
			Wscript.Echo "Add LogicalDisk Device: " & LogicalDisk.Item("Device")

			If Mountpoints.Has(LogicalDisk.Item("Device")) Then
				Wscript.Echo "Mountpoint already exists"
			Else
				Wscript.Echo "Mountpoint does not exist"
				Mountpoints.Add(LogicalDisk.Item("Device"))
			End If

			If LogicalDisk.Item("IsProtected") Then
				IsProtected = True
			End If

			If LogicalDisk.Item("Device") = OperatingSystemDevice Then
				IsRemovable = False
			End If
		Next

		Wscript.Echo "Done adding mountpoints"
		Wscript.Echo ""
		Wscript.Echo ""

		Summary.Add "Mountpoints", Mountpoints
		Summary.Add "IsRemovable", IsRemovable
		Summary.Add "IsProtected", IsProtected

		GetTopLevelDrives.Add(Summary)
	Next
End Function

For Each TopLevelDrive In GetTopLevelDrives().GetArray()
	Wscript.Echo "device: """ & TopLevelDrive.Item("Device") & """"
	Wscript.Echo "description: """ & TopLevelDrive.Item("Description") & """"
	Wscript.Echo "size: " & TopLevelDrive.Item("Size")
	Wscript.Echo "raw: """ & TopLevelDrive.Item("Device") & """"
	Wscript.Echo "system: " & BooleanToString(Not TopLevelDrive.Item("IsRemovable"))
	Wscript.Echo "protected: " & BooleanToString(TopLevelDrive.Item("IsProtected"))

	If TopLevelDrive.Item("Mountpoints").Count = 0 Then
		Wscript.Echo "mountpoints: []"
	Else
		Wscript.Echo "mountpoints:"
		For Each Mountpoint In TopLevelDrive.Item("Mountpoints").GetArray()
			Wscript.Echo "  - path: """ & Mountpoint & """"
		Next
	End If

	Wscript.Echo ""
Next
</script></job>

Let me know how that goes, and I'll create a patch with the fix!

@jviotti, I did recently change drive letters for two of my drives, I think some symlinks were still left in place and that was causing the issue! Maybe the older drive letters were still left in a cache and still thought they led to a drive when they didn't. Anyways, the script did succeed this time and this was the output in case you are curious:
DriveDevice: \\\\.\\PHYSICALDRIVE0
DrivePartition.DeviceID: Disk #0, Partition #0
DrivePartition.DeviceID: Disk #0, Partition #1
DrivePartition.DeviceID: Disk #0, Partition #2
DriveLogicalDisk.DeviceID: C:
DriveLogicalDisk.Access: 0
Create Mountpoints List for \\\\.\\PHYSICALDRIVE0
Add LogicalDisk Device: C:
Mountpoint does not exist
Done adding mountpoints

Fetching logical disks
DriveDevice: \\\\.\\PHYSICALDRIVE2
DrivePartition.DeviceID: Disk #2, Partition #0
DriveLogicalDisk.DeviceID: T:
DriveLogicalDisk.Access: 0
Create Mountpoints List for \\\\.\\PHYSICALDRIVE2
Add LogicalDisk Device: T:
Mountpoint does not exist
Done adding mountpoints

Fetching logical disks
DriveDevice: \\\\.\\PHYSICALDRIVE5
Create Mountpoints List for \\\\.\\PHYSICALDRIVE5
Done adding mountpoints

Fetching logical disks
DriveDevice: \\\\.\\PHYSICALDRIVE1
DrivePartition.DeviceID: Disk #1, Partition #0
DriveLogicalDisk.DeviceID: D:
DriveLogicalDisk.Access: 0
DrivePartition.DeviceID: Disk #1, Partition #1
DriveLogicalDisk.DeviceID: F:
DriveLogicalDisk.Access: 0
DrivePartition.DeviceID: Disk #1, Partition #2
Create Mountpoints List for \\\\.\\PHYSICALDRIVE1
Add LogicalDisk Device: D:
Mountpoint does not exist
Add LogicalDisk Device: F:
Mountpoint does not exist
Done adding mountpoints

Fetching logical disks
DriveDevice: \\\\.\\PHYSICALDRIVE3
DrivePartition.DeviceID: Disk #3, Partition #0
DrivePartition.DeviceID: Disk #3, Partition #1
DriveLogicalDisk.DeviceID: S:
DriveLogicalDisk.Access: 0
DriveLogicalDisk.DeviceID: S:
DriveLogicalDisk.Access: 0
Create Mountpoints List for \\\\.\\PHYSICALDRIVE3
Add LogicalDisk Device: S:
Mountpoint does not exist
Add LogicalDisk Device: S:
Mountpoint already exists
Done adding mountpoints

Fetching logical disks
DriveDevice: \\\\.\\PHYSICALDRIVE4
Create Mountpoints List for \\\\.\\PHYSICALDRIVE4
Done adding mountpoints

Fetching logical disks
DriveDevice: \\\\.\\PHYSICALDRIVE6
Create Mountpoints List for \\\\.\\PHYSICALDRIVE6
Done adding mountpoints

device: "\\\\.\\PHYSICALDRIVE0"
description: "INTEL SSDPEKKW256G7"
size:<PHONE_NUMBER>00
raw: "\\\\.\\PHYSICALDRIVE0"
system: True
protected: False
mountpoints:
  - path: "C:"

device: "\\\\.\\PHYSICALDRIVE2"
description: "WDC WD5000AAKS-65A7B2"
size:<PHONE_NUMBER>80
raw: "\\\\.\\PHYSICALDRIVE2"
system: True
protected: False
mountpoints:
  - path: "T:"

device: "\\\\.\\PHYSICALDRIVE5"
description: "Generic STORAGE DEVICE USB Device"
size:
raw: "\\\\.\\PHYSICALDRIVE5"
system: False
protected: False
mountpoints: []

device: "\\\\.\\PHYSICALDRIVE1"
description: "Samsung SSD 840 EVO 120GB"
size:<PHONE_NUMBER>40
raw: "\\\\.\\PHYSICALDRIVE1"
system: True
protected: False
mountpoints:
  - path: "D:"
  - path: "F:"

device: "\\\\.\\PHYSICALDRIVE3"
description: "WDC WD6400AAKS-65A7B2"
size:<PHONE_NUMBER>00
raw: "\\\\.\\PHYSICALDRIVE3"
system: True
protected: False
mountpoints:
  - path: "S:"

device: "\\\\.\\PHYSICALDRIVE4"
description: "Generic STORAGE DEVICE USB Device"
size:
raw: "\\\\.\\PHYSICALDRIVE4"
system: False
protected: False
mountpoints: []

device: "\\\\.\\PHYSICALDRIVE6"
description: "Generic STORAGE DEVICE USB Device"
size:
raw: "\\\\.\\PHYSICALDRIVE6"
system: False
protected: False
mountpoints: []

Amazing, looks like S: was the duplicated one:
Fetching logical disks
DriveDevice: \\\\.\\PHYSICALDRIVE3
DrivePartition.DeviceID: Disk #3, Partition #0
DrivePartition.DeviceID: Disk #3, Partition #1
DriveLogicalDisk.DeviceID: S:
DriveLogicalDisk.Access: 0
DriveLogicalDisk.DeviceID: S:
DriveLogicalDisk.Access: 0
Create Mountpoints List for \\\\.\\PHYSICALDRIVE3
Add LogicalDisk Device: S:
Mountpoint does not exist
Add LogicalDisk Device: S:
Mountpoint already exists
Done adding mountpoints

Thanks a lot for your continuous help in debugging and getting this issue fixed, its truly appreciated! I'm going to send a PR to fix this issue very soon.

Fantastic, great work @jviotti and @rakeshdas1 !

I think I should change my LinkedIn title to "VBScript Developer" by now :P

Just as a reminder, I did once suggest using a NodeJS WMI module rather than persevering with VBScript ;)


boards: remove non-minimal peripherals from defconfig

According to the board porting guidelines, boards should "leave
peripherals and their drivers disabled by default". In Zephyr we
tipically enable GPIO and SERIAL, as they are virtually required by all
samples/tests in tree. However, for the rest of peripherals it is up to
the application/test to enable the necessary driver classes. It is also
useful that board's Kconfig.defconfig enables certain driver peripherals
based on a condition, e.g. enable I2C if SENSOR=y.
Ref. https://docs.zephyrproject.org/latest/hardware/porting/board_porting.html#general-recommendations
This patch removes the following driver classes from defconfig files:

CONFIG_ADC
CONFIG_COUNTER
CONFIG_EEPROM
CONFIG_ENTROPY
CONFIG_ESPI
CONFIG_HWINFO
CONFIG_I2C
CONFIG_LED
CONFIG_NETWORKING (and related)
CONFIG_PS2
CONFIG_PWM
CONFIG_SENSOR
CONFIG_SPI
CONFIG_SPI_SLAVE
CONFIG_WATCHDOG

Note that a previous attempt was done in #38510.
Fixes #30694
Signed-off-by: Gerard Marull-Paretas<EMAIL_ADDRESS>

marked DNM due to an issue with CI not calculating correct size of matrix, need a fix to testplan first.

need to get this in first: https://github.com/zephyrproject-rtos/zephyr/pull/48576

@gmarull  can you rebase please.

Hmm, what about peripheral chains? For example we have GPIO expander which is connected via I2C. Obviously the samples which uses GPIO (e.g. samples/basic/blinky) doesn't know anything about it and it enables only CONFIG_GPIO. But now we don't enable I2C in board's defconfig. So, where it should be enabled?

For such cases you can do in Kconfig.defconfig:
config I2C
	default y if GPIO

Would like to see most of not all "owners" ACK this and approve before it is merged. I agree with the changes, but we need to give time for this to be reviewed and any dependencies adjusted.

rebased to fix conflicts

mec15xx and mec1501 updates look good.

@chrta @fkokosinski @anangl @glaubermaroto @stephanosio please re-review


debian/control should include python-setuptools in Build-Depends

Unless python-setuptools is installed, then /usr/bin/luigi and /usr/bin/luigid do not get installed appropriately.
Given that setuptools is a build prerequisite rather than a runtime prerequisite, there is almost no impact to the end user systems.

Great can you send a pull request?

sure.  Will do shortly.

the PR was merged


[ServiceBus] StopProcessingAdheresToTokenSLA failing in nightly runs

ServiceBus runs are failing with:

Error message
Expected: 00:00:03 +/- 00:00:03
But was:  00:00:07.9884310
Off by:   00:00:04.9884310
Stack trace
at Azure.Messaging.ServiceBus.Tests.Processor.ProcessorLiveTests.StopProcessingAdheresToTokenSLA() in /Users/runner/work/1/s/sdk/servicebus/Azure.Messaging.ServiceBus/tests/Processor/ProcessorLiveTests.cs:line 554
at Azure.Messaging.ServiceBus.Tests.Processor.ProcessorLiveTests.StopProcessingAdheresToTokenSLA() in /Users/runner/work/1/s/sdk/servicebus/Azure.Messaging.ServiceBus/tests/Processor/ProcessorLiveTests.cs:line 554
at Azure.Messaging.ServiceBus.Tests.Processor.ProcessorLiveTests.StopProcessingAdheresToTokenSLA() in /Users/runner/work/1/s/sdk/servicebus/Azure.Messaging.ServiceBus/tests/Processor/ProcessorLiveTests.cs:line 554
at Azure.Messaging.ServiceBus.Tests.Processor.ProcessorLiveTests.StopProcessingAdheresToTokenSLA() in /Users/runner/work/1/s/sdk/servicebus/Azure.Messaging.ServiceBus/tests/Processor/ProcessorLiveTests.cs:line 555
at NUnit.Framework.Internal.TaskAwaitAdapter.GenericAdapter1.BlockUntilCompleted()    at NUnit.Framework.Internal.MessagePumpStrategy.NoMessagePumpStrategy.WaitForCompletion(AwaitAdapter awaiter)    at NUnit.Framework.Internal.AsyncToSyncAdapter.Await(Func1 invoke)
at NUnit.Framework.Internal.Commands.TestMethodCommand.RunTestMethod(TestExecutionContext context)
at NUnit.Framework.Internal.Commands.TestMethodCommand.Execute(TestExecutionContext context)
at NUnit.Framework.Internal.Commands.TimeoutCommand.<>c__DisplayClass5_0.b__0()
at System.Threading.Tasks.Task`1.InnerInvoke()

For more details check here:

https://dev.azure.com/azure-sdk/internal/_build/results?buildId=1142604&view=results

@jsquire for notification.

Not failing lately.


Make the calculation of the build graph a task so we can pass metadata around

@Eilon - we might need this for the 2.0.0 release if we want the repository sources to be determined by the CI.

🆙 📅


Suppor in macOS Ventura Public Beta?

Hi Matthias,
Thanks for providing this public example for Private Access Tokens.
I'm wondering whether you were successful testing it on macOS Ventura Public Beta? I installed the latest version, logged into an Apple ID and checked that it's enabled in Apple ID > Password and Security > AutoAuthenticate.
However, when I visit your example web page in Safari, I only get the 401, but no other requests are made. It basically looks the same on my Monterey Safari.
Cheers,
Christian

Hi Christian,
I don’t think this feature runs as “AutoAuthenticate” or needs any other activation. At least it does not on the iPad. I see many successful attempts from iPhone and iPad (that also use a Desktop user agent) devices.
Right now the log entries that might be your macOS Ventura are not sending any token back. So it’s not a token decoding/re-using error but no “authorization” token even showing up. There is no user agent sniffing involved, a “Www-Authenticate” challenge is sent to every device, even if it’s an Android phone.
This might be a case for the Radar, I need to install Ventura to test this. Here is how it looks like on an iPad:

I noticed some strange throttling sometimes as well so there could also be something just early beta intermittent, e.g., it might just work if you try again now.
Matthias

Hi Matthias,
Thanks for coming back to me!
My best guess is that my version of the Venture Beta just doesn't implement/process PATs yet.
Do you actually have access to developer tools on the iPad? If so, I'd be curious if that request to Cloudflare pops up in the Network tab or not. (For me, I only see one HTTP request and one response (that's the 401)). You end up with a 200, so you should at least see the two requests to your endpoint?
Best,
Christian

Hi Matthias,
I'm using a native Ventura on a 2017 MacBook Pro, so I think it's a software issue. Do you know if there's some kind of hardware attestation (e.g. through the T2) involved according to the spec? I thought so in the beginning, but now I feel like it's a pretty high-level software-only thing (-- that's not enabled yet on macOS apparently).
Christian

Hi Christian,
are you logged into iCloud on your Ventura Mac? The WWDC video says “iCloud Attester”. If that’s not it I will file a feedback.
Matthias

Yep, I'm logged in to enable what I think is necessary:

logged into an Apple ID and checked that it's enabled in Apple ID > Password and Security > AutoAuthenticate.

I’ve submitted a FB with Apple last week.
Meanwhile I also noticed that when configuring Cloudflare to also try Private Access Tokens when challenging a visitor, there is a 401 with a Www-Authentication header incoming from Cloudflare and Safari on Ventura is not reacting to these either. Hoping a future beta will fix this.

It has been working consistently for me on the latest Ventura beta on an Apple Silicon Macbook. Assuming this means it generally works.


[New Port Request] GiNaC

Library name: GiNaC
Library description: A C++ library providing an extensive set of algebraic capabilities that are needed for computer algebra systems (symbolic operations on polynomials, mathematical functions, vectors and matrices etc.).
Source repository URL: https://www.ginac.de/ginac.git/
Project homepage (if different from the source repository): https://www.ginac.de/
Anything else that is useful to know when adding (such as optional features the library may have that should be included): GiNac depends on a separate library CLN, which should be configured with the GNU GMP library for performance gain. (Maybe I should open another issue also for CLN?)

Is there any alternative for GiNaC in VCPKG?

Is there any alternative for GiNaC in VCPKG?

I have found the alternative in my case: exptk

I have found the alternative in my case: exptk

Yes, exprtk or symengine may be sufficient for some use cases. But, as far as I know, they haven't implemented operations like partial fraction decomposition (i.e., Wolfram's Apart) or multivariate polynomial factorisation (Wolfram's Factor), etc.

Yes, exprtk or symengine may be sufficient for some use cases. But, as far as I know, they haven't implemented operations like partial fraction decomposition (i.e., Wolfram's Apart) or multivariate polynomial factorisation (Wolfram's Factor), etc.

I have a prototype port here, which is based on the traditional ./configure script. (cln doesn't support CMake build. ginac has CMakeLists.txt but it didn't work to me for some reason.) For now, to use this prototype, it requires manually writing some lines of CMake scripts like:
find_path(GINAC_INCLUDE_DIRS ginac/ginac.h REQUIRED)
find_library(GINAC_LIBRARY ginac REQUIRED)
find_library(CLN_LIBRARY cln REQUIRED)
find_library(GMP_LIBRARY gmp REQUIRED)

add_executable(main main.cpp)
target_compile_features(main PRIVATE cxx_std_11)
target_include_directories(main PRIVATE ${GINAC_INCLUDE_DIRS})
target_link_libraries(main PRIVATE ${GINAC_LIBRARY} ${CLN_LIBRARY} ${GMP_LIBRARY})

This should be improved, but I'm not sure the best way to do that.

I have a prototype port here, which is based on the traditional ./configure script. (cln doesn't support CMake build. ginac has CMakeLists.txt but it didn't work to me for some reason.) For now, to use this prototype, it requires manually writing some lines of CMake scripts like:
find_path(GINAC_INCLUDE_DIRS ginac/ginac.h REQUIRED)
find_library(GINAC_LIBRARY ginac REQUIRED)
find_library(CLN_LIBRARY cln REQUIRED)
find_library(GMP_LIBRARY gmp REQUIRED)

add_executable(main main.cpp)
target_compile_features(main PRIVATE cxx_std_11)
target_include_directories(main PRIVATE ${GINAC_INCLUDE_DIRS})
target_link_libraries(main PRIVATE ${GINAC_LIBRARY} ${CLN_LIBRARY} ${GMP_LIBRARY})

This should be improved, but I'm not sure the best way to do that.

@tueda Can you post here the error message(s) you get when building GiNaC from source on Windows?
Just built the latest version on Windows 10 x64.

@tueda Can you post here the error message(s) you get when building GiNaC from source on Windows?
Just built the latest version on Windows 10 x64.

@sfhacker I'm not using Windows for development, so it's on Linux. Errors occurred when I tried to use CMake for GiNaC with my wip-new-port-ginac-cmake branch. Here is a build log, which sounds the linker flags have some troubles to build executables.
To use GiNaC as a library, building executables is not mandatory. So, a few weeks ago, I tried to patch/intervene to the CMake script (I don't remember what I did exactly) to disable building executables. The build worked, but I think I got a problem that when I tried to build an example using GiNaC installed via vcpkg, CMake was not able to find CLN due to a lack of FindCLN.cmake.

@sfhacker I'm not using Windows for development, so it's on Linux. Errors occurred when I tried to use CMake for GiNaC with my wip-new-port-ginac-cmake branch. Here is a build log, which sounds the linker flags have some troubles to build executables.
To use GiNaC as a library, building executables is not mandatory. So, a few weeks ago, I tried to patch/intervene to the CMake script (I don't remember what I did exactly) to disable building executables. The build worked, but I think I got a problem that when I tried to build an example using GiNaC installed via vcpkg, CMake was not able to find CLN due to a lack of FindCLN.cmake.

@sfhacker How could you get it compile on windows, I just can't wrap my head around it?

This open issue is OVER a YEAR old!
Anyway, @fknfilewalker Can you post here the steps to repro your issue? Can you also include the error(s) messages you are getting?

If you wish to add this port in the future, you can reopen this issue, but we're closing it for now, consider making a pull request instead.

@sfhacker (Now it is over 2 years old).
I think I built a cln, and I'm not sure about that. After that some more obscure libraries are required from me...
Also, in some files GiNaC includes "function.h", and i have some problems with it.
Preferably, if we could communicate outside this closed-issue.

@nook0110 Most issues are never never fixed properly and they keep popping up all the time! It is embarrassing.
I am more than happy to assist you. Just drop me a line.

@nook0110 Most issues are never never fixed properly and they keep popping up all the time! It is embarrassing. I am more than happy to assist you. Just drop me a line.

@sfhacker Cmake wants from me FIG2DEV and MAKEINFO, what is this? (I am not very familiar with cmake...)

Im compiling with msvc (visual studio 17 2022)
MSB3073 "setlocal
"C:\Program Files\CMake\bin\cmake.exe" -DBUILD_TYPE=Debug -P cmake_install.cmake
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
:VCEnd" с кодом 1.


CoreMatchers constructor is now private

The javadoc cleanup change in 21a05292a873c87424d7a3aca94a40babc899bc7 also added a few private constructors, including to CoreMatchers:
https://github.com/hamcrest/JavaHamcrest/blob/21a05292a873c87424d7a3aca94a40babc899bc7/hamcrest/src/main/java/org/hamcrest/CoreMatchers.java#L14-L17
This is a breaking change, I found at least one case of a classes extending CoreMatchers:
https://github.com/chromium/chromium/blob/52e4ac4401a6477a9737681e27c6d01ff3ca789f/base/test/android/javatests/src/org/chromium/base/test/util/Matchers.java#L17
Was this deliberate? It isn't obvious related to the other javadoc changes in that commit. If it is deliberate, it could be worth mentioning separately in the release note for the next release.

Thanks for pointing that out, @cushon. I was cleaning up all warnings from the javadoc compiler. The warning was something like "default constructor with no javadoc". I can't quite remember exactly. It's probably worth reverting that particular change. I don't want to cause unnecessary breakage.


Recipe schema validation function does not handle non-string values

It looks like I can't change non-string values in a recipe because the JSON validator is too strict.
I'm trying to set an integer in recipe-bootstrapper but I think we also want support for boolean values as well.
Traceback (most recent call last):
  File "/Users/smartin/anaconda_3/anaconda3/envs/perseverance-scripts/bin/pscripts", line 8, in <module>
    sys.exit(cli())
             ^^^^^
  File "/Users/smartin/anaconda_3/anaconda3/envs/perseverance-scripts/lib/python3.11/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/smartin/anaconda_3/anaconda3/envs/perseverance-scripts/lib/python3.11/site-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
         ^^^^^^^^^^^^^^^^
  File "/Users/smartin/anaconda_3/anaconda3/envs/perseverance-scripts/lib/python3.11/site-packages/click/core.py", line 1688, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/smartin/anaconda_3/anaconda3/envs/perseverance-scripts/lib/python3.11/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/smartin/anaconda_3/anaconda3/envs/perseverance-scripts/lib/python3.11/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/smartin/work/perseverance-scripts/perseverance_scripts/commands/recipe_bootstrapper.py", line 134, in recipe_bootstrapper
    recipe_reset_build_number(recipe)  # type: ignore[misc]
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/smartin/work/perseverance-scripts/perseverance_scripts/commands/recipe_bootstrapper.py", line 30, in recipe_reset_build_number
    recipe.patch(  # type: ignore[misc]
  File "/Users/smartin/anaconda_3/anaconda3/envs/perseverance-scripts/lib/python3.11/site-packages/percy/render/recipe.py", line 638, in patch
    jsonschema.validate(operations, self.schema)
  File "/Users/smartin/anaconda_3/anaconda3/envs/perseverance-scripts/lib/python3.11/site-packages/jsonschema/validators.py", line 1307, in validate
    raise error
jsonschema.exceptions.ValidationError: 0 is not of type 'string', 'array'

Failed validating 'type' in schema['items']['properties']['value']:
    {'items': {'type': 'string'}, 'type': ['string', 'array']}

The PERCY parser bypasses this check and performs it's own validation on the patch, which handles non string types.
Closing.


Add all item models to the coast world

Added various small and large item objects on the vessels.
I'm opening this PR for visibility first. There is still one small item model to be created. Once that's done, I'll swap out the small items on one of the vessels with the new one. Update All items are available on Fuel. This is ready for review
I noticed a drop in RTF from 9x% to 5x% after including all 28 item models into the world (7 vessels with 4 items each). So I added detachable joints between the item models to reduce cost of collision checking. Now I'm getting 8x%~9x% RTF. The joints for the item models on top of the target vessel are detached once the target vessel is identified.
Other notes:

Creating a detachable joint between the items and the vessel (with child model being the vessel) seems to cause the surface or hydrodynamics plugin to apply the effect to the incorrect body causing weird vessel motion. So item models are not attached to vessel.
Each link seems to be able to hold one 1 detachable joint. So the items on a vessel chained together, i.e. small object <-> small object duplicate <-> large object <-> large object duplicate

To test:

launch simple_demo world and try moving any item models on Vessel A. You should see that 4 item models are attached together

Publish a detach message and try again:
ign topic -t "/Vessel_A/detach" -m ignition.msgs.Empty -p "unused: true

launch coast world and check all item models are correctly placed on top of the vessels.

All items are now available on Fuel. This is ready for review

launch simple_demo world and try moving any item models on Vessel A. You should see that 4 item models are attached together

I can only move large_dry_box_a_duplicate, which moves all 4 boxes.  Moving the others doesn't have an impact (they jump back).

I can only move large_dry_box_a_duplicate, which moves all 4 boxes. Moving the others doesn't have an impact (they jump back).

yeah I think that's the expected behavior due to the way they are connected. They should not move individually

They should not move individually

Okay, that matches the behavior I'm seeing. :+1:

Confirmed

Vessel A has 2 blue small boxes and 2 large boxes

Vessel B has 2 small cases and 2 large gray boxes

Vessel C has 2 small dry bags and 2 large ammo cans

Vessel D has 2 blue small boxes and 2 large crates

Vessel E has 2 small dry bags and 2 dry boxes

Vessel F has 2 small cases and 2 large ammo cans

Vessel G has 2 small dry bags and 2 large crates

thanks for checking!

Vessel A has 2 blue small boxes and 2 large boxes

btw, that looks like the old Vessel A model. The seats are removed the in the latest version


Train40 and Train60 (.csv)

There is no code written to generate train40 or train60 in preprocessing_surf.py but those files are read in classification.py
Need some more clarity in Readme

Hi, did you find any soution?

run the preprocessing.py script to generate the CSV files

Thanks for the reply. But I've finished that project a year ago. Your
resources have been helpful.
Regards
Rohit
On Thu, Sep 17, 2020, 14:14 PranavBansal04<EMAIL_ADDRESS>wrote:

run the preprocessing.py script to generate the CSV files
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/imRishabhGupta/Indian-Sign-Language-Recognition/issues/6#issuecomment-694089817,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AFNOYAVKKBP3A4ZMVUNFS2TSGHD55ANCNFSM4F6ETQPA
.


Do I need to integrate the third party sdk (eg: unity) to serve rewarded video from unity via admob mediation?

Hi,
I would like to understand if I need to integrate the Unity third party SDK to serve rewarded video from Unity on Android and IOS or is this library taking care of that for me?
I understand that I need to do all the setup on the Unity website and Admob website.
Thanks.

You will need to integrate the SDK separately


 I think its internet because it doesnt happen when I run it on vps

@DaAwesomeRazor
While i porting code of agar for test, can you tell

what Node.js version you use
what OS
do you use SOCKS
show npm list output

Ok im also getting this error
@pulviscriptor
buffer.js:582
throw new RangeError('Trying to access beyond buffer length');
^
RangeError: Trying to access beyond buffer length
at checkOffset (buffer.js:582:11)
at Buffer.readUInt8 (buffer.js:588:5)
at Object.Packet.readUInt8 (/opt/razor.secureobscure.com/bots/packet.js:25:29)
at Client.processors.16 (/opt/razor.secureobscure.com/bots/agario-client.js:242:43)
at Object.Client.onMessage (/opt/razor.secureobscure.com/bots/agario-client.js:137:9)
at WebSocket.onMessage (/opt/razor.secureobscure.com/node_modules/ws/lib/WebSocket.js:418:14)
at WebSocket.EventEmitter.emit (events.js:98:17)
at Receiver.onbinary (/opt/razor.secureobscure.com/node_modules/ws/lib/WebSocket.js:823:10)
at /opt/razor.secureobscure.com/node_modules/ws/lib/Receiver.js:537:18
at Receiver.applyExtensions (/opt/razor.secureobscure.com/node_modules/ws/lib/Receiver.js:364:5)
at /opt/razor.secureobscure.com/node_modules/ws/lib/Receiver.js:531:14

Also im using the latest nodejs
windows for the first error and ubuntu for the second i just posted
I do use socks
NPM LIST:
<EMAIL_ADDRESS>C:\Users\shzd1\Desktop\RSAgarBotz Version 1 REAL
├──<EMAIL_ADDRESS>extraneous
├──<EMAIL_ADDRESS>extraneous
├──<EMAIL_ADDRESS>extraneous
├──<EMAIL_ADDRESS>extraneous
├──<EMAIL_ADDRESS>extraneous
├──<EMAIL_ADDRESS>extraneous
├──<EMAIL_ADDRESS>extraneous
├──<EMAIL_ADDRESS>extraneous
└─┬<EMAIL_ADDRESS>├─┬<EMAIL_ADDRESS>│ ├──<EMAIL_ADDRESS>│ └──<EMAIL_ADDRESS>├──<EMAIL_ADDRESS>├──<EMAIL_ADDRESS>└─┬<EMAIL_ADDRESS>├──<EMAIL_ADDRESS>└──<EMAIL_ADDRESS>npm ERR! extraneous<EMAIL_ADDRESS>C:\Users\shzd1\Desktop\RSAgarBotz Version 1 REAL\node_modules\cli-clear
npm ERR! extraneous<EMAIL_ADDRESS>C:\Users\shzd1\Desktop\RSAgarBotz Version 1 REAL\node_modules\express
npm ERR! extraneous<EMAIL_ADDRESS>C:\Users\shzd1\Desktop\RSAgarBotz Version 1 REAL\node_modules\http
npm ERR! extraneous<EMAIL_ADDRESS>C:\Users\shzd1\Desktop\RSAgarBotz Version 1 REAL\node_modules\http-proxy
npm ERR! extraneous<EMAIL_ADDRESS>C:\Users\shzd1\Desktop\RSAgarBotz Version 1 REAL\node_modules\is-json
npm ERR! extraneous<EMAIL_ADDRESS>C:\Users\shzd1\Desktop\RSAgarBotz Version 1 REAL\node_modules\nodejs-websocket
npm ERR! extraneous<EMAIL_ADDRESS>C:\Users\shzd1\Desktop\RSAgarBotz Version 1 REAL\node_modules\readline-sync
npm ERR! extraneous<EMAIL_ADDRESS>C:\Users\shzd1\Desktop\RSAgarBotz Version 1 REAL\node_modules\socks

@DaAwesomeRazor
While i'm writing my investigation here, try to update ws to latest. You can do npm update to update outdated agario-client too. But that packet from first message is corrupted, so outdated agario-client is not the reason. But it may fix second message (about crash).
Lets see if updating ws will fix anything. Do npm update

Investigation results
Ported only first part (packet ID 16 part 1)
agar.io: http://pastebin.com/raw/vwSm5Tx3  (code used http://pastebin.com/raw/C4xSJDwy )
Simulation on agario-client: http://pastebin.com/raw/i5GZUb8N (code used http://pastebin.com/raw/Xy5YGQhx ) (first byte removed since its ID)
IDs are the same. No bugs in code.
But you got very cool packet. There is 12 eating events (eaters_count=12) that have very simple structure
//reading eat events
for(var i=0;i<eaters_count;i++) {
	var eater_id = packet.readUInt32LE(); //<-- reading 4 bytes
	var eaten_id = packet.readUInt32LE(); //<-- reading 4 bytes
									      // NO MORE READING AT ALL!
    ...

and problem is somewhere between 5 and 6 and we see that valid IDs starting with 26 and 27
Adding bytes gave nothing.
I even went to bits level.
Converting http://pastebin.com/raw/e17TJYZE
Testing http://pastebin.com/raw/JSx19EBe
Shows same broken IDs without changes.
And you know what? Adding/removing bits gave nothing.
Who wants to try himself, add/remove bits like this http://pastebin.com/raw/QMXPyugs
Adding/removing 32 bits should be enough for bruteforcing all possibilities since we bruteforcing one readUInt32LE() call.
And i tried to get any strings from data http://pastebin.com/raw/ypfdzEw9 (via adding bits) and i did not got any strings/nicknames.
No valid IDs, no strings, no nothing. I don't understand where that data came from and how it get stuck inside packet.

Ok still getting error, even though I updated the websocket

Is it error "Packet error detected for packet" or "throw new RangeError('Trying to access beyond buffer length');"?

throw new RangeError('Trying to access beyond buffer length

Told you guys, it's packet de-sync. It looks like socks lib or nodejs can't
handle too much packets without desync sometimes. Remember node.js is
monothread so if it uses ~15% of a 8 core computer, it is already at max
cpu and can't keep up with the number of packets incomming from many bots.
Le jeu. 14 janv. 2016 22:47, DaAwesomeRazor<EMAIL_ADDRESS>a
écrit :

throw new RangeError('Trying to access beyond buffer length
—
Reply to this email directly or view it on GitHub
https://github.com/pulviscriptor/agario-client/issues/56#issuecomment-171791649
.

@DeepSnowNeeL Yeah its probably socks because i can run that many bots using localAddress and its fine

@pulviscriptor This needs to be fixed because I cant run my bots without being crashed every 5 minutes

@DeepSnowNeeL
I am sure its not Node.js
Its that socks lib, or ws lib, or SOCKS servers by themselves, or my code somewhere, or maybe agar.io sending some garbage sometimes, who knows.
@DaAwesomeRazor

being crashed every 5 minutes

Are you using on.packetError(packet, err, preventCrash) and still getting crash?
Since you have stable crashes, can i ask you try other SOCKS agents? You can google "node.js socks agent" and try some other lib than socks from there.
If its too hard for you to code, i can write code for you.

@DaAwesomeRazor
Wait, i decided to find whats wrong myself. I will write what i found here.
I may ask you for some details later.

After few hours having fun and dominating with bots i can say, ws is crashing like crazy.
I will look what i can do with it, but now at least i can reproduce issue.

 My script crashes a ton. When i updated ws it stopped the index out of range thing. But im still getting the buffer length. Im 95% sure its Socks5 because when I use localAddress it works fine.

@DaAwesomeRazor hei can i send you a script maybe its yours but it work great ,there are only one problem with this websocket ws://razor.secureobscure.com:6578

@DaAwesomeRazor
I can reproduce your problem. I also think there is memory leak, and i need some time to find whats wrong.
But first i want to play with bots little more  :yum:

@pulviscriptor can i try it?

@pulviscriptor I think It is a problem with wifi. Something that the packets arent being sent on time. I dont get as many errors on my vpns, but when i use crappy internet the problems start.

@harrydevelop Thats my script... It wont help me I already know what it does..

@harrydevelop
Sure, give me your skype.

@DaAwesomeRazor
You can add try catch block in WebSocket.js for code that crashes for temporary fix.
For example this one of crashes WebSocket.js line 425
  function onError (event) {
    event.type = 'error';
    event.target = target;
    listener.call(target, event);
  }

do it
  function onError (event) {
   try {
    event.type = 'error';
    event.target = target;
   }catch(e){
    //we don't care
   }
   listener.call(target, event);
  }

And fix all those crashes. It will work as temporary solution.

@DaAwesomeRazor nice work...are you tried to use ethernet connection?
@pulviscriptor thanks if you need something i can help you doing computer engineering
skype : harry16ita with memes pic

@pulviscriptor  K I will try that

@DaAwesomeRazor if it dosent work i can ask to my university professor ,tell you tomorrow what is wrong :)

@pulviscriptor  vent.target = target;
^
TypeError: Cannot assign to read only property 'target' of reserved fields must be empty
at WebSocket.onError (C:\Users\shzd1\Desktop\RSAgarBotz Version 1 REAL\node_modules\ws\lib\WebSocket.js:422:18)
at emitTwo (events.js:87:13)
at WebSocket.emit (events.js:172:7)
at Receiver.onerror (C:\Users\shzd1\Desktop\RSAgarBotz Version 1 REAL\node_modules\ws\lib\WebSocket.js:832:10)
at Receiver.error (C:\Users\shzd1\Desktop\RSAgarBotz Version 1 REAL\node_modules\ws\lib\Receiver.js:317:8)
at Receiver.processPacket (C:\Users\shzd1\Desktop\RSAgarBotz Version 1 REAL\node_modules\ws\lib\Receiver.js:191:12)
at Receiver.add (C:\Users\shzd1\Desktop\RSAgarBotz Version 1 REAL\node_modules\ws\lib\Receiver.js:91:24)
at Socket.firstHandler (C:\Users\shzd1\Desktop\RSAgarBotz Version 1 REAL\node_modules\ws\lib\WebSocket.js:774:22)
at emitOne (events.js:77:13)
at Socket.emit (events.js:169:7)
Thats another error im getting, but I havent tried the try and catch thing yet so imma try that quicly

Ok now im getting this error,. I replaced the on error thing and now im getting this.
else throw new Error('not opened');
^
Error: not opened
at WebSocket.send (C:\Users\shzd1\Desktop\RSAgarBotz Version 1 REAL\node_modules\ws\lib\WebSocket.js:214:16)
at Object.Client.send (C:\Users\shzd1\Desktop\RSAgarBotz Version 1 REAL\agario-client.js:177:17)
at Object.Client.onConnect (C:\Users\shzd1\Desktop\RSAgarBotz Version 1 REAL\agario-client.js:90:14)
at WebSocket.onOpen (C:\Users\shzd1\Desktop\RSAgarBotz Version 1 REAL\node_modules\ws\lib\WebSocket.js:432:14)
at emitNone (events.js:67:13)
at WebSocket.emit (events.js:166:7)
at WebSocket.establishConnection (C:\Users\shzd1\Desktop\RSAgarBotz Version 1 REAL\node_modules\ws\lib\WebSocket.js:848:8)
at ClientRequest.upgrade (C:\Users\shzd1\Desktop\RSAgarBotz Version 1 REAL\node_modules\ws\lib\WebSocket.js:738:25)
at ClientRequest.g (events.js:260:16)
at emitThree (events.js:97:13)
at ClientRequest.emit (events.js:175:7)

@DaAwesomeRazor
Do try catch on them all. And again, its temporary solution.

@pulviscriptor  You think because im just using a lot of bots and really crappy socks proxies?

try {} catch(e) {} wont work. We tried it, and no matter what we still keep getting errors like:
event.target = target;
             ^

TypeError: Cannot assign to read only property 'target' of reserved fields must be empty
at WebSocket.onError (C:\Users\clock\Desktop\RSBotz\node_modules\ws\lib\WebSocket.js:422:18)
at emitTwo (events.js:87:13)
at WebSocket.emit (events.js:172:7)
at Receiver.onerror (C:\Users\clock\Desktop\RSBotz\node_modules\ws\lib\WebSocket.js:832:10)
at Receiver.error (C:\Users\clock\Desktop\RSBotz\node_modules\ws\lib\Receiver.js:317:8)
at Receiver.processPacket (C:\Users\clock\Desktop\RSBotz\node_modules\ws\lib\Receiver.js:191:12)
at Receiver.add (C:\Users\clock\Desktop\RSBotz\node_modules\ws\lib\Receiver.js:91:24)
at Socket.firstHandler (C:\Users\clock\Desktop\RSBotz\node_modules\ws\lib\WebSocket.js:774:22)
at emitOne (events.js:77:13)
at Socket.emit (events.js:169:7)

You think because im just using a lot of bots and really crappy socks proxies?

Here what i can say for you.
I use this code
var last_interval = (+new Date);

setInterval(function(){
    var now = (+new Date);
    console.log('delay: ' + (now-last_interval-interval) + 'ms');
    last_interval = now;
}, 100);

When delay reaches OVER 250 MILLISECONDS ws crashes. I was able to get delays over 1000ms for one run. Its crazy.
And even if you start fixed amount of bots, first delays will be 0-1ms, but will slowly increasing. So i think there is memory leak.
I will investigate more, if this is problem in ws i will create issue there.

try {} catch(e) {} wont work. We tried it, and no matter what we still keep getting errors

It will work. You just getting new errors over and over again. I do not how much there places in code that causes crash.
You can keep adding try catch or wait for my solution, which i don't know at the moment.

@pulviscriptor  Ok so we saw that in the websocket code that there was throw new error. We replaced that with a console.log('websocket error!') so I dont think there are any more errors. I havent got any in a while.

Lets keep it open until ws gets fixed so peoples can see how to fix it until then.

@pulviscriptor  K

Just started using a new socks proxy list. Im already getting less packet errors

ws finally got updated npm package. No more manual patching required, upgrade your agario-client to 1.3.6


fix: added env to abbreviations

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

GitHub release
npm package (@latest dist-tag)

Your semantic-release bot :package::rocket:


docs: fix typo on PhoneAuthActivity.kt

Reported on https://github.com/firebase/quickstart-android/commit/9753ac35d324440d8d06587c512ac133c7b41bca#r35491446

Thanks @LouisCAD for noticing and @rosariopfernandes for the quick fix.


Uninstall Package doesn't uninstall page types installed by that package.

Page Types or templates? it looks like all the code is in there for PageTypes...

You are correct. The issue was that the package wasn't actually getting set correctly, due to a bug in the Type::import() method. This is now fixed.


CRUD Master-Detail App tutorial - service setup issue

I'm trying to follow the "Create a CRUD Master-Detail App" tutorial (https://www.sap.com/developer/tutorials/cp-webide-create-crud-app-template.html), but I am getting stuck on step 8. I have setup the  MobileServicesSampleData destination as described in step 3*, and I can select it in step 7, but when I try to test it as described in step 8, I get a red "undefined undefined" response under the "Data Connection" heading (where it says "Please enter the relative URL ..." at first).  I see no further information and the "Next" button remains disabled.
*When checking this availability of the destination connection on the  Destinations screen, I do get a 200 OK response.

@VinoGandhiM Can you help here?

@andreasfinkelmeyer can you please share a screenshot of the error?

@VinoGandhiM sure
as described, I can select the service/destination:

but after entering the forward slash in the "Relative URL" field and clicking Test, I get this:

@andreasfinkelmeyer thanks.
@lnoenssap can you help with this issue?

Hi @andreasfinkelmeyer , can you show me the URL of the data service defined in the destination?

@lnoenssap Is this issue still relevant?

Sorry, lost track of this one. In most cases, the problem is with the configuration of the destination. But, I am aware of a bug preventing the usage of long destination names. Maybe this is the case here.
@andreasfinkelmeyer: can you please try using a shorter name (eg. mssampledata) ? Meanwhile, we are working on a fix that should be going live by end of this month.

Thank you for your feedback. The issue seems to be resolved, so I am closing the issue.
If you still have questions, feel free to reopen the issue.

I present the same problem, because it does not allow me to test the connection, implement the solution that was raised about the name and now I have a 404 error and I do not know what it could be
somebody help me please

@VinoGandhiM Can you help here?

@lnoenssap can you help here?

Hi @camilo2312 , please let me know on which environment you are facing this problem. Is it on the trial landscape, as used in the tutorial ?


Improve form UI for tri-state values

The values for criteria are not simple booleans.  We can eliminate "considered" and reduce them to three: MET, NOT MET, or UNKNOWN, but that still makes them non-booleans.  As a result, we can't use traditional checkboxes.  Here are some options:

We can implement that as a select pull-down, but these are more work for users (for each selection you have to pull down, and select)... and that matters when there are this many questions.
We could implement them as a radio box, but that takes a LOT of horizontal space (which is in short supply on mobile devices), due to having buttons adjacent to labels, and the selected button is separate from the text (which is slightly less clear).

We could, instead, try to implement these as tri-state values (e.g., tri-state checkboxes).

Checkboxes by themselves can't normally be indeterminate/unknown, so you need some tricks for this.
Here's some information on getting tri-state form values:
http://jsfiddle.net/chriscoyier/mGg85/2/ - an ESPECIALLY short implementation from "Casual Trash", which exploits "readonly" and re-interprets it as indeterminate:
/* fork from code sent to me by "Casual Trash" */
function ts(cb) {
  if (cb.readOnly) cb.checked=cb.readOnly=false;
  else if (!cb.checked) cb.readOnly=cb.indeterminate=true;
}

<form>

    <input type="checkbox" id="cb2" checked="checked" onclick="ts(this)">
    2nd Checkbox

</form>

http://vanderlee.github.io/tristate/ and https://github.com/vanderlee/tristate - A jquery tristate checkbox.  Fancy, more heavyweight (it requires jquery, which isn't a BIG deal but we currently don't require it). MIT license.
https://css-tricks.com/indeterminate-checkboxes/
http://stackoverflow.com/questions/1726096/tri-state-check-box-in-html
http://stackoverflow.com/questions/155291/can-html-checkboxes-be-set-to-readonly
http://drupal.stackexchange.com/questions/74419/how-to-add-tri-state-checkboxes-to-form-created-with-form-api
http://www.timecockpit.com/devblog/2015/02/26/Tri-State-Check-Box-in-HTML-with-AngularJS-and-TypeScript - this is specific to AngularJS.  However, it warns that "The indeterminate state of the checkbox is not displayed correctly in Safari. There is no visual difference between an unchecked checkbox and an indeterminate checkbox. To make it work in Safari too, you can replace the checkbox visualization of the browser with your own."
http://w3facility.org/question/custom-html-checkbox-symbols-with-keyboard-navigation-support/ - dead link
http://stackoverflow.com/questions/23036056/custom-html-checkbox-symbols-with-keyboard-navigation-support  - put custom checkboxes in front of regular ones... then keyboard shortcuts work.
http://www.thecssninja.com/css/custom-inputs-using-css

Bootstrap-switch is beautiful, but getting tri-state checkboxes turns out to be a lot of work.  The problem is that HTML checkboxes are defined to be 2-state (not 3), so getting save/load working correctly is more work than expected.
Perhaps we should use a button group with radio buttons instead!  Like radio buttons, they directly support selecting one of several options.  Unlike ratio buttons, the text and selection are in the same space, removing the problem of traditional radio buttons for our purposes.  We can have 3 buttons: "?", "Met", and "Unmet", with "?" being the default.  A big advantage of button groups with radio buttons is that these are really standard: button groups are part of Bootstrap and radio buttons date from the original HTML.  That means that users will be very comfortable with them, since they are familiar.
Button groups would be a big UI improvement for tri-state... without all the work :-).

I'm convinced that bootstrap-switch is not the way to go
My question is how much value we put on the ability for users to go from
the Met or Unmet states back to the nil state. My view is that this is
basically never necessary, and so shouldn't be something we design for.
And if that's the case, then I think the best option is to go with button
groups that only have two options, Met and Unmet, and are unset by default.
That way, validations will trigger either if the group is not set, or if
Justification is required and is not entered.
I like that with button groups we can put the Met and Unmet (I would do
"Not met") text inside the buttons.
--
Dan Kohn<EMAIL_ADDRESS>tel:+1-415-233-1000
On Sat, Sep 19, 2015 at 8:40 AM, David A. Wheeler<EMAIL_ADDRESS>wrote:

Bootstrap-switch http://www.bootstrap-switch.org/examples.html is
beautiful, but getting tri-state checkboxes turns out to be a lot of work.
The problem is that HTML checkboxes are defined to be 2-state (not 3), so
getting save/load working correctly is more work than expected.
Perhaps we should use a button group with radio buttons
http://getbootstrap.com/components/#btn-groups instead! Like radio
buttons, they directly support selecting one of several options. Unlike
ratio buttons, the text and selection are in the same space, removing the
problem of traditional radio buttons for our purposes. We can have 3
buttons: "?", "Met", and "Unmet", with "?" being the default. A big
advantage of button groups with radio buttons is that these are really
standard: button groups are part of Bootstrap and radio buttons date from
the original HTML. That means that users will be very comfortable with
them, since they are familiar.
Button groups would be a big UI improvement for tri-state... without all
the work :-).
—
Reply to this email directly or view it on GitHub
https://github.com/linuxfoundation/cii-best-practices-badge/issues/24#issuecomment-141660733
.

On September 19, 2015 8:48:51 AM EDT, Dan Kohn<EMAIL_ADDRESS>wrote:

I'm convinced that bootstrap-switch is not the way to go
My question is how much value we put on the ability for users to go
from
the Met or Unmet states back to the nil state. My view is that this is
basically never necessary, and so shouldn't be something we design for.
And if that's the case, then I think the best option is to go with
button
groups that only have two options, Met and Unmet, and are unset by
default.
That way, validations will trigger either if the group is not set, or
if
Justification is required and is not entered.
I like that with button groups we can put the Met and Unmet (I would do
"Not met") text inside the buttons.
--
Dan Kohn<EMAIL_ADDRESS>tel:+1-415-233-1000
On Sat, Sep 19, 2015 at 8:40 AM, David A. Wheeler
<EMAIL_ADDRESS>wrote:

Bootstrap-switch http://www.bootstrap-switch.org/examples.html is
beautiful, but getting tri-state checkboxes turns out to be a lot of
work.
The problem is that HTML checkboxes are defined to be 2-state (not
3), so
getting save/load working correctly is more work than expected.
Perhaps we should use a button group with radio buttons
http://getbootstrap.com/components/#btn-groups instead! Like radio
buttons, they directly support selecting one of several options.
Unlike
ratio buttons, the text and selection are in the same space, removing
the
problem of traditional radio buttons for our purposes. We can have 3
buttons: "?", "Met", and "Unmet", with "?" being the default. A big
advantage of button groups with radio buttons is that these are
really
standard: button groups are part of Bootstrap and radio buttons date
from
the original HTML. That means that users will be very comfortable
with
them, since they are familiar.
Button groups would be a big UI improvement for tri-state... without
all
the work :-).
—
Reply to this email directly or view it on GitHub

https://github.com/linuxfoundation/cii-best-practices-badge/issues/24#issuecomment-141660733

.

Reply to this email directly or view it on GitHub:
https://github.com/linuxfoundation/cii-best-practices-badge/issues/24#issuecomment-141661255

I think being able to switch back to unknown is important. I think it would not be surprising at all to think that you knew the answer, and then when you started to try to justify, realized that in fact you weren't sure at all.
--- David A.Wheeler

I would do "Not met"

We originally wrote "Not met" too, but there are two advantages to "Unmet" instead:

"Unmet" is shorter.  On mobile phones held vertically that's valuable.
The "U" is visually more distinct from the "M" in Met; "N" and "M" look very similar in small fonts.

I don't know how many people will use this using smartphones, but it seems wise to make it easy to do.

Here are a few URLs related to creating grouped buttons for 3 values.  Certainly other people do it!
http://www.jqueryscript.net/form/jQuery-Plugin-To-Convert-Radio-Buttons-Into-Grouped-Buttons-radios-for-buttons.html - this lets you use ordinary radio buttons in the HTML itself; this jQuery script converts them all to Bootstrap grouped buttons at runtime.  This kind of approach might make it easy to have graceful degradation if Javascript is disabled.
jQueryMobile includes "Horizontal radio button sets".   If nothing else, this shows that many other people are using this UI mechanism, and that's a GOOD thing... it means many users will be familiar with them.  BadgeApp already uses jQuery, however, using this would require BadgeApp to add jQuery UI and jQueryMobile.  I believe gem 'jquery_mobile_rails' would add this support.  More info: http://api.jquerymobile.com/checkboxradio/
Another page about Bootstrap radio buttons and form inputs:
http://dan.doezema.com/2012/03/twitter-bootstrap-radio-button-form-inputs/
For completeness: "bootleg" creates interesting effects by abusing :checked, but it's dodgy:  http://labs.thecssninja.com/bootleg/index.html#buttons
Note: Need to test that clicking outside the button set (or on another button) won't erase the other buttons.   I found one demo where that happened, it's an avoidable bug.

https://github.com/akger1379/bootstrap-form-buttonset
This one makes radio buttons into bootstrap buttonsets. Mit license.

I think we're focusing on the wrong problem right now; we need to change direction.
The Bootstrap button groups display nicely, but there are lots of problems when you try to USE them. Most of the time when you select a label, you don't actually change the underlying radio button state EVEN when the label's "for" value is set to the radio button's id AND the radio button is a child of the label (what?!).  If you carefully select the underlying radio button that you can't see (it's to the right of the text; you can detect it by noticing that the cursor switches from hand to harrow), then it sets the values properly for saving and reloading.  However, the underlying radio button values and the displayed "active" buttons are not synchronized by bootstrap's supporting Javascript (wow, that's a mistake!).  Thus, what's displayed and what is the actual state are unrelated: You can easily "select" a button without actually changing what will be stored, and on reload what is shown is unrelated to the state of the data.
This could all be fixed by creating Javascript code, but this is the WRONG time to focus on this sort of stuff.  We still don't have anything working end-to-end, and I think THAT is much much much much more important.  Currently we have form that doesn't work because we're still trying to be fancy using nonstandard UI components.  I had expected that we'd just reuse existing slightly-fancy material, but for whatever reason there are problems, and it's the wrong time to focus on this sort of thing anyway.  We should be focusing on creating/editing project entries, filling in the form, and giving badges to those who earn them.  The next step would be to start automating them.  I think working out the bugs for button groups is WAY lower on the priority set.
So for now, let's switch to standard radio buttons.  Everyone understands them, they work in all browsers (even when Javascript is disabled), and they trivially handle tri-state.  They are easy to select on any screen size with only ONE action (unlike our original "select" approach which required two actions for each decision).  Each value has a visually distinct horizontal position, which is another a bonus over the original "select" approach.  We were worried about the amount of horizontal space used, but it's not bad: we've dropped "Considered" so there are only 3 options, and we can put the label text UNDER the radio buttons.
Sam will create a small function to actually generate the options, so we will be able to easily replace the radio buttons with something else (like the bootstrap button groups) in the future.

Fine with me.
--
Dan Kohn<EMAIL_ADDRESS>tel:+1-415-233-1000
On Tue, Sep 22, 2015 at 2:44 PM, David A. Wheeler<EMAIL_ADDRESS>wrote:

I think we're focusing on the wrong problem right now; we need to change
direction.
The Bootstrap button groups display nicely, but there are lots of
problems when you try to USE them. Most of the time when you select a
label, you don't actually change the underlying radio button state EVEN
when the label's "for" value is set to the radio button's id AND the radio
button is a child of the label (what?!). If you carefully select the
underlying radio button that you can't see (it's to the right of the text;
you can detect it by noticing that the cursor switches from hand to
harrow), then it sets the values properly for saving and reloading.
However, the underlying radio button values and the displayed "active"
buttons are not synchronized by bootstrap's supporting Javascript (wow,
that's a mistake!). Thus, what's displayed and what is the actual state are
unrelated: You can easily "select" a button without actually changing what
will be stored, and on reload what is shown is unrelated to the state of
the data.
This could all be fixed by creating Javascript code, but this is the WRONG
time to focus on this sort of stuff. We still don't have anything working
end-to-end, and I think THAT is much much much much more important.
Currently we have form that doesn't work because we're still trying to be
fancy using nonstandard UI components. I had expected that we'd just reuse
existing slightly-fancy material, but for whatever reason there are
problems, and it's the wrong time to focus on this sort of thing anyway. We
should be focusing on creating/editing project entries, filling in the
form, and giving badges to those who earn them. The next step would be to
start automating them. I think working out the bugs for button groups is
WAY lower on the priority set.
So for now, let's switch to standard radio buttons. Everyone understands
them, they work in all browsers (even when Javascript is disabled), and
they trivially handle tri-state. They are easy to select on any screen size
with only ONE action (unlike our original "select" approach which required
two actions for each decision). Each value has a visually distinct
horizontal position, which is another a bonus over the original "select"
approach. We were worried about the amount of horizontal space used, but
it's not bad: we've dropped "Considered" so there are only 3 options, and
we can put the label text UNDER the radio buttons.
Sam will create a small function to actually generate the options, so we
will be able to easily replace the radio buttons with something else (like
the bootstrap button groups) in the future.
—
Reply to this email directly or view it on GitHub
https://github.com/linuxfoundation/cii-best-practices-badge/issues/24#issuecomment-142381158
.

I've gotted used to the radio buttons, they work well, and work everywhere.  I'm closing this out - we have perfectly working selection mechanisms.


initialize new views with current pageId

This fixes the problem that new views start without a page, and you have to select a different page in the page_list_store and then again select the previous page to actually load it.

Failed CI seems to be caused by e6f583eafea7f5fd5dc94818de9a1910fae70f3b. It mocks…
  File "/home/runner/work/browse-ocrd/browse-ocrd/ocrd_browser/util/launcher.py", line 57, in Launcher
    def launch(self, toolname: str, doc: Document, file: OcrdFile) -> Optional[Popen[bytes]]:
TypeError: 'type' object is not subscriptable

…the new (sub-)type attributions here.

Thanks for the PR. The CI stuff is really unrelated, sorry, I'm just setting it up.


"image" does not handle style changes properly?

Test environment is Kindle Fire + Evothings viewer, and the "beta2" Node-RED viewer.
Trying to set the style of the "image" widget to "width:100%" does not do what I expect it to do (it shows a very small image, maybe 100px?). Explicit settings to things like "width:500px" does work as expected.

Will investigate this. Meanwhile, it might be that Material Design Lite (http://www.getmdl.io/components/index.html#layout-section) that I'm using for the widgets ahve some strange defaults.
What happens if you try a generic html widget instead (with the image as an img tag)?

Thanks I'll explore this and share what I find.

The widgets actually display as expected and designed if I orient my tablet in landscape (wide) mode rather than in portrait (tall) mode. So I think it's more the case that the page design is not responsive to format changes.
Still a bit puzzled by this - and it might be my Kindle Fire that's the source of the troubles - so I'll keep this open for now.

Hmm, it might be a problem on my side, though. I saw when trying out an
example on a regular nexus tablet, that it presented widgets in two columns
instead of expand to the page size (which it should, I'm probably just
using material design the wrong way. Agree to leave open)
On Tue, Jan 5, 2016 at 4:08 PM, Edward Vielmetti<EMAIL_ADDRESS>wrote:

The widgets actually display as expected and designed if I orient my
tablet in landscape (wide) mode rather than in portrait (tall) mode. So I
think it's more the case that the page design is not responsive to format
changes.
Still a bit puzzled by this - and it might be my Kindle Fire that's the
source of the troubles - so I'll keep this open for now.
—
Reply to this email directly or view it on GitHub
https://github.com/psvensson/nrfe-widgets/issues/2#issuecomment-169028217
.


contract::fetch error!!

in rinkeby
Ctoken contract   address 0x7be2b193f09f5861314a08853f31ff4da4a1a8c
SimplePriceOracle contract  address 0xfcba0cc77db8f135f0c9fe864316ef9b98e3a3ba
zargo query --address 0xfcba0cc77db8f135f0c9fe864316ef9b98e3a3ba --network rinkeby
result
{
"address": "0xfcba0cc77db8f135f0c9fe864316ef9b98e3a3ba",
"balances": [
{
"key": "0x0",
"value": "17620000000000"
}
],
"ctoken": "0x7be2b193f09f5861314a08853f31ff4da4a1a8c"
}
call contract method:
pub fn getAddress(self)->u248{
let instance =  Ctoken::fetch(self.ctoken);
instance.value
}
instance is Ctoken  code follow
contract Ctoken {
pub value:u248;
pub fn new(_value:u248) -> Self {
Self {
value:_value
}
}
pub fn get(self)->u248{
self.value
}
pub fn update(mut self,amout :u248){
let  tem=add(self.value,amout);
self.value=tem;
}
}
run zargo query --address 0x1c082d9cec55658187ba63519672c9d19f15041b --network rinkeby --method  getAddress
error
contract querying request: HTTP error (502 Bad Gateway)
502 Bad Gateway

502 Bad Gateway
nginx/1.17.10

contract code can download by  zargo download

@z330789559 hi. It is a network problem, unrelated to zargo or contracts.
Btw, are you using version 0.2.0 or 0.2.1?

@z330789559 hi. It is a network problem, unrelated to zargo or contracts.
Btw, are you using version 0.2.0 or 0.2.1?

@hedgar2017  0.2.1 query or call both report errors like this

@hedgar2017  0.2.1 query or call both report errors like this

@z330789559 I still don't understand what are the exact conditions of this error.
Bad Gateway means that Zandbox server is unreachable for you.
There are a lot of possible causes, but most likely it is your network issue.
Please, provide more info on the error conditions and frequency.

@z330789559 I still don't understand what are the exact conditions of this error.
Bad Gateway means that Zandbox server is unreachable for you.
There are a lot of possible causes, but most likely it is your network issue.
Please, provide more info on the error conditions and frequency.

Bad 502 looks more like the request has been sent to zKserver, but their service does not exist. I just use the command zargo query - address 0 x1c082d9cec55658187ba63519672c9d19f15041b - network rinkeby - method which getAddress here logic should be zargo will go to call the server interface found query server does not exist, however, Inside this the main reason is within 0 x1c082d9cec55658187ba63519672c9d19f15041b contracts call < cONTRACT > : : FETCH method, I think this method

Bad 502 looks more like the request has been sent to zKserver, but their service does not exist. I just use the command zargo query - address 0 x1c082d9cec55658187ba63519672c9d19f15041b - network rinkeby - method which getAddress here logic should be zargo will go to call the server interface found query server does not exist, however, Inside this the main reason is within 0 x1c082d9cec55658187ba63519672c9d19f15041b contracts call < cONTRACT > : : FETCH method, I think this method

zargo query - address 0 x1c082d9cec55658187ba63519672c9d19f15041b - network rinkeby - method  getAddress   i  will exec this command with RPC  to proof the skzerver can work

zargo query - address 0 x1c082d9cec55658187ba63519672c9d19f15041b - network rinkeby - method  getAddress   i  will exec this command with RPC  to proof the skzerver can work

@z330789559 ok, thanks!
I'll check the Contract::fetch method.
However, many people used it and it seemed to work.

@z330789559 ok, thanks!
I'll check the Contract::fetch method.
However, many people used it and it seemed to work.


How can I build get a dynamic lib such as libworkflow.so ?

I run the cmake in workflow, I get libworkflow.a and libworkflow.so, but the libworkflow.so is a txt file. How can i get a real dynamic lib?

@GeorgeXia1828 Of course~   You only need to change STATIC into SHARED in cmake.
You can copy the following as a file dynamic.patch :
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 62d3d39..9a98324 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -24,7 +24,7 @@ add_dependencies(server LINK_HEADERS)
 add_dependencies(client LINK_HEADERS)

 add_library(
-       ${PROJECT_NAME} STATIC
+       ${PROJECT_NAME} SHARED
        $<TARGET_OBJECTS:kernel>
        $<TARGET_OBJECTS:util>
        $<TARGET_OBJECTS:manager>

And patch into workflow with this cmd:
patch -p 1 < dynamic.patch

@holmes1412 thanks for your quick reply !!
I tried the diff for src/CMakeLists.txt, for the very line. but，steel the libworkflow.so is 76bytes.
my steps:
git clone xx
cd workflow && modify src/CMakeLists.txt for the very line you diff.
mkdir bld && cd bld && cmake .. && make
then I found the libworkflow.so is 76 bytes.

however I delete the file something, it seem works out.
`cmake_minimum_required(VERSION 3.6)
find_package(OpenSSL REQUIRED)
include_directories(${OPENSSL_INCLUDE_DIR} ${INC_DIR}/workflow)
add_subdirectory(kernel)
add_subdirectory(util)
add_subdirectory(manager)
add_subdirectory(algorithm)
add_subdirectory(protocol)
add_subdirectory(factory)
add_subdirectory(nameservice)
add_subdirectory(server)
add_subdirectory(client)
add_dependencies(kernel LINK_HEADERS)
add_dependencies(util LINK_HEADERS)
add_dependencies(manager LINK_HEADERS)
add_dependencies(algorithm LINK_HEADERS)
add_dependencies(protocol LINK_HEADERS)
add_dependencies(factory LINK_HEADERS)
add_dependencies(nameservice LINK_HEADERS)
add_dependencies(server LINK_HEADERS)
add_dependencies(client LINK_HEADERS)
add_library(
${PROJECT_NAME} SHARED
$<TARGET_OBJECTS:kernel>
$<TARGET_OBJECTS:util>
$<TARGET_OBJECTS:manager>
$<TARGET_OBJECTS:algorithm>
$<TARGET_OBJECTS:protocol>
$<TARGET_OBJECTS:factory>
$<TARGET_OBJECTS:nameservice>
$<TARGET_OBJECTS:server>
$<TARGET_OBJECTS:client>
)`

@GeorgeXia1828 Sorry, forgot to let you remove the origin txt, please try this patch:
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 62d3d39..d9eb2aa 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -24,7 +24,7 @@ add_dependencies(server LINK_HEADERS)
 add_dependencies(client LINK_HEADERS)

 add_library(
-       ${PROJECT_NAME} STATIC
+       ${PROJECT_NAME} SHARED
        $<TARGET_OBJECTS:kernel>
        $<TARGET_OBJECTS:util>
        $<TARGET_OBJECTS:manager>
@@ -57,17 +57,6 @@ install(
        COMPONENT devel
 )

-if (APPLE)
-       set(LIBSO ${LIB_DIR}/libworkflow.a)
-else ()
-       set(LIBSO ${LIB_DIR}/libworkflow.so)
-       add_custom_target(
-               SCRIPT_SHARED_LIB ALL
-               COMMAND ${CMAKE_COMMAND} -E echo 'GROUP ( libworkflow.a AS_NEEDED ( libpthread.so libssl.so libcrypto.so ) ) ' > $
-       )
-       add_dependencies(SCRIPT_SHARED_LIB ${PROJECT_NAME})
-endif ()
-
 if (KAFKA STREQUAL "y")
        if (APPLE)
                set(LIBSOKAFKA ${LIB_DIR}/libwfkafka.a)

The reason why we wrote a libworkflow.so as a txt file is that, we wanted to build a static library libworkflow.a inside our company, and keep the libworkflow.so for our developers to link at the same time.
This txt is a similar usage as libstdc++, which can link all your libraries through the txt file:
GROUP ( libworkflow.a AS_NEEDED ( libpthread.so libssl.so libcrypto.so ) )

This usage is  very special and worth sharing~ And if you still have any other problem please let me know.

@holmes1412
thx so much, now it's running now, i will try it. When I saw the txt file, I guess it's something magic, haha,


SLURM support

dataclass but with optional field that takes a dict for arbitrary parameter
@dataclass
class SlurmConfig:
    """Available SLURM Parameters for SRUN"""

    n: int = 1
    optional: dict

and then have either @Node(slurm=SlurmConfig(n=7)) or in the call HelloWorld()(slurm=SlurmConfig(n=7))

Checkout https://github.com/facebookincubator/submitit

Example script using sbatch and then checking until the job has finished or was stopped.
def submit():
    submit_file = pathlib.Path("submit.sh")
    submit_file.write_text(submit_str)

    output = subprocess.run(["sbatch", submit_file.as_posix()], capture_output=True,
                            check=True)
    job_id = "".join([x for x in output.stdout.decode() if x.isdigit()])
    # time.sleep(5)

    while True:
        output = subprocess.run(["squeue", "-j", f"{job_id}", "-h"], capture_output=True, check=True)
        if output.stdout.decode() == "":
            break
        print(output.stdout.decode())
        # sys.stdout.flush()
        time.sleep(2)

    print(f"Slurm Job {job_id} successfully completed")

Probably best framework might be https://distributed.dask.org/en/stable/index.html

Fixed with https://github.com/zincware/dask4dvc


Double vertical scrollbar

First of all, great plugin! I really enjoy using as it's straightforward and does what it's supposed to. However I have a tiny issue when changing pages. Whenever someone changes page a secondary vertical scrollbar shows up. This mainly seems to be the case for people using Chrome. I've tried the following:
html.is-changing {
overflow:hidden;
}
Adding this is a little fix but isn't optimal as you can't scroll while it's animating and it causes a little stutter when the scrollbar returns. Are there any possible solutions to this?
::-webkit-scrollbar {
display: none;
}
Is a dirty fix to remove all scrollbars entirely

Hi and thanks!
I checked chrome/FF on WIN and I can't seem to replicate your problem on any of my projects. I think it's something CSS specific to your project. Are you adding some kind of height and/or overflow on body, html or some wrapper in your page?

I've tried playing around with heights / overflows / etc. It only happens when you put the following option on:

Which is under general in your system preferences.

Still no luck getting the same behavior. Any chance you can post a demo of a project where this is happening?

Not really since I currently disabled the scrollbar entirely as a temporary fix... I'll try looking for the problem a bit more.

Hi @Geestig,
could you please share what was wrong/how did you resolve the issue?

@gmrchk haven't had time yet to check it further.

@gmrchk
Just had the time to check it out. And apparently there was a site-wrapper which had max-width: 100vw and overflow-x: hidden on it which made the transitions freak out.
Thanks for the quick replies!

I think when you set one of the properties (x/y) of overflow, the other is automatically set to "auto", which was probably the problem here.
Thanks for getting to the bottom of this... for future reference.
I'm glad to help!
Cheers


@@!~Video Clip Kha Nữ Lộ Video Khanuw.x9

Rúng Động Clip Kha Nữ: Video Bí Mật Từ Khanuw.x9 Khiến Thanh Thị Dậy Sóng!
Watch 🟢 ➤ ➤ ➤ 🌐 Click Here To link (Full Viral Video Link)
🔴 ➤►DOWNLOAD👉👉 (Full Viral Video Link)
Cộng đồng mạng không ngừng bàn tán về clip Kha Nữ vừa lộ diện! Video thứ 4 từ tài khoản khanuw.x9 đã làm Thanh Thị Kha Nữ phải đối mặt với những tình huống gây sốc. Điều gì đang diễn ra? Xem ngay trước khi sự thật bị giấu kín mãi mãi!
clip kha nữ
kha nữ clip 4
kha nữ lộ video
thanh thị kha nữ
kha nữ
khanuw.x9
Clip Kha Nữ mới nhất đang gây bão trên mạng xã hội với những hình ảnh không thể sốc hơn! Đặc biệt, Kha Nữ lộ video đã nhanh chóng lan truyền và thu hút hàng triệu lượt xem chỉ trong vài giờ. Trong Kha Nữ Clip 4, khanuw.x9 đã tiết lộ những tình tiết gây cấn và hấp dẫn chưa từng có, khiến người xem không thể rời mắt. Sự xuất hiện bất ngờ của Thanh Thị Kha Nữ trong clip này đã tạo nên những khoảnh khắc đầy kịch tính và bất ngờ. Bạn sẽ không thể tin được những gì đang diễn ra trong video này! Đừng bỏ lỡ cơ hội trở thành người đầu tiên khám phá những bí mật và sự thật chưa từng được tiết lộ.


Bug in documentation

Description
Have KeyError: on try to set token by:
slack_token = os.environ["XXX"]
May be need something like:
slack_token = os.environ["slack_token":"XXX"]
What type of issue is this? (place an x in one of the [ ])

[ ] bug
[ ] enhancement (feature request)
[ ] question
[x] documentation related
[ ] testing related
[ ] discussion

Requirements (place an x in each of the [ ])

[ ] I've read and understood the Contributing guidelines and have done my best effort to follow them.
[ ] I've read and agree to the Code of Conduct.
[ ] I've searched for any related issues and avoided creating a duplicate issue.

Bug Report
Filling out the following details about bugs will help us solve your issue sooner.
Reproducible in:
slackclient version:
python version: 3.4.2
OS version(s): Debian 8
Steps to reproduce:

Run ipython3
import os
slack_token = os.environ["blablabla"]
boom

Expected result:
What you expected to happen
Actual result:
What actually happened
Attachments:
Logs, screenshots, screencast, sample project, funny gif, etc.

16:43 $ SLACK_API_TOKEN="slack token here" python
Python 2.7.12 (v2.7.12:d33e0cf91556, Jun 26 2016, 12:10:39)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> slack_token = os.environ["SLACK_API_TOKEN"]
>>> slack_token
'slack token here'

Why i don't see requirements python 2.7 only in documentation?

Wow, sorry. In first string you set env vraiable in bash. Why it doesn't contained in documentation?

It's in the docs: https://slackapi.github.io/python-slackclient/auth.html#handling-tokens
Linked from the README:

See Tokens & Authentication http://slackapi.github.io/python-slackclient/auth.html#handling-tokens for API token handling best practices.

Also looks like I need to fix the formatting of that link in the README 🤔

Yeah, i'm about README. Thanks.


Replicate binding service credentials to functions

Available through bx wsk service bind

This feature has now been implemented.
https://github.com/serverless/serverless-openwhisk#binding-services-ibm-cloud-functions

@regmebaby absolutely, see example here:
functions:
  my_function:
    handler: file_name.handler
    bind:
      - service:
          name: cloud-object-storage
          instance: my-cos-storage
      - service:
          name: another_service
          instance: my-instance-name

Couple of caveats...

you can't bind more than one instance of the same service (so no binding two instances of different object stores).
each service bind config shell outs to a separate CLI command run in sequence. if you have multiple service bindings shared between functions, put them onto a package to speed things up.


Explore application of the uncertainties package.

https://pythonhosted.org/uncertainties/

The uncertainties package is a free, cross-platform program that transparently handles calculations with numbers with uncertainties (like 3.14±0.01). It can also yield the derivatives of any expression.

I'm going to close this. The package uses linear propagation, which may not be suitable for the sometimes extremely nonlinear uncertainties we deal with in hydrology. There are hydrological/engineering studies that employ linear propagation/summation by quadrature, but these can overestimate uncertainty. I've been looking into Bayesian methods for dealing with sampling uncertainty of evaluation statistics, so perhaps there will be some overlap there.


Crashes and doesnt work if the DateTime.now() current seconds are not divisible by minuteInterval

@robbiwu a new version has been published check it out if the problem is fixed or not in your code

@robbiwu if the new versions fix the bug feel free to close this issue


Allow for more tolerant processing of KML

This PR addresses an issue we came across when implementing KML support for our customer.
The KML we had to ingest incorrectly contained some placemarks that looked like:
<Placemark>
      <MultiGeometry>
            <LineString id=" - Full Path">
                  <extrude>1</extrude>
                  <altitudeMode>clampToGround</altitudeMode>
                  <tessellate>1</tessellate>
                  <coordinates>-116.166667,36,0 -116.166667,35,0 </coordinates>
            </LineString>
            <Point id="">
                  <altitudeMode>clampToGround</altitudeMode>
                  <coordinates>-116.166667,35.5,0 </coordinates>
            </Point>
      </MultiGeometry>
      <styleUrl>#defaultstyle</styleUrl>
</Placemark>
<Placemark>
      <name />
      <MultiGeometry>
            <LineString id=" - Full Path">
                  <extrude>1</extrude>
                  <altitudeMode>clampToGround</altitudeMode>
                  <tessellate>1</tessellate>
                  <coordinates>-116.083333,36,0 -116.083333,35,0 </coordinates>
            </LineString>
            <Point id="">
                  <altitudeMode>clampToGround</altitudeMode>
                  <coordinates>-116.083333,35.5,0 </coordinates>
            </Point>
      </MultiGeometry>
      <styleUrl>#defaultstyle</styleUrl>
</Placemark>

The problem was that this KML was reusing ids inside of placemarks.  The empty string id="" and the id=" - Full Path".
This is definitely malformed KML, and doesn't pass validators, however, it does work in Google Earth.  This PR makes changes that provides a context-id for parsing placemarks that essentially prepends the placemark entity id to the id of any entity in the multi-geometry.  I also check for an empty string in the getOrCreateEntity method to handle that case.
I can create an issue if that fits your workflow better.

Wow, two pull requests in one day, thanks again @mmacaula!
@tfili can you review and merge when ready?

Does this fix #3941?

Okay cool, thanks for the info!  It sounded similar to that issue so I wanted to check.

GE doesn't seem to particularly care about the ID's.  I tested a network link KML with a lot of duplicate ID's, editing and refreshing, and and it treated them all as if they were unique no matter what the ID was.

@mmacaula Can you resolve the conflicts again? Sorry, i was out most of last week. I'll test as soon as its updated.

GE doesn't seem to particularly care about the ID's. I tested a network link KML with a lot of duplicate ID's, editing and refreshing, and and it treated them all as if they were unique no matter what the ID was

GE absolutely cares about the ids if you are working with NetworkLinkControl.  If the ids are dupes or incorrect, the file won't work.  Most NetworkLinks are full refreshes and not updates, and ids won't matter in those cases.

You are correct, my mistake.  Loading a networklinkcontrol and using targetID on a file with duplicate ID's throws an 'id not found' and fails to parse the networklinkcontrol file.

@tfili done with merge (perhaps updating CHANGES.md is something that should be done right before final merge?)
It seems like the best way to match GE (and therefore provide best experience for Cesium KML users) is to always create a new entity except when inside an updating network link?  This would mean not using the same id as the kml node for the entity id, except when loading a refreshing network link.
Then this would fix #3941, a nice bonus...
Thoughts?

This looks good to me. @mramato Do you have any comments before I merge this?

Thanks @mmacaula, looks good to me.


Trim down dependencies for package:unified_analytics

We should limit how many dependencies we use where possible

Use a top level function to take in just the homeDirectory (Directory) object and use the .childDirectory and .childFile methods to fetch the path to the files...  this removes the dependency on package:path

@parlough if we're still using package:file, we're not really getting rid of the dependency on package:path, as file depends on path: https://github.com/google/file.dart/blob/master/packages/file/pubspec.yaml
That's not to say we shouldn't do your change, but I'm thinking maybe we should strategize more big picture how to actually reduce dependencies in this package.


How

Hi,
How do I use it?
Is it a command-line linux app?
Please give more details
:)

Hey @OrionRandD, cskit-strongs-rb is a Ruby library that's a part of the larger cskit project. There's not currently an app that you can run on your own computer, but some friends and I created Pleasant Viewer that uses the cskit API to assemble text from Bible citations. There's currently no integration with Strong's Concordance however.


Rename nWayUnion => multiwayMerge and NWayUnion => MultiwayMerge

And adds: alias nWayUnion = multiwayMerge. Also the documentation is updated accordingly.
This is a partial fix to Issue 6718[1]
[1] https://issues.dlang.org/show_bug.cgi?id=6718

Q: Why do we need the nWay prefixes? Can't this by added to union as variadic overload?
union is currently not exposed because of a similar naming issue (and the regarding deprecation cycle), but it will be exposed soon https://github.com/dlang/phobos/blob/master/std/algorithm/setops.d#L1266
https://github.com/dlang/phobos/pull/4249

@wilzbach algorithms for multiple set intersection are very different from those that intersect a small fixed number of sets, and have their own theory, practice, and important applications. I figure it's good to expose them under a different name rather than under the one-argument version of setIntersection.

I'll force merge this, looks like the SHA matter is spurious. cc @CyberShadow

Yes, as far as I can tell, the SHA mismatch errors are due to a bug in GitHub:
https://github.com/dlang/phobos/pull/5617#issuecomment-315668792
Force-merging will probably not break master, so it should be fine if there are no obvious DDoc errors.

Force-merging will probably not break master, so it should be fine if there are no obvious DDoc errors.

Actually, I take that back.
The SHA mismatch error indicates that there is a mismatch between the commits on the website and the commits in git. This potentially means that the tested change and the merged change are not the same! I don't know how the other CIs fetch the commits to test, but if potentially they use the same method as DAutoTest but do not verify that the fetched PR's head commit SHA1 coincides with the SHA1 from the API, then they might be testing the wrong changes.
So, I suggest being cautious about merging PRs with SHA1 mismatch errors for now.