text:
x/tools: add 1.23 and tip builders with GODEBUG=gotypesalias=1

See #68796 and #68797 for some background on missing test coverage with GODEBUG=gotypesalias=1.
Until x/tools has a go.mod file that says 1.23 (not until at least 1.24 is released), it will lack test coverage of GODEBUG=gotypesalias=1. @timothy-king had added go1.21 and go1.22 builders with GODEBUG=gotypesalias=1; we need them for 1.23 and tip as well.
@timothy-king @dmitshur would you mind adding these as well? CC @adonovan

Related Issues and Documentation

x/build: catch problems in x/ repos gated by module go directive version sooner #67791

(Emoji vote if this was helpful or unhelpful; more detailed feedback welcome in this discussion.)

These builders were recently updated in CL 601177 to stop existing after 1.22 based on the idea that 1.23 and later already default to GODEBUG=gotypesalias=1. I'll refine that to keep them around for 1.23 and 1.24 as well.

Thanks very much @dmitshur! Would it be possible to add the tip builder to the default presubmit tryset as well?

See #68796 and #68797 for some background on missing test coverage with GODEBUG=gotypesalias=1.
Until x/tools has a go.mod file that says 1.23 (not until at least 1.24 is released), it will lack test coverage of GODEBUG=gotypesalias=1. @timothy-king had added go1.21 and go1.22 builders with GODEBUG=gotypesalias=1; we need them for 1.23 and tip as well.
@timothy-king @dmitshur would you mind adding these as well? CC @adonovan

authors: DashaBochkar dmitshur findleyr gabyhelp


text:
net: Panics in TCP/UDP with Go 1.23 due to IPv6 link-local zone mishandling

Go version
go 1.23.1 linux/amd64
Output of go env in your module/workspace:
So far only seeing this on Linux, but bug appears present in macOS as well. The builds that crash are using CGO_ENABLED='0'

GO111MODULE=''
GOARCH='arm64'
GOBIN=''
GOCACHE='/Users/user/Library/Caches/go-build'
GOENV='/Users/user/Library/Application Support/go/env'
GOEXE=''
GOEXPERIMENT=''
GOFLAGS=''
GOHOSTARCH='arm64'
GOHOSTOS='darwin'
GOINSECURE=''
GOMODCACHE='/Users/user/go/pkg/mod'
GOOS='darwin'
GOPATH='/Users/user/go'
GOPROXY='https://proxy.golang.org,direct'
GOROOT='/usr/local/go'
GOSUMDB='sum.golang.org'
GOTMPDIR=''
GOTOOLCHAIN='auto'
GOTOOLDIR='/usr/local/go/pkg/tool/darwin_arm64'
GOVCS=''
GOVERSION='go1.23.1'
GODEBUG=''
GOTELEMETRY='local'
GOTELEMETRYDIR='/Users/user/Library/Application Support/go/telemetry'
GCCGO='gccgo'
GOARM64='v8.0'
AR='ar'
CC='clang'
CXX='clang++'
CGO_ENABLED='0'
GOMOD='/Users/user/go/platform/go.mod'
GOWORK='/Users/user/go/platform/go.work'
CGO_CFLAGS='-O2 -g'
CGO_CPPFLAGS=''
CGO_CXXFLAGS='-O2 -g'
CGO_FFLAGS='-O2 -g'
CGO_LDFLAGS='-O2 -g'
PKG_CONFIG='pkg-config'
GOGCCFLAGS='-fPIC -arch arm64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -ffile-prefix-map=/var/folders/yv/hdswp_fs15x1tlgz6fzw0wyh0000gn/T/go-build2162826536=/tmp/go-build -gno-record-gcc-switches -fno-common'

What did you do?
In an application that makes many TCP connections and sends many UDP packets, some of which target link-local IPv6 destinations, two panics started to appear with Go 1.23.
What did you see happen?
UDP sockets:
panic({0x269cdc0?, 0x576cff0?})
    /opt/hostedtoolcache/go/1.23.1/x64/src/runtime/panic.go:785 +0x132
net.dtoi(...)
    /opt/hostedtoolcache/go/1.23.1/x64/src/net/parse.go:132
net.(*ipv6ZoneCache).index(0xc0032c5a50?, {0x28, 0x29})
    /opt/hostedtoolcache/go/1.23.1/x64/src/net/interface.go:267 +0x1b3
net.ipToSockaddrInet6({0xc0032c5a50?, 0x10?, 0x10?}, 0x35, {0x28, 0x29})
    /opt/hostedtoolcache/go/1.23.1/x64/src/net/ipsock_posix.go:203 +0x1e8
net.(*UDPConn).writeTo(0xc00be18138, {0xc00d29e800, 0x38, 0x38}, 0xc002b3acb0?)
    /opt/hostedtoolcache/go/1.23.1/x64/src/net/udpsock_posix.go:129 +0x90
net.(*UDPConn).WriteTo(0xc00be18138, {0xc00d29e800?, 0x5b67560?, 0x5b67560?}, {0x3616e00?, 0xc006bfce40})
    /opt/hostedtoolcache/go/1.23.1/x64/src/net/udpsock.go:243 +0x56

The net.dtoi() code:
// Decimal to integer.
// Returns number, characters consumed, success.
func dtoi(s string) (n int, i int, ok bool) {
	n = 0
	for i = 0; i < len(s) && '0' <= s[i] && s[i] <= '9'; i++ {
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
		n = n*10 + int(s[i]-'0')
		if n >= big {
			return big, i, false
		}
	}
	if i == 0 {
		return 0, 0, false
	}
	return n, i, true
}

TCP sockets:
panic({0x269cdc0?, 0x576cff0?})
	/opt/hostedtoolcache/go/1.23.1/x64/src/runtime/panic.go:785 +0x132
net.(*TCPAddr).String(0xc007760810)
	/opt/hostedtoolcache/go/1.23.1/x64/src/net/tcpsock.go:50 +0xc5
net.(*netFD).dial(0xc00362c300, {0x3628468, 0xc0011284d0}, {0x36311c0, 0x0}, {0x36311c0, 0xc007760810}, 0xc00aee6038)
	/opt/hostedtoolcache/go/1.23.1/x64/src/net/sock_posix.go:98 +0x119
net.socket({0x3628468, 0xc0011284d0}, {0x2d38e59, 0x3}, 0xa, 0x1, 0x4151eb?, 0x0, {0x36311c0, 0x0}, ...)
	/opt/hostedtoolcache/go/1.23.1/x64/src/net/sock_posix.go:70 +0x29b
net.internetSocket({0x3628468, 0xc0011284d0}, {0x2d38e59, 0x3}, {0x36311c0, 0x0}, {0x36311c0, 0xc007760810}, 0x1, 0x0, ...)
	/opt/hostedtoolcache/go/1.23.1/x64/src/net/ipsock_posix.go:167 +0xf8
net.(*sysDialer).doDialTCPProto(0xc0059a29c0, {0x3628468, 0xc0011284d0}, 0x0, 0xc007760810, 0x0)
	/opt/hostedtoolcache/go/1.23.1/x64/src/net/tcpsock_posix.go:85 +0xec
net.(*sysDialer).doDialTCP(...)
	/opt/hostedtoolcache/go/1.23.1/x64/src/net/tcpsock_posix.go:75
net.(*sysDialer).dialTCP(0xc00aee60c0?, {0x3628468?, 0xc0011284d0?}, 0x25f4820?, 0xc00aee6130?)
	/opt/hostedtoolcache/go/1.23.1/x64/src/net/tcpsock_posix.go:71 +0x69
net.(*sysDialer).dialSingle(0xc0059a29c0, {0x3628468, 0xc0011284d0}, {0x3616fb8, 0xc007760810})
	/opt/hostedtoolcache/go/1.23.1/x64/src/net/dial.go:670 +0x27d
net.(*sysDialer).dialSerial(0xc0059a29c0, {0x3628468, 0xc0011284d0}, {0xc00c60faf0?, 0x1, 0xc0077607e0?})
	/opt/hostedtoolcache/go/1.23.1/x64/src/net/dial.go:635 +0x24e
net.(*sysDialer).dialParallel(0xc00c60fae0?, {0x3628468?, 0xc0011284d0?}, {0xc00c60faf0?, 0xc0011284d0?, 0x2d3b265?}, {0x0?, 0x2d38e59?, 0x698a0fdae4d?})
	/opt/hostedtoolcache/go/1.23.1/x64/src/net/dial.go:536 +0x3a7
net.(*Dialer).DialContext(0xc00aee6740, {0x3628238, 0x60b40e0}, {0x2d38e59, 0x3}, {0xc01361bef0, 0x24})
	/opt/hostedtoolcache/go/1.23.1/x64/src/net/dial.go:527 +0x6a5
net.(*Dialer).Dial(...)
	/opt/hostedtoolcache/go/1.23.1/x64/src/net/dial.go:453

Both issues occur infrequently (2-3 times a day with millions of connections/day) and seem related to the IPv6 link-local zone cache.
What did you expect to see?
No panics

Related Issues and Documentation

net: zoneToIndex will not cache the RIB and is called on each IPv6-linklocal datagram read #15237 (closed)
net: panic dialing udp address on node/wasm #60012 (closed)
x/net/{ipv4,ipv6}: PacketConn.SetControlMessage panics in reflect #19209 (closed)
net: conn.WriteToUDP([]byte("not ok"), addr) #34758 (closed)
net: lookupIPAddr mapErr causes panic #63927 (closed)
net/http: panic at Transport.roundTrip getConn #55127
runtime: panic in conn.ok() #41694 (closed)
proposal: net: UDPAddr/TCPAddr AddrPort should map 4in6 addresses to IPv4 netip.Addrs #53607
Syscall/IPC panics on 1.6 when running drone+gogs+postgresql #16688 (closed)
x/net/ipv6: apparent deadlock in TestPacketConnConcurrentReadWriteUnicast on darwin/amd64 #50455 (closed)

(Emoji vote if this was helpful or unhelpful; more detailed feedback welcome in this discussion.)

CC @ianlancetaylor

I wonder whether this might be related to the unique, the net/netip package uses it since 1.23 for Zone string interning.

I wonder whether this might be related to the unique package, the net/netip package uses it since 1.23 for Zone string interning.

Please show us the full panic message, so that we can see the addresses involved.  Thanks.
CC @mknyszek

Sure thing. The sanitized version is roughly this:
The target address was specified as [fe80::6666:66ff:fe66:6666%interfaceName]:443 (the zone/interfaceName is not shown in our panic handler, but it's retrieved from an application cache that tracks which zone goes to what destination prior to making the Dial.
panic processing fe80::6666:66ff:fe66:6666:443: runtime error: invalid memory address or nil pointer dereference : goroutine 231565 [running]:
runtime/debug.Stack()
	/opt/hostedtoolcache/go/1.23.1/x64/src/runtime/debug/stack.go:26 +0x5e
github.com/company/platform/product.(*Processor).ProcessSingleTarget.func1()
	/home/runner/work/platform/platform/product/tcp.go:542 +0x1a6
panic({0x269cdc0?, 0x576cff0?})
	/opt/hostedtoolcache/go/1.23.1/x64/src/runtime/panic.go:785 +0x132
net.(*TCPAddr).String(0xc007760810)
	/opt/hostedtoolcache/go/1.23.1/x64/src/net/tcpsock.go:50 +0xc5
net.(*netFD).dial(0xc00362c300, {0x3628468, 0xc0011284d0}, {0x36311c0, 0x0}, {0x36311c0, 0xc007760810}, 0xc00aee6038)
	/opt/hostedtoolcache/go/1.23.1/x64/src/net/sock_posix.go:98 +0x119
net.socket({0x3628468, 0xc0011284d0}, {0x2d38e59, 0x3}, 0xa, 0x1, 0x4151eb?, 0x0, {0x36311c0, 0x0}, ...)
	/opt/hostedtoolcache/go/1.23.1/x64/src/net/sock_posix.go:70 +0x29b
net.internetSocket({0x3628468, 0xc0011284d0}, {0x2d38e59, 0x3}, {0x36311c0, 0x0}, {0x36311c0, 0xc007760810}, 0x1, 0x0, ...)
	/opt/hostedtoolcache/go/1.23.1/x64/src/net/ipsock_posix.go:167 +0xf8
net.(*sysDialer).doDialTCPProto(0xc0059a29c0, {0x3628468, 0xc0011284d0}, 0x0, 0xc007760810, 0x0)
	/opt/hostedtoolcache/go/1.23.1/x64/src/net/tcpsock_posix.go:85 +0xec
net.(*sysDialer).doDialTCP(...)
	/opt/hostedtoolcache/go/1.23.1/x64/src/net/tcpsock_posix.go:75
net.(*sysDialer).dialTCP(0xc00aee60c0?, {0x3628468?, 0xc0011284d0?}, 0x25f4820?, 0xc00aee6130?)
	/opt/hostedtoolcache/go/1.23.1/x64/src/net/tcpsock_posix.go:71 +0x69
net.(*sysDialer).dialSingle(0xc0059a29c0, {0x3628468, 0xc0011284d0}, {0x3616fb8, 0xc007760810})
	/opt/hostedtoolcache/go/1.23.1/x64/src/net/dial.go:670 +0x27d
net.(*sysDialer).dialSerial(0xc0059a29c0, {0x3628468, 0xc0011284d0}, {0xc00c60faf0?, 0x1, 0xc0077607e0?})
	/opt/hostedtoolcache/go/1.23.1/x64/src/net/dial.go:635 +0x24e
net.(*sysDialer).dialParallel(0xc00c60fae0?, {0x3628468?, 0xc0011284d0?}, {0xc00c60faf0?, 0xc0011284d0?, 0x2d3b265?}, {0x0?, 0x2d38e59?, 0x698a0fdae4d?})
	/opt/hostedtoolcache/go/1.23.1/x64/src/net/dial.go:536 +0x3a7
net.(*Dialer).DialContext(0xc00aee6740, {0x3628238, 0x60b40e0}, {0x2d38e59, 0x3}, {0xc01361bef0, 0x24})
	/opt/hostedtoolcache/go/1.23.1/x64/src/net/dial.go:527 +0x6a5
net.(*Dialer).Dial(...)
	/opt/hostedtoolcache/go/1.23.1/x64/src/net/dial.go:453
github.com/company/platform/product.(*Processor).ConnectToTarget(0xc0022cf1e0, {{0xc00d70a7d0, 0x10, 0x10}, 0x1bb, {0x0, 0x0}, {0x0, 0x0}, {0x2d38a81, ...}, ...}, ...)
	/home/runner/work/platform/platform/product/tcp.go:602 +0x35b
github.com/company/platform/product.(*Processor).ReconnectToTargetWithLimit(0xc0022cf1e0, {{0xc00d70a7d0, 0x10, 0x10}, 0x1bb, {0x0, 0x0}, {0x0, 0x0}, {0x2d38a81, ...}, ...}, ...)
	/home/runner/work/platform/platform/product/tcp.go:652 +0x9f
github.com/company/platform/product.(*Processor).ReconnectToTarget(...)
	/home/runner/work/platform/platform/product/tcp.go:645
github.com/company/platform/product.(*Processor).tlsFuncTarget(0x0?, 0xc00aee7048, {{0xc00d70a7d0, 0x10, 0x10}, 0x1bb, {0x0, 0x0}, {0x0, 0x0}, ...}, ...)
	/home/runner/work/platform/platform/product/tcp_tls_func.go:751 +0xdf
github.com/company/platform/product.(*Processor).tlsFuncMaxFragments(0xc0022cf1e0, {{0xc00d70a7d0, 0x10, 0x10}, 0x1bb, {0x0, 0x0}, {0x0, 0x0}, {0x2d38a81, ...}, ...}, ...)
	/home/runner/work/platform/platform/product/tcp_tls_func.go:557 +0x1a5
github.com/company/platform/product.(*Processor).ProbeTLSRunFuncs(0xc0022cf1e0, {{0xc00d70a7d0, 0x10, 0x10}, 0x1bb, {0x0, 0x0}, {0x0, 0x0}, {0x2d38a81, ...}, ...}, ...)
	/home/runner/work/platform/platform/product/tcp_tls_func.go:456 +0xa7
github.com/company/platform/product.(*Processor).ProbeTLSFunc(0xc0022cf1e0, {{0xc00d70a7d0, 0x10, 0x10}, 0x1bb, {0x0, 0x0}, {0x0, 0x0}, {0x2d38a81, ...}, ...}, ...)
	/home/runner/work/platform/platform/product/tcp_tls_func.go:201 +0x24e
github.com/company/platform/product.(*Processor).ProbeTLS(0xc0022cf1e0, {{0xc00d70a7d0, 0x10, 0x10}, 0x1bb, {0x0, 0x0}, {0x0, 0x0}, {0x2d38a81, ...}, ...}, ...)
	/home/runner/work/platform/platform/product/tcp_tls.go:12 +0x12b
github.com/company/platform/product.(*Processor).GetInformationMoreTLS(0xc0022cf1e0, {{0xc00d70a7d0, 0x10, 0x10}, 0x1bb, {0x0, 0x0}, {0x0, 0x0}, {0x2d38a81, ...}, ...}, ...)
	/home/runner/work/platform/platform/product/tcp.go:3325 +0xa48
github.com/company/platform/product.(*Processor).GatherInformation(0xc0022cf1e0, {{0xc00d70a7d0, 0x10, 0x10}, 0x1bb, {0x0, 0x0}, {0x0, 0x0}, {0x2d38a81, ...}, ...}, ...)
	/home/runner/work/platform/platform/product/tcp.go:3198 +0x4268
github.com/company/platform/product.(*Processor).ProcessTarget(0xc0022cf1e0, {{0xc00d70a7d0, 0x10, 0x10}, 0x1bb, {0x0, 0x0}, {0x0, 0x0}, {0x2d38a81, ...}, ...})
	/home/runner/work/platform/platform/product/tcp.go:722 +0x5bb
github.com/company/platform/product.(*Processor).ProcessSingleTarget(0xc0022cf1e0, {{0xc00d70a7d0, 0x10, 0x10}, 0x1bb, {0x0, 0x0}, {0x0, 0x0}, {0x2d38a81, ...}, ...})
	/home/runner/work/platform/platform/product/tcp.go:545 +0x298
github.com/company/platform/product.(*Processor).ProcessTargets(0xc0022cf1e0)
	/home/runner/work/platform/platform/product/tcp.go:507 +0x126
created by github.com/company/platform/product.NewProcessor in goroutine 231049
	/home/runner/work/platform/platform/product/tcp.go:184 +0x353

Thanks.  I was really hoping to see the address.  I would expect the output to start with something like
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x466c67]

Do you see anything like that "signal SIGSEGV" line?

@ianlancetaylor Ah, sorry, this panic was caught by our goroutine recover() and did not crash the process (vs a runtime panic). There is no SEGV or similar as a result, the trace above is via the recover() error print with a debug.Stack() dump.

Ah, OK, thanks.

I agree that this must be somehow related to the way that net/netip uses the unique package in 1.23.

@mknyszek thanks! so far we are only seeing in a very small percentage of cases in customer environments; we may not be able to use a tip build, but i will keep trying to come up with a minimal reproducer

Thanks. For the record, I think the failure mode in https://github.com/golang/go/issues/69210 is a direct result of using the unique package very heavily, directly. I think it's much less likely in an application doing a whole bunch of other things too. I'd expect to see just semi-random failures on an attempt to access unique-ified data as you see here. Apologies for the breakage!

This issue should be fixed in Go 1.23.2, which released a few weeks ago. Please update if you see another issue! I'm going to set the issue into WaitingForInfo, which will close it automatically if there's nothing to do.

@mknyszek thanks! we picked up 1.23.2 on release day and haven't seen it trigger since

source: gharchive/issue

authors: gabyhelp hdm ianlancetaylor mateusz834 mknyszek

repo: golang/go

license_type: permissive

license_source: github-api


text:
proposal: crypto/tls: SecP256r1MLKEM768 and X25519MLKEM768

The experiment with X25519Kyber768Draft00 #67061 went well, and NIST has now published the final version of the ML-KEM standard. https://datatracker.ietf.org/doc/draft-kwiatkowski-tls-ecdhe-mlkem/ specifies ML-KEM hybrids, including permanent codepoints, and Chrome and Cloudflare already deployed one of them.
I propose in Go 1.24 we remove X25519Kyber768Draft00 and add SecP256r1MLKEM768 and X25519MLKEM768, enabling both by default, and sending X25519MLKEM768 + X25519 key shares by default. (See #69393 for the precise preference ordering.)
We'll also add the following two CurveID constants, for use in Config.CurvePreferences and possibly for #67516.
const SecP256r1MLKEM768 CurveID = 4587
const X25519MLKEM768 CurveID = 4588

GODEBUG=tlsmlkem=0 reverts the default Config.CurvePreferences (but doesn't disable anything else).
It would be tempting to retain support for X25519Kyber768Draft00, because it's unfortunate that Go 1.23 to Go 1.24 connections would be weaker than Go 1.23 to Go 1.23, but that is already unavoidable in one direction: Go 1.23 will prefer a key share over other supported key exchange methods, so a Go 1.24 client that sends X25519MLKEM768 + X25519 will see X25519 selected by a Go 1.24 server even if it advertises support for X25519Kyber768Draft00.

Related Issues and Documentation

crypto/tls: implement and enable X25519Kyber768Draft00 #67061 (closed)

(Emoji vote if this was helpful or unhelpful; more detailed feedback welcome in this discussion.)

This proposal has been added to the active column of the proposals project
and will now be reviewed at the weekly proposal review meetings.

it's unfortunate that Go 1.23 to Go 1.24 connections would be weaker than Go 1.23 to Go 1.23

Given that post-quantum support in 1.23 was an experiment anyway, I'm not too bothered by the weaker crypto in this case.

Have all remaining concerns about this proposal been addressed?
The proposal detalis are in https://github.com/golang/go/issues/69985#issue-2605677608

SecP256r1MLKEM768 has not yet stabilized in the IETF, so let's leave it out for Go 1.24.
X25519MLKEM768 has been widely deployed already, so it's not changing at this point.

I believe this proposal is now:

Add X25519MLKEM768 CurveID to crypto/tls.
Enable X25519MLKEM768 for use by default, by adding it to the default Config.CurvePreferences (semantics more like "AllowedCurves" after #69393).
Add new GODEBUG tlsmlkem to control (2). tlsmlkem=1 is the default for Go 1.24; setting tlsmlkem=0 undoes (2).

Just to be clear, we're still proposing to remove X25519Kyber768Draft00, right?

Correct!

Based on the discussion above, this proposal seems like a likely accept.
The proposal is to

Add const X25519MLKEM768 CurveID = 4588 to crypto/tls
Enable X25519MLKEM768 for use by default, by adding it to the default Config.CurvePreferences
Add new GODEBUG tlsmlkem to control (2). tlsmlkem=1 is the default for Go 1.24; setting tlsmlkem=0 undoes (2).
Remove X25519Kyber768Draft00

No change in consensus, so accepted. 🎉
This issue now tracks the work of implementing the proposal.
The proposal is to

Add const X25519MLKEM768 CurveID = 4588 to crypto/tls
Enable X25519MLKEM768 for use by default, by adding it to the default Config.CurvePreferences
Add new GODEBUG tlsmlkem to control (2). tlsmlkem=1 is the default for Go 1.24; setting tlsmlkem=0 undoes (2).
Remove X25519Kyber768Draft00

It looks like CL 630775 implemented most of this proposal if not all, though it didn't close it. What's left for Go 1.24? Is it just SecP256r1MLKEM768, which according to https://github.com/golang/go/issues/69985#issuecomment-2471241998 is being left out of Go 1.24? (If so, perhaps that can be tracked in a separate issue, or this one should be moved to the next milestone.)

Since we decided to leave SecP256r1MLKEM768 out of this proposal in the end, I think that should be a new proposal (perhaps once it's stabilized by the IETF). Given that, it look like CL 630775 did indeed implement the whole proposal, but I'm not 100% sure so I'll let @FiloSottile do the closing.

Sounds good, we can leave SecP256r1MLKEM768 to a future proposal.

authors: FiloSottile aclements dmitshur gabyhelp rsc


text:
database/sql: fix variable name in example

It's a very minor error, but it's a bad copy/paste example.

@googlebot I signed it!

source: gharchive/pull-request


text:
proto3 map empty bytes

Add this to proto3.proto in proto/proto3_proto
message MessageWithMappy {
  map<bool, bytes> byte_mapping = 3;
}

and run the Makefile in proto/proto3_proto
Then add this to size_test.go
{"map field with zero bytes", &proto3pb.MessageWithMappy{
		ByteMapping: map[bool][]byte{
			false: []byte{},
			true:  []byte{0x84, 0x78, 0x8e, 0x33, 0xcd, 0x12, 0x65, 0xa0, 0xd2, 0xca, 0xc4, 0xcd, 0x12, 0xe2, 0xcf, 0xf1, 0xbf, 0xfa, 0xf7, 0x5a, 0x3c, 0x6d, 0xdc, 0xcf, 0x9c, 0x92, 0x94, 0x3f, 0x4f, 0xb6, 0x31, 0x77, 0xe3, 0xda, 0x3f, 0x1b, 0x8e, 0x39, 0xe6, 0xa, 0x81, 0x61, 0xf0, 0xba, 0x74, 0x6},
		},
	}},

This gives the following failure
size_test.go:138: map field with zero bytes: Size(byte_mapping:<key:false value:"" > byte_mapping:<key:true value:"\204x\2163\315\022e\240\322\312\304\315\022\342\317\361\277\372\367Z<m\334\317\234\222\224?O\2661w\343\332?\033\2169\346\n\201a\360\272t\006" > ) = 56, want 7
size_test.go:139: map field with zero bytes: bytes: []byte{0x1a, 0x0, 0x0, 0x0, 0x0, 0x8, 0x0}
The error only happens with an empty byte slice.
This is probably a mistake in the way the map values try to reuse the setEncAndDec function with a combination of the proto3 syntax
case reflect.Uint8:
			p.enc = (*Buffer).enc_slice_byte
			p.dec = (*Buffer).dec_slice_byte
			p.size = size_slice_byte
			if p.proto3 {
				p.enc = (*Buffer).enc_proto3_slice_byte
				p.size = size_proto3_slice_byte
			}

Maybe this should be
case reflect.Uint8:
			p.enc = (*Buffer).enc_slice_byte
			p.dec = (*Buffer).dec_slice_byte
			p.size = size_slice_byte
			if p.proto3 && notamapvalue {
				p.enc = (*Buffer).enc_proto3_slice_byte
				p.size = size_proto3_slice_byte
			}

This seems to work
case reflect.Uint8:
            p.enc = (*Buffer).enc_slice_byte
            p.dec = (*Buffer).dec_slice_byte
            p.size = size_slice_byte
            if p.proto3 && f != nil {
                p.enc = (*Buffer).enc_proto3_slice_byte
                p.size = size_proto3_slice_byte
            }

repo: golang/protobuf

license_source: bigquery


text:
Registration for protobuf entities is overly limiting, any plan to improve this?

Let we have two *.proto files in two different catalogs
a/pkg.proto
syntax = "proto3";

package pkg;

message Message {};

and b/pkg.proto
syntax = "proto3";

package pkg;

message Message {};

Unfortunately, we cannot import both in the one program as this will cause registration panic, where we would have two pkg.Message registration attempts.
The problem is we can't just compile
schema/service → example.com/schema/service
schema/service@v2 → example.com/schema/service/v2

and import them. We need to change package names which is against proposed go modules workflow.
As soon as I understand, a code generated for C++ does not have such a problem.
Is there any way to avoid this collision? Plans may be?

C++ will encounter a link error due to duplicate symbols in this case.
You can't have conflicting versions of a given protocol buffer type in either a C++ or Go program. If you want to include two versions of some protocol buffer package, those packages will have to have different names. For example, pkg.v1 and pkg.v2.

authors: neild sirkon


text:
tour: missing function body

Context: https://go.dev/tour/concurrency/8
go: downloading golang.org/x/tour v0.0.0-20201207214521-004403599411
example
./prog.go:7:6: missing function body
./prog.go:11:6: missing function body
Go build failed.

The goal of "Exercise: Equivalent Binary Trees" is for the reader to implement those two functions, creating those missing function bodies.

authors: DaleEMoore crisman

repo: golang/tour


text:
docs: Updated English README & fixed typos in Simplified Chinese README

Summary by Sourcery
Revise the English README to enhance clarity and detail about the project's capabilities and usage, and correct a typo in the Simplified Chinese README.
Documentation:

Update the English README to provide a more comprehensive introduction to the project, including its features, installation instructions, and usage scenarios.
Fix a typo in the Simplified Chinese README and update the introduction to align with the English version.

@goldfishh

repo: goldfishh/chatgpt-tool-hub

license: MIT


text:
Value GJ is facor 1000 to high

Did you read the instructions?

[X] I have read the README.

The problem
I have a small problem. I can't seem to figure out how to get the m3 and GJ values correct. It says for example 261.730 m3 instead of 261,730m3. Is there a way to adjust this?
Integration version
2.6.2
Home Assistant version
core-2024.9.3
Python version
3.12.4
Home Assistant log
No response
Diagnostics
No response
Additional information
No response

Can you explain where it shows that? For example on your dashboard, in the integration settings, or the developer tools (states)?
For the last one, you can view it in its raw value. On a dashboard, and in integrations, it is displayed according to your Home Assistant configuration which you can change in your profile settings (number format).

Hi Sander,
Here are some screenshot from the dashboard where it shows. The meter bij Gas shows 0m3, the Gas consumption shows some usage in 0,02m3 and the heat sensor in the individual devices shows 10.82 kWh.
In the integrations setting I see the same value for both sensors as mentioned.
￼￼￼
￼
Best regards,
Peter van Voorst

Op 2 okt 2024, om 15:11 heeft Sander @.***> het volgende geschreven:
Can you explain where it shows that? For example on your dashboard, in the integration settings, or the developer tools (states)?
For the last one, you can view it in its raw value. On a dashboard, and in integrations, it is displayed according to your Home Assistant configuration which you can change in your profile settings (number format).
—
Reply to this email directly, view it on GitHub https://github.com/golles/ha-kamstrup_403/issues/126#issuecomment-2388608606, or unsubscribe https://github.com/notifications/unsubscribe-auth/AJOHL4KXUS4FZF2DHYOJUH3ZZPWHFAVCNFSM6AAAAABPHJJJ3CVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDGOBYGYYDQNRQGY.
You are receiving this because you authored the thread.

I have changed the number format, it now looks like this:
￼
Met vriendelijke groet,
Peter van Voorst

Op 2 okt 2024, om 15:11 heeft Sander @.***> het volgende geschreven:
Can you explain where it shows that? For example on your dashboard, in the integration settings, or the developer tools (states)?
For the last one, you can view it in its raw value. On a dashboard, and in integrations, it is displayed according to your Home Assistant configuration which you can change in your profile settings (number format).
—
Reply to this email directly, view it on GitHub https://github.com/golles/ha-kamstrup_403/issues/126#issuecomment-2388608606, or unsubscribe https://github.com/notifications/unsubscribe-auth/AJOHL4KXUS4FZF2DHYOJUH3ZZPWHFAVCNFSM6AAAAABPHJJJ3CVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDGOBYGYYDQNRQGY.
You are receiving this because you authored the thread.

Your images didn't upload

I'm sorry, here are the screesnhots.

I

Today I took some new screenshots with the numeber format corrected. And as you can see the value in the individual devices list is overstated (7,28 kWh) and the value in the Gas section is around 0,03 m3. Though the values of the sensors in the kammstrup section both show the right total value 261,91 GJ.

Please keep in mind that the 3 things you are comparing are using different units.
On the integrations page, you see GJ for the meter usage, and M3 for gas usage (1).
In the gas consumption graph, gas is shown as M3 as well (2)
In the individual devices total usage your heat energy is shown as kWh (3). This is how HA decided to implement it. This is why I haven't added the meter there, as to me it doesn't make a lot of sense and it will make it harder to see the difference between the other sensors being tracked.
The integration page shows the current meter readings and the energy dashboard shows the usage for the given period (which you can set in the top right), in your case today.

authors: golles koningpeter


text:
fix: timestamp not unmarshaling correctly

when attempting to use this package, I hit the following error:
unmarshalling type *sdk.RetailPricesResult: parsing time "2024-11-30T00:00:00" as "2006-01-02T15:04:05Z07:00": cannot parse "" as "Z07:00"

From the examples in the API and this timestamp documentation, it seems that azure uses ISO 8601 formatted times.

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.

Thanks for the contribution!

authors: CLAassistant kristinapathak tamalsaha


text:
Ollama URL from settings is not respected.

Hi there.
Describe the bug
Ollama URL from the settings is not respected when adding a link.
I was able to bypass it by replacing all localhost:11434:
find "." -type f | xargs sed -i "s/localhost:11434/aaa.bbb.ccc.ddd:11434"/g"
and then building the image locally.
To Reproduce
Steps to reproduce the behavior:

Change the ollama url in the settings and toggle tag/summary.
Open network panel.
Add an entry.
See request being fired at localhost.

Expected behavior
Request in 5 should be targeted at the ollama url in the settings.
Screenshots

(Edit for formatting)

Hello @c157fl! I have a silly question, did you save the updated setting beforehand? If yes, did you check if, after refreshing the page, the problem still persists?
The state management is something that needs to be improved, but I need a plan for it. Sorry for the inconvenience!

Hi @goniszewski. Not silly, my fault for not saying that part. That is correct. I had tested the url (to select the model) and then saved. Then tried a request and then while preserving the log in the network panel went back and got the screenshot. I had also done some refreshes in the meanwhile before I made the change.
Could you tell me where would the url be stored for the user? It may be the case that have an issue in my pocketbase installation (#72).
No worries!

Did a full reset:

Created user again,
went to settings,
filled the ollama url,
tested the connection,
selected the model,
enabled the boxes,
pressed save.
Went back to main page,
Refreshed, (necessary to activate AI features it seemed)
Tried to adding a url
Got an error from the request going into localhost.

Perhaps the url could be configured as an environment variable?

Strange. You can also check the JSON for user options in the PocketBase UI, to see if the value there matches the one you've set.

Went into pocketbase and the URL there matched the URL defined in the settings.
I logged out and back in and still localhost was still the target of the request.
It would seems that the url is not being retrieved when performing the request to ollama.

@c157fl the issue should be now resolved in the latest Docker image (available in the next ~40 minutes).
Thank you for reporting this bug!

Working perfectly. Thank you!

repo: goniszewski/grimoire


text:
spatial/r3: add Triangle

Please take a look.
Resolves part of #1791

Codecov Report

Merging #1792 (1e0cb48) into master (1c2a04c) will increase coverage by 0.01%.
The diff coverage is 100.00%.

@@            Coverage Diff             @@
##           master    #1792      +/-   ##
==========================================
+ Coverage   73.42%   73.43%   +0.01%
==========================================
  Files         524      525       +1
  Lines       61759    61782      +23
==========================================
+ Hits        45345    45370      +25
+ Misses      13858    13857       -1
+ Partials     2556     2555       -1

Impacted Files
Coverage Δ

spatial/r3/triangle.go
100.00% <100.00%> (ø)

graph/coloring/coloring.go
90.33% <0.00%> (+0.60%)
:arrow_up:

Continue to review full report at Codecov.

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

@sbinet I've added an example for which I do not have the tools to validate. I have also added the Centroid method here and in the r2 implementation.

although, it'd be great if you could rebase off #1801 (to get the CI running)

@kortschak  I have added the tests requested with a handful of comments to help out readers.
I managed to fix the icosphere example. Below are 0 and 7 subdivisions of an icosahedron.

Can you rebase onto the current master to get the new linter.

I rebased onto current master, which is ci: install ragel to check rdf codegen

You're right, sorry. The linter change hasn't merged yet.

Refactored icosphere example:

All triangle normals now point owtward from icosphere center
Bug caused duplicate loose subdiving vertices has been fixed, also clearer return value
Example has been moved to front of file.

It might be worth inspecting the example's mesh for defect. You can do this by exporting it as an STL and inspecting it with meshmixer. If you don't have code for STL export, you can use this https://github.com/kortschak/stl.

Do not merge. I believe I found a bug with Area function.

Nevermind, all is good. I've added more tests to TestTriangleArea and a new TestTriangleOrderedLengths test.

Hey there peeps! I'm gonna go ahead and share something I'm really proud of:

A sphere .stl file (left) was taken aas input and a signed distance function generated from it (right) using the Transform type and a generic rewrite of kdtree (just for kicks). I'm looking forward to exposing this functionality with gonum's upcoming r3.Triangle as an argument! This would allow users of sdf to edit .stl files as if they were native sdf.SDF3 objects

authors: codecov-commenter kortschak sbinet soypat

repo: gonum/gonum


text:
Added AI-Hub kspon(Korean speech dataset) related scripts

master 업데이트 후 커밋을 rebase하여 PR를 다시 열었습니다.
NIA AI오픈 이노베이션 허브에서 제공하는 한국어 음성 데이터셋(1000시간 발화, 2000 발화자)을 사용하는 스크립트를 추가하였습니다.
run_kspon.sh 스크립트는 openslr로부터 받은 zeroth 데이터셋도 사용합니다. kspon 데이터셋은 학습시에 사용됩니다. kspon 데이터셋은 현재 총 5파트로 zip파일들로 제공됩니다. kspon 디렉토리에 zip파일들이 있다는 전제 하에 작성하였습니다. kspon 데이터셋은 압축 용량은 79G고, 5개 압축 파일 내의 압축 파일로 이루어져 있어, 압축을 다풀면 총 263G 정도(압축파일들 포함) 디스크를 차지합니다.
kspon 데이터셋은 저작권(AI HUB 데이터셋 사용)만 밝히면 배포 목적에 따라 상업용으로도 사용가능한 것 같습니다.
그런데, NIA 산하에서 배포하는 것이기 때문에, 재배포는 허용되지 않을 것이기 때문에, 사용하기 위해서는 직접 다운로드가 필요합니다. kspon 데이터셋 다운로드를 하기 위해서는, 회원가입, 개인(회사)정보 및 사용목적 등록 후, 담당자 승인 절차를 거친 후에, 가능합니다.

안녕하세요.. 좋은 자료 감사드립니다.
혹시 위 NIA AI오픈 이노베이션 허브에서 제공하는 한국어 음성 데이터셋을 추가하여 러닝을 모두 완료하셨는지 여쭙고 싶습니다.
현재 올려주신 내용과 더불어 기존 데이터를 넣고 돌려보고 있는데 많은 에러가 생겨서 혹시 완료 하셨는지 궁금합니다!

혹시 위 NIA AI오픈 이노베이션 허브에서 제공하는 한국어 음성 데이터셋을 추가하여 러닝을 모두 완료하셨는지 여쭙고 싶습니다.

컴퓨팅 리소스가 부족하여, DNN 전까지 완료하였고, kspon 데이터셋을 사용했을 때 에러가 발생한다는 글을 보고 나서, 다시 돌려보고 있는 중입니다.

현재 올려주신 내용과 더불어 기존 데이터를 넣고 돌려보고 있는데 많은 에러가 생겨서 혹시 완료 하셨는지 궁금합니다!

어떤 에러가 발생하시던가요? 그리고 어는 단계에서 에러가 발생했는지 알려주시면 확인에 용이합니다. 로그를 첨부해주시면 확인해보겠습니다. 스크립트로 생성된 kspon 데이터셋에서는 별다른 문제가 없어보입니다. 사용하시는 환경들이 전부 다르기 때문에... 다른분들의 경우에는 zeroth 데이터셋만을 사용해도 문제가 발생하기도 합니다.

에러 부분
Done.
local/generateExtraLexicon.sh: Segmenting word class
local/generateExtraLexicon.sh: Generating unique word from AM text
local/generateExtraLexicon.sh: Generating pronunciation for non-hangul morphemes
File "data/local/lm/buildLM/scripts/genPronunciation_cmu.py", line 1722
regexEpr = ur"\n" + keyword + r"  (.+)\n"
^
SyntaxError: invalid syntax
0 line processed
local/generateExtraLexicon.sh: Generating pronunciation
1 line processed
local/generateExtraLexicon.sh: Extracting uniq lexicon
1 line processed
There are 0 unique morphemes
1717         for tstr in tstr.split():
1718             # find input word in CMU dict
1719             keyword = re.sub('[[]]', '', tstr)
1720             keyword = re.sub('[a-zA-Z]+', fUpper, keyword)
1721             #regexEpr = ur"\n" + re.escape(keyword) + r"  (.+)\n"
1722             regexEpr = ur"\n" + keyword + r"  (.+)\n"
1723             match  = re.search(regexEpr, cmudict)
1724             if match == None:
1725                 res = tstr
1726                 print(res.encode('utf-8'))
1727                 continue
위와같은 에러가 발생되는데 혹시 어떤 문제인지 아시나요 ???

안녕하세요!
저도 커밋하신 내용으로  트레이닝을하고있는데요 1차는 실패했습니다.
디코딩시 정상적으로 나오지 않고 아예 안나오거나 긴 문장 중 짧은 단어만 디코딩되는 현상이 있었습니다.
그래서 2차 시도 중에 있는데 혹시 커밋하신 스크립트 내용으로 DNN 트레이닝을 완료하셨는지 알려주실수 있을까요?

안녕하세요. 올려주신 브랜치로 트레이닝을 돌려보고 있습니다.
DNN트레이닝 이전에 exit하게 되어 있던데. DNN 트레이닝이 효과적으로 이루어지기 위한 쉘스크립트를 추가할 예정은 없으신가요??
데이터 양이 크다보니, local/chain/multi_condition/run_tdnn_1n.sh를 그대로 사용하도 될지 고민하고 있습니다..
혹 어떻게 dnn 트레이닝을 하면 좋을지 조언 주시면 감사하겠습니다.

안녕하세요. 좋은 자료 올려주셔서 너무 감사합니다.
올려주신 내용을 이용해서 트레이닝을 해봤습니다. 리소스가 부족하여 slr데이터와 kspon 압축파일 1개만 이용하여 트레이닝을 해봤는데 다행히 완료가 되었습니다.
문제는 능력이 미천하여 이후 진행에 어려움을 겪고 있는데요. 트레이닝 이후 사용방법에 대해서 좀 여쭤봐도 될까요.
/zeroth/s5/local/export.sh 를 실행하여 나온 결과들을 이용하여 decode.sh 를 사용해보려고 했는데
export.sh 에 나와있는 파일들과 결과물 파일이 상이하여 어떻게 해야할지를 모르겠습니다.ㅠㅠ
export.sh 에 나온 경로는 아래와 같은데요.
final_graph_dir=/home/ubuntu/prjs/zeroth/s5/exp/chain_rvb/tree_a/graph_tgsmall
final_model_dir=/home/ubuntu/prjs/zeroth/s5/exp/chain_rvb/tdnn1n_rvb_online
small_lm=/home/ubuntu/prjs/zeroth/s5/data/lang_test_tgsmall/G.fst
large_lm=/home/ubuntu/prjs/zeroth/s5/data/lang_test_fglarge/G.carpa
zeroth/s5/exp/chain_rvb/tree_a/ 폴더 아래에 graph_tgsmall 폴더가 없고
zeroth/s5/exp/chain_rvb/ 폴더아래에 tdnn1n_rvb_online 폴더가 없고 tdnn1n_rvb 폴더만 있어서요.
G.fst, G.carpa 는 동일한 위치에 파일이 있습니다.
문제해결에 도움을 좀 주실수 있을까요?

좋은 자료 공유해 주셔서 감사합니다.
딥러닝 전까지 완료하셨다고 하셨는데요..
혹시 Machine learning model만으로 돌렸을 때 wer이 어느정도 나오는지요??

data sample의 개수가 많아진 만큼 아래 숫자를 증가시킬 필요가 있는지 궁금합니다.
Make some small data subsets for early system-build stages.
utils/subset_data_dir.sh --shortest data/train_clean 2000 data/train_2kshort
utils/subset_data_dir.sh data/train_clean 5000 data/train_5k
utils/subset_data_dir.sh data/train_clean 10000 data/train_10k

utils/combine_data.sh data/test_clean data/test_data_01
utils/combine_data.sh [info]: not combining utt2uniq as it does not exist
utils/combine_data.sh [info]: not combining segments as it does not exist
utils/combine_data.sh: combined utt2spk
utils/combine_data.sh [info]: not combining utt2lang as it does not exist
utils/combine_data.sh: combined utt2dur
utils/combine_data.sh: combined utt2num_frames
utils/combine_data.sh [info]: not combining reco2dur as it does not exist
utils/combine_data.sh: combined feats.scp
utils/combine_data.sh: combined text
utils/combine_data.sh: combined cmvn.scp
utils/combine_data.sh [info]: not combining vad.scp as it does not exist
utils/combine_data.sh [info]: not combining reco2file_and_channel as it does not exist
utils/combine_data.sh: combined wav.scp
utils/combine_data.sh: combined spk2gender
utils/fix_data_dir.sh: filtered /tmp/kaldi.G3lH/speakers from 10 to 0 lines based on filter data/test_clean/cmvn.scp.
utils/fix_data_dir.sh: filtered data/test_clean/spk2utt from 10 to 0 lines based on filter /tmp/kaldi.G3lH/speakers.
utils/fix_data_dir.sh: filtered data/test_clean/cmvn.scp from 457 to 0 lines based on filter /tmp/kaldi.G3lH/speakers.
utils/fix_data_dir.sh: filtered data/test_clean/spk2gender from 10 to 0 lines based on filter /tmp/kaldi.G3lH/speakers.
fix_data_dir.sh: no utterances remained: not proceeding further.
위 부분에서 멈춥니다.
test_data_01을 토대로 test_clean을 만드는 부분인데 혹시 무엇이 문제일까요??

Succeeded creating CMVN stats for train_clean_sp_rvb1_hires
local/multi_condition/copy_ali_dir.sh: copied alignments from exp/tri4b_ali_train_clean_sp to exp/tri4b_ali_train_clean_sp_temp_0
local/multi_condition/copy_ali_dir.sh: copied alignments from exp/tri4b_ali_train_clean_sp to exp/tri4b_ali_train_clean_sp_temp_1
steps/combine_ali_dirs.sh data/train_clean_sp_rvb1 exp/tri4b_ali_train_clean_sp_rvb exp/tri4b_ali_train_clean_sp_temp_0 exp/tri4b_ali_train_clean_sp_temp_1
steps/combine_ali_dirs.sh: warning: Alignment lattices (lat.*.gz) are not present in exp/tri4b_ali_train_clean_sp_temp_0, not combining. Consider '--combine_lat false' to suppress this warning.
steps/combine_ali_dirs.sh: note: Temporary directory exp/tri4b_ali_train_clean_sp_rvb/temp.tRQBs5 will not be deleted in case of script failure, so you could examine it for troubleshooting.
steps/combine_ali_dirs.sh: Gathering alignments from each source directory.
steps/combine_ali_dirs.sh: Splitting combined alignments into 4 archives on speaker boundary.
steps/combine_ali_dirs.sh: Combined 3022120 alignments for 3868848 utterances. There were 846728 utterances (22%) without alignments, and 0 alignments not matching any utterance.
steps/combine_ali_dirs.sh: error: Percentage of utterances missing alignments, 22%, is at or above error tolerance 10%.
해당 부분에서 에러가 발생하는데 무엇이 문제인지 이해가 잘 안됩니다.
run option은 따로 건드린게 없습니다.

Succeeded creating CMVN stats for train_clean_sp_rvb1_hires
local/multi_condition/copy_ali_dir.sh: copied alignments from exp/tri4b_ali_train_clean_sp to exp/tri4b_ali_train_clean_sp_temp_0
local/multi_condition/copy_ali_dir.sh: copied alignments from exp/tri4b_ali_train_clean_sp to exp/tri4b_ali_train_clean_sp_temp_1
steps/combine_ali_dirs.sh data/train_clean_sp_rvb1 exp/tri4b_ali_train_clean_sp_rvb exp/tri4b_ali_train_clean_sp_temp_0 exp/tri4b_ali_train_clean_sp_temp_1
steps/combine_ali_dirs.sh: warning: Alignment lattices (lat.*.gz) are not present in exp/tri4b_ali_train_clean_sp_temp_0, not combining. Consider '--combine_lat false' to suppress this warning.
steps/combine_ali_dirs.sh: note: Temporary directory exp/tri4b_ali_train_clean_sp_rvb/temp.tRQBs5 will not be deleted in case of script failure, so you could examine it for troubleshooting.
steps/combine_ali_dirs.sh: Gathering alignments from each source directory.
steps/combine_ali_dirs.sh: Splitting combined alignments into 4 archives on speaker boundary.
steps/combine_ali_dirs.sh: Combined 3022120 alignments for 3868848 utterances. There were 846728 utterances (22%) without alignments, and 0 alignments not matching any utterance.
steps/combine_ali_dirs.sh: error: Percentage of utterances missing alignments, 22%, is at or above error tolerance 10%.
해당 부분에서 에러가 발생하는데 무엇이 문제인지 이해가 잘 안됩니다.
run option은 따로 건드린게 없습니다.

안녕하세요.
제가 개인 사정으로 일을 관두게 되어, 코멘트들을 확인하지 못했었습니다. 죄송합니다.
아마 학습율이 낮은 부분은 후술하겠지만, 몇가지 추측하는 부분이 있습니다.
현재는 개인 여건 상, 작업을 진행할 수가 없어서, 당장은 업데이트를 할 수가 없습니다.
그래서 PR을 닫고 나서, 추후에 기회가 된다면, Reopen 하도록 하겠습니다.
@c1yang

혹시 위 NIA AI오픈 이노베이션 허브에서 제공하는 한국어 음성 데이터셋을 추가하여 러닝을 모두 완료하셨는지 여쭙고 싶습니다.
현재 올려주신 내용과 더불어 기존 데이터를 넣고 돌려보고 있는데 많은 에러가 생겨서 혹시 완료 하셨는지 궁금합니다!

네, 정상적으로 학습이 완료가 되어야 합니다. 진행에 어려움이 있다면,  run_openslr.sh 스크립트로 확인하시는 것이 좋습니다.
@hunter827

DNN트레이닝 이전에 exit하게 되어 있던데. DNN 트레이닝이 효과적으로 이루어지기 위한 쉘스크립트를 추가할 예정은 없으신가요??
데이터 양이 크다보니, local/chain/multi_condition/run_tdnn_1n.sh를 그대로 사용하도 될지 고민하고 있습니다..

DNN 관련 스크립트는 실무 환경에 맞춰 수정하여 사용하시면 됩니다. 대부분 kaldi 프로젝트는 GMM전까지는 CPU클러스터에서 돌리고, 그 후 DNN 학습은 GPU 클러스터에 돌리기 때문에, 대부분 DNN 학습 전에 중단하도록 합니다.
DNN전에 exit 0하는 것은 run_openslr.sh 스크립트를 따른 것입니다.
@lycox1

/zeroth/s5/local/export.sh 를 실행하여 나온 결과들을 이용하여 decode.sh 를 사용해보려고 했는데
export.sh 에 나와있는 파일들과 결과물 파일이 상이하여 어떻게 해야할지를 모르겠습니다.ㅠㅠ
...
zeroth/s5/exp/chain_rvb/tree_a/ 폴더 아래에 graph_tgsmall 폴더가 없고
zeroth/s5/exp/chain_rvb/ 폴더아래에 tdnn1n_rvb_online 폴더가 없고 tdnn1n_rvb 폴더만 있어서요.
G.fst, G.carpa 는 동일한 위치에 파일이 있습니다.

스크립트를 많이 수정하신 것 같습니다. run_kspon 스크립트는 run_openslr 베이스에 kspon 데이터셋을 끼워넣은 것이기 때문에, 학습 스크립트는 동일하게 구성됩니다. 모델의 directory structure역시 zeroth와 동일하게 나와야 합니다. 중간 중간 뛰어넘거나(주석처리 또는 stage 변수 조작) 스크립트가 실패했다면 파일이 생성이 되지 않을 수 있습니다.
@YuBeomGon

혹시 Machine learning model만으로 돌렸을 때 wer이 어느정도 나오는지요??

아쉽게도 GMM모델 기반의 WER은 수집하지 않았습니다. 제가 마지막으로 DNN학습시 인식율을 확인했을 때, 아래와 같았습니다. 원인 분석은... 일이 겹치는 바람에... 중단하게 되었습니다.

openslr(zeroth) + kspon WER: 20~25%

zeroth(train/test set) + kspon(train set)

kspon only WER: 5~11%

kspon(train/test set)

몇가지 추측되는 이유로는...

test set을 zeroth test set만을 사용.

openslr을 사용하는 이유는 zeroth LM이 필요해서..

kaldi decoder 버그?: test 음원이 정상적이어도 인식 구문이 짤리는 현상.

data sample의 개수가 많아진 만큼 아래 숫자를 증가시킬 필요가 있는지 궁금합니다.

파라미터를 줄여, 학습을 빠르게 하기 위해서 이기 때문에 파라미터를 늘려도 되긴 합니다만, 개인적으로는 결과에는 큰 차이가 없었습니다.

fix_data_dir.sh: no utterances remained: not proceeding further.
test_data_01을 토대로 test_clean을 만드는 부분인데 혹시 무엇이 문제일까요??

해당 코드는 정상적으로 돌아가야 합니다. 데이터가 잘못 생성됐기 때문에... 디버깅이 필요해 보이네요.
@jty016
개인적인 이유로 해당 PR을 업데이트하지 못하게 되었습니다. 죄송합니다.
추후에 기회가 된다면 다시 PR을 열도록 하겠습니다.
감사합니다.

repo: goodatlas/zeroth


text:
Improving the scroll back to top button

@goodchai0 please assign me the task i want to work on it

If this issue has not been solved yet, can you assign it to me.


text:
Create a set of port ranges for known and unknown services

There will be a set of fixed/known services, for example:

maverick-discovery
maverick-api@system
maverick-web
visiond
webrtc
cloud9

Then there will be sets of variable/unknown services, eg.:

mavlink instances
rosmaster instances
mavros instances
maverick-api@ vehicle instances

Define:

a set of port ranges for the known services (eg. 6001-6200), and
a set of port ranges for the variable/unknown services (eg. 7001-7200)

Within the set of known services, we should define fixed ports for the various services.  This is particularly important for services such as -discovery, which need to be consistently available on the same port at all times. eg:

(web) -discovery non-ssl: 6001
(web) -discovery ssl: 6002
(web) -api@system: 6003
(web) webrtc: 6005
(web) visiond: 6006
(web) cloud9: 6009

Port 6000 is blocked by most browsers as it's standard X11 port, so start from 6001.

This is a new list of fixed/known ports:

[ ] maverick-discovery : non-ssl : 6001
[ ] maverick-discovery : ssl : 6002
[ ] maverick-api@system : non-ssl :
[ ] maverick-api@system : ssl :
[ ] webrtc : ssl (only) :
[ ] visiond : tbd
[ ] cloud9 : tbd

Docs for mavlink need to be updated to reflect new port ranges;
https://goodrobots.github.io/maverick/next/#/modules/mavlink

Refactor mavlink ports.  Current the ports are all over the place, depending on the service which are usually unrelated, eg. for FC:

mavlink-router: 5770-5773 tcp, 14570-14576 udp
ROS master: 11311 tcp
maverick-api: 6800

For SITL/default dev instance:

SITL port: 5000
mavlink-router: 6000-6003 tcp, 14000-14006 udp
ROS master: 11000 tcp
maverick-api: 7000

New FC ports:

mavlink-router: 6051-6053 tcp, 6054-6059 udp
ROS master: 6060 tcp
maverick-api: 6061 tcp

New Dev SITL ports:

mavlink-router: 6070-6073 tcp, 6074-6079 udp
ROS master; 6080 tcp
maverick-api: 6081 tcp
SITL: 6082 tcp

OK, now document.

Also need to refactor px4 sitl.  Currently on:
ROSmaster: 6131
maverick-api: 6132
mavlink-tcp: 6133-6135
maverick-udp: 6136-6141

repo: goodrobots/maverick


text:
AR mobile device with power of PC

Hi. Currently Im trying to create AR project with real complex model, about 20mln polygons. My idea was to use mobile device as camera to pc and then streaming pc screen on tablet to see everything after using pc power. Is there any better option for something like this?
Im currently using AR Kit and AR Core but maybe there is some better way?

Read the documentation, there are already built in solutions for this.
https://docs.unrealengine.com/en-us/Engine/Plugins/VirtualCameraPlugin
https://docs.unrealengine.com/en-us/Platforms/PixelStreaming/PixelStreamingIntro

repo: google-ar/arcore-unreal-sdk


text:
Is it possible to use a TextureView as a Renderable?

So I've been playing with the ViewRenderable class, which pretty much can render any View that uses the common APIs for rendering (which is awesome BTW).
Now, I have a custom view that extends from a TextureView, in which I use C++/OpenGL to do the rendering. Doing a Quick test using this view inside a ViewRendereable it wont render (which makes since since ARSceneView it's a SurfaceView). So I have two questions here:

It is possible to use a TextureView as a custom renderable in ARCore?
If not, is there a way to have a delimited area (anchored in a given point) where I can freely make my JNI/OpenGL calls?

Basically what I'm trying to achieve is (in the case that the TextureView can't be used inside a rendereable) to have an area to work as a Plane where I can freely use my C++ calls in order to do the render.
I already asked this question in SO, but I think this is a better place to ask help on this...

TextureView isn't supported, however we should be able to let you use a SurfaceTexture as a texture. That would give you the ability to do what you want.
We will not however let you make arbitrary GL calls. Sceneform's renderer uses a separate isolated thread for OpenGL and does extensive state tracking that could be thrown off by external GL calls. In addition, this thread could in the future use Vulkan instead.

You can use a SurfaceTexture as a texture by using the ExternalTexture class, there is an example here that shows how to do this to play chroma keyed videos.

Closing due to inactivity.

authors: dsternfeld7 romainguy vicmns

repo: google-ar/sceneform-android-sdk


text:
Android Basics: Introduction to Room and Flow

I don't have a build.gradle project level file

In the android project view, it is listed as build.gradle (Project: Bus_Scheduler)

Thanks @tuxedotshirt ! That is a great way to find the project level build.gradle file. We'll be closing this issue since it's not an error with the codelab itself.

authors: calren huseen0 tuxedotshirt


text:
Android Basics: Persist data with Room

Hi, it seems that Room version '2.2.6' in the starter code's gradle is bringing error when compiling at the end of the "Persist data with Room" module. Updating it to '2.3.0' makes it work.

I've had the exact same issue, but my error was related to "A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution"
Once I've set my Room version to 2.3.0, it has started working flawlessly.
Thanks @jblprog for pointing out the version that was working for you.

authors: jblprog kresohr


text:
No docstrings

Comparing this repository to PlaNet, I noticed all the docstrings have been removed in this one. Why is that?

Mostly because it's faster to develop without docstrings.

authors: Danmou danijar

repo: google-research/dreamer


text:
[EN] Feedback for: /web/tools/chrome-devtools/debug/remote-debugging/webviews?hl=en

The following code has a horrible bug:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    if (0 != (getApplicationInfo().flags &= ApplicationInfo.FLAG_DEBUGGABLE))
    { WebView.setWebContentsDebuggingEnabled(true); }
}

The operator '&=' will modify the flag, resulting in such strange consequences as RTL support breaking.

@pbakaus - can you please review and address

This seems to be a bug with the DevTools themselves, not the documentation. Please file the bug at https://crbug.com/new instead.

authors: GrahamFirst pbakaus petele

repo: google/WebFundamentals


text:
Missing closing parenthesis

Page Affected: https://developers.google.com/web/fundamentals/media/capturing-images/
What needs to be done?
The second to last code snippet which is under the Grab a snapshot and above the Tips section is missing a closing parenthesis.

The closing parenthesis should be right after the last closing curly brace.

This appears to be fixed as of Aug 5, 2018.
https://developers.google.com/web/fundamentals/media/capturing-images/

authors: iliyaML rottina


text:
Add flag for including/excluding license rollup

I'd be happy to work on this feature myself. However, before diving in, I wanted to check whether it's within the project's scope. Would you accept a pull request for this? If it's in scope, what would be the preferred method: including or excluding the rollup via a flag?

Hi!
Thanks for checking this out.
Just for my understanding: what exactly do you mean by "license rollup"? The behavior to only keep one license header in the final output?

Yeah, exactly. Though I did also noticed now that it does have a script to add a license header too "all" other files as well. So the final feature would involve more than just the rollup plugin.
But basically a flag to toggle this part in rollup.config.mjs and its dependencies:
https://github.com/google/aside/blob/main/rollup.config.mjs#L30-L36
  license({
    banner: {
      content: {
        file: fileURLToPath(new URL('license-header.txt', import.meta.url)),
      },
    },
  }),

Plus the license-check-and-add dependency and its associated script and files.
Right not I'm removing all of it manually, which to be fair is not much work, but would be nice to be able to do it on init.

So basically the aim would be to keep the license situation untouched (don't add and don't remove), correct?

Yes the aim would be to leave it untouched in that sense. But on init you could potentially then have a flag such as:
npx @google/aside init --no-license-header

Wouldn't --no-license-modification or something similar be more descriptive of what's supposed to happen (which is 'nothing'^^)?

authors: kaugesaar paranerd

repo: google/aside


text:
Autoreset behavior

I've been digging into Brax as a potential alternative to some modified dm_control enviornments I've been using and am really loving the speedup! That said, I feel like I've run into a major issue using the environments in RL and was looking for some guidance.
Basically, my environments are all partially-observable domains built off of "ant". A lot of the conditions are randomized per-episode (e.g., ant/target starting positions). I've been using the "create_gym_env" feature to work with my PyTorch agents, but I noticed a big potential issue.
At first glance, the AutoResetWrapper seemed to do what standard gym VectorEnvs do, but in reality, it's not really "resetting" the environments (with a new seed) but instead just setting them back to a cached first state. So the randomization of start conditions I do only applies across the whole batch of environments, and then for the entire training process, each individual environment is the same as it was before.
Is there a way to actually reset individual environments within a batch?

We haven't actually encountered environments that needed more than the initial randomness you can cache into, say, 2048 environments, but your situation seems like a good test case.  (see discussion here: https://github.com/google/brax/issues/167)
One sensible way of doing this is wrapping the autoresetwrapper with another wrapper that every X-number of episodes refreshes the first_qp state.  But you might want to verify that you really need this extra randomness by just manually refreshing that state by calling reset
i.e., around line 105 here, you could instead do:
maybe_reset = self.reset(rng)
qp = jp.tree_map(where_done, maybe_reset['first_qp'], state.qp)

This will be slower (by a lot probably, because every step will be calling reset), but it should reveal whether the randomness is the real bottleneck

Yeah, 2048 environments have a lot of randomness built in, but if I'm trying to solve a reasonably-sized generalized task (like a procedurally generated maze or foraging task) instead of a specific subset of that (based on seed), I feel like individual resets make more sense. Definitely understand the speed concerns, though.
Your solution seems like a reasonable approach. Another thing I was considering was building the "reset" call into the step function of the environment itself. I lose a bit of flexibility, but then I don't have to worry about external resets. With non-brax environments, I've often implemented a batched version with a "_reset_some(mask)" function.
I appreciate the advice! One last question I had was about best practices for Jax RNG. I'll use my "ant tag" environment as an example.
def reset(self, rng: jp.ndarray) -> env.State:
    rng, rng1, rng2 = jp.random_split(rng, 3)
    qpos = self.sys.default_angle() + jp.random_uniform(
        rng1, (self.sys.num_joint_dof,), -.1, .1)
    qvel = jp.random_uniform(rng2, (self.sys.num_joint_dof,), -.1, .1)
    ant_pos = jp.random_uniform(rng1, (2,), -self.cage_xy, self.cage_xy)
    qp = self.sys.default_qp(joint_angle=qpos, joint_velocity=qvel)
    pos = index_add(qp.pos, self.ant_mg, ant_pos[...,None])
    rng, tgt = self._random_target(rng, ant_pos)
    pos = jp.index_update(pos, self.target_idx, tgt)
    qp = qp.replace(pos=pos)

I grab 2 new rngs, 1 for position, 1 for velocity. I draw the initial qpos and then ant xy with rng1. cage_xy is [4.5, 4.5] Should I re-use rng1? And I've noticed anecdotally that the two numbers drawn my random_uniform for the ant are typically quite close, they don't seem like 2 randomly sampled numbers
I draw a target position by repeatedly splitting the rng until I get one at least the minimum distance away from the ant. Can I do this more efficiently?

I probably wouldn't reuse rng1.  It really isn't that expensive to just generate another rng seed:
rng, rng1, rng2, rng3 = jp.random_split(rng, 4)

and then use rng3 for your ant_pos randomness.  The random number generator is deterministic and stateless, so two calls to jp.random_uniform(rng1, blah blah) will give you the same "random" results.
I'm not sure I understand your last question.  Is it that you want to generate a random location that's guaranteed to be some distance away from the ant, but in some range from there?  I'd probably just parameterize that location by distance and theta, i.e.:
random_dist = jp.random_uniform(rng3, (1,), min_dist, max_dist)
random_angle =  jp.random_uniform(rng4, (1,), 0., 2.*jp.pi)
ant_pos = jp.array([random_dist*jp.cos(random_angle), random_dist*jp.sin(random_angle)])

Is that what you had in mind?

Ahhhh, I see--totally misunderstood what you were doing.
First question: To be probably overly specific, there's no problem with this:
ant_pos = jp.random_uniform(rng1, (2,), -self.cage_xy, self.cage_xy)

Whereas
ant_pos_x = jp.random_uniform(rng1, (1,), -self.cage_xy, self.cage_xy)
ant_pos_y = jp.random_uniform(rng1, (1,), -self.cage_xy, self.cage_xy)

this will always have ant_pos_x=ant_pos_y.
First question 2:
Yeah okay this is tricky.  The resampling trick is probably the "simplest" in terms of "lines of code per unit how-hard-do-I-have-to-think-about-this".
Another option: sample the point (r, theta) randomly.  One of (r, theta) and (r, theta+180) has a valid theta, and might just need to have its r projected to the boundary.  This would slightly oversample boundary points (relative to a uniform sampling of "valid" points), but it's at least deterministic.
Another option: This does have an analytic solution, but it has a bunch of irritating edge cases (like which edges the minimum distance from the ant is in contact with).  I'd probably just do the previous option, unless for some reason uniform sampling is super duper important.
Another option: Construct a grid of candidate points, compute a mask of valid points, and sample one of these.  It has lower resolution than the other options, but would be uniformly sampling, and would converge to the right thing in the limit of lots of grid points.

Thank you again! I realize you've got plenty of other stuff to work on even just with Brax, appreciate the thorough answers. I'll probably go with your second option.
As to the original topic of the post, would it be useful for me to profile the different reset options so that you get an idea of whether individual resets are prohibitive in the future? Also, any use for extra jumpy functions? I saw that you're trying to add them to JKTerry's Farama repo, wasn't sure where would be the best place to contribute

Haha of course! Happy to help.
Yes, we'd love to have some numbers on reset efficiency!
Let me check with Erik about the fate of jumpy--I'll get back to you!

Update: Feel free to open PRs adding jumpy functions here if you're using them in Brax!

Update on the reset numbers:
https://colab.research.google.com/gist/DavidSlayback/bf5038ec024bb6e47568af2e2ba99c16/autoreset.ipynb#scrollTo=gazgx0KXWJfw
So I implemented a couple basic strategies using your built-in "fetch" environment just to keep the notebook simple:

Original AutoReset (same "first state" for all environments that are done)
"Naive" AutoReset (calls reset every timestep, replaces where done)
"On Terminal" AutoReset (calls reset only on timesteps where at least one environment is done)
"Cached" AutoReset (refresh "first state" every N steps, behaves like original otherwise)

I feel like I may not be timing these properly, though? I'm not seeing much difference in times beyond the time it takes to JIT

I've started using Brax, and really enjoying it!
I just wanted to note that I've been using Brax on tasks that involve significant domain randomization, and/or curriculum development, and the auto-reset behavior tripped me up too

So when using the AutoResetWrapper, there is no randomization, except for at the start?
Doesn't the training overfit on those initial random seeds?

Is there any new ideas? Following the design of gym wrappers, maybe we can manually apply several steps of random actions after the fake reset in AutoResetWrapper?

Brax PPO now supports a param num_resets_per_eval if you want to randomize your init states multiple times during training:
https://github.com/google/brax/blob/main/brax/training/agents/ppo/train.py#L90
We generally don't use this as there's no overfitting when num_envs is large - but perhaps you'll find that helpful.

Brax PPO now supports a param num_resets_per_eval if you want to randomize your init states multiple times during training:
https://github.com/google/brax/blob/main/brax/training/agents/ppo/train.py#L90
We generally don't use this as there's no overfitting when num_envs is large - but perhaps you'll find that helpful.

As pointed by @erwincoumans, it's essential to have some init randomness of envs during the training stage. It seems that num_resets_per_eval only controls the randomness at evaluation stage.

authors: DavidSlayback ZaberKo btnorman cdfreeman-google erikfrey erwincoumans

repo: google/brax


text:
How to compute sys.link.invweight?

The V2 version Brax is just in time for my thesis and already helping me a lot! Thanks for all the work.
However, changing the parameters of an brax environment is not yet trivial. I know v2 is still in beta, and figured out computing most of the parameters.
But not for invweight, do you know how to compute the invweight from the original System, or the relation with respect to the mass/size of the robot?

Also, let me know if I can do anything for this repo with respect to system identification/ domain randomization!

Hi @gijskoning thanks for using brax! What do you mean by invweight? Inverse inertia can be calculated like so if that's what you're referring to

I should have pointed to what I meant. Normally it is obtained by mujoco when loading in the xml file:
https://github.com/google/brax/blob/6211f46bf908aa793bc502845afbf469f34e6bb3/brax/v2/io/mjcf.py#L327.
And used here: https://github.com/google/brax/blob/6211f46bf908aa793bc502845afbf469f34e6bb3/brax/v2/base.py#L246
Thanks for the link I have looked over this function. Hopefully, that represents the invweight. Will try it out tomorrow.

Ah, sorry for misunderstanding, you can check out how it's computed here before it gets loaded into a brax System:
https://github.com/deepmind/mujoco/blob/main/src/engine/engine_setconst.c#L88

authors: btaba gijskoning


text:
using mongodb: wrong documentation

Using cayley with mongo db requires using "mongo" string instead of "mondodb" that is suggested in the official documentation and --help
I use version
cayley_0.4.1_linux_amd64> ./cayley version
Cayley v0.4.1 built 2015-04-25T19:37-0400
Please update the documentation
Regards
Matteo

mongodb://host:port```

Both works for me.

authors: Quentin-M matteoredaelli

repo: google/cayley


text:
INTERNAL COMPILER ERROR on recursive function with NTI

I've been working on getting my library compiled with NTI turned on and have been getting a compiler error. I finally managed to narrow it down to one function which causes the issue.
var TPJL = {};
TPJL.FlattenObject = function(data) {
    var result = {};
    function recurse(cur, prop) {
        if (Object(cur) !== cur) {
            result[prop] = cur;
        } else if (Array.isArray(cur)) {
            for (var i = 0, l = cur.length; i < l; i++)
                recurse(cur[i], prop ? prop + '.' + i : '' + i);
            if (l == 0)
                result[prop] = [];
        } else {
            var isEmpty = true;
            for (var p in cur) {
                isEmpty = false;
                recurse(cur[p], prop ? prop + '.' + p : p);
            }
            if (isEmpty)
                result[prop] = {};
        }
    }
    recurse(data, '');
    return result;
};

When I try to compile that with the latest git version I get....

[root@mikespc ~]# /usr/bin/java -jar closure-compiler-1.0-SNAPSHOT.jar  --new_type_inf test.js
java.lang.RuntimeException: java.lang.RuntimeException: INTERNAL COMPILER ERROR.
Please report this problem.
Expected object type but found bottom
In scope: recurse(cur,prop) with root: FUNCTION recurse 4 [length: 582] [source_file: test.js]
at com.google.javascript.jscomp.CompilerExecutor.runInCompilerThread(CompilerExecutor.java:126)
at com.google.javascript.jscomp.Compiler.runInCompilerThread(Compiler.java:740)
at com.google.javascript.jscomp.Compiler.compile(Compiler.java:710)
at com.google.javascript.jscomp.Compiler.compile(Compiler.java:680)
at com.google.javascript.jscomp.AbstractCommandLineRunner.doRun(AbstractCommandLineRunner.java:1080)
at com.google.javascript.jscomp.AbstractCommandLineRunner.run(AbstractCommandLineRunner.java:492)
at com.google.javascript.jscomp.CommandLineRunner.main(CommandLineRunner.java:1841)
Caused by: java.lang.RuntimeException: INTERNAL COMPILER ERROR.
Please report this problem.
Expected object type but found bottom
In scope: recurse(cur,prop) with root: FUNCTION recurse 4 [length: 582] [source_file: test.js]
at com.google.common.base.Preconditions.checkState(Preconditions.java:518)
at com.google.javascript.jscomp.newtypes.JSType.isStruct(JSType.java:377)
at com.google.javascript.jscomp.NewTypeInference.analyzeFunctionFwd(NewTypeInference.java:1021)
at com.google.javascript.jscomp.NewTypeInference.analyzeFunction(NewTypeInference.java:838)
at com.google.javascript.jscomp.NewTypeInference.process(NewTypeInference.java:480)
at com.google.javascript.jscomp.PhaseOptimizer$NamedPass.process(PhaseOptimizer.java:296)
at com.google.javascript.jscomp.PhaseOptimizer.process(PhaseOptimizer.java:228)
at com.google.javascript.jscomp.Compiler.check(Compiler.java:873)
at com.google.javascript.jscomp.Compiler.compileInternal(Compiler.java:766)
at com.google.javascript.jscomp.Compiler.access$000(Compiler.java:84)
at com.google.javascript.jscomp.Compiler$2.call(Compiler.java:713)
at com.google.javascript.jscomp.Compiler$2.call(Compiler.java:710)
at com.google.javascript.jscomp.CompilerExecutor$2.call(CompilerExecutor.java:91)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.IllegalStateException: Expected object type but found bottom
... 17 more

I've managed to narrow it down a bit further. It's nothing to do with the recursiveness of the function, it's actually where it loops over the properties of the object. It can be fixed by adding the following annotation...
            var isEmpty = true;
            cur = /** @type {Object} */ (cur);
            for (var p in cur) {
                isEmpty = false;
                recurse(cur[p], prop ? prop + '.' + p : p);
            }

Thank you for the report. Narrowed it down to this. Will fix.

authors: MrsKensington dimvar

repo: google/closure-compiler


text:
Issue with deprecated goog.graphics

Closure compiler, with advanced optimization, would involve some problems with "goog/graphics/path.js" file.
This fix could solve the issue.
--- path_original.js 2016-08-19 14:37:10.293421800 +0200
+++ path.js 2016-08-19 14:37:21.955257800 +0200
@@ -90,11 +90,11 @@
* @enum {number}
*/
goog.graphics.Path.Segment = {
- MOVETO: 0,
- LINETO: 1,
- CURVETO: 2,
- ARCTO: 3,
- CLOSE: 4
+ MOVETO: 1,
+ LINETO: 2,
+ CURVETO: 3,
+ ARCTO: 4,
+ CLOSE: 5
};

Could you elaborate on what the problem was?

reopen if some details are provided

The closure compiler has a weird behavior with the 0 value for an enum {number}.

@Joffrey example and more detailed explanation please!

authors: Dominator008 Joffrey concavelenz mashedcode

repo: google/closure-library


text:
There doesn't seem to be a way to get CFLite to upload files crashing fuzz targets if they crash the latest build

I've been using CFLite to test various patches and when they introduce new issues CFLite uploads files to the "summary" tab as expected. But if CFLite thinks that bugs aren't introduced in PRs it just skips that step. I think it makes sense in general but in some cases bugs can collide so to speak and crash PRs and the latest build differently. It would be great if I could flip a flag named, say, 'always_upload_crashes` to avoid running something like
./infra/helper.py build_fuzzers --external ~/elfutils
./infra/helper.py run_fuzzer --external ~/elfutils fuzz-dwfl-core

in my VMs and copying files to machines that have access to bug trackers to just attach those files to bug reports.

How about a switch to shut off crash novelty checking instead?

It would make it harder to tell really new bugs and bugs that just happen to collide apart, which would probably mean that I wouldn't even try to turn it off for projects that have just started fixing bugs found by fuzz targets.

Sorry, I think I missed something in your original request.
Do you want uploading of fuzz targets and crashes that are not novel?

Should we reopen this and close https://github.com/google/oss-fuzz/pull/6984 instead?

Should we reopen this and close google/oss-fuzz#6984 instead?

I thought I was doing exactly that :-) Looks like I lost track of all the issues I've opened :-)
Another feature that I think would be useful if CFLite could show backtraces of the last builds as well. I've just discovered an issue that I haven't seen before but
2021-12-08 23:31:17,581 - root - INFO - Fuzzer: fuzz-dwfl-core. Detected bug.
2021-12-08 23:31:17,582 - root - INFO - Trying to reproduce crash using: /tmp/tmp7n4idjys/oom-e7fed1fe8da16c1482845db8b8d1fac479a425b5.
2021-12-08 23:31:18,452 - root - INFO - Reproduce command returned: 71. Reproducible on /github/workspace/build-out/fuzz-dwfl-core.
2021-12-08 23:31:18,452 - root - INFO - Crash is reproducible.
2021-12-08 23:31:18,462 - root - INFO - Trying to downloading previous build 51106acb0d7f01845ebab85a3ce4e8b46ae95ab5.
2021-12-08 23:31:20,151 - root - INFO - Done downloading previous build.
2021-12-08 23:31:20,152 - root - INFO - Trying to reproduce crash using: /tmp/tmp7n4idjys/oom-e7fed1fe8da16c1482845db8b8d1fac479a425b5.
2021-12-08 23:31:20,982 - root - INFO - Reproduce command returned: 71. Reproducible on /github/workspace/cifuzz-prev-build/fuzz-dwfl-core

so I have a patch and a new backtrace and to figure out what is going there it seems I have to build and run the fuzz target locally to get the file triggering it, then I have to revert that patch and build the fuzz target once again to pass the testcase to it to get the backtrace. It wouldn't be necessary if CFLite uploaded files crashing fuzz targets unconditionally and show "old" backtraces.

I understand that it doesn't show backtraces by default because they can in theory disclose potential vulnerabilities but on the other hand sometimes it's enough to just run run_fuzzers manually to get those backtraces: https://sourceware.org/bugzilla/show_bug.cgi?id=28666

We fuzzed with a modified oss-fuzz, so it can be reproduced with oss-fuzz steup. Here are the steps to reproduce (poc1 is attached)

:-)

Should we reopen this and close google/oss-fuzz#6984 instead?

I thought I was doing exactly that :-) Looks like I lost track of all the issues I've opened :-)
Another feature that I think would be useful if CFLite could show backtraces of the last builds as well. I've just discovered an issue that I haven't seen before but
2021-12-08 23:31:17,581 - root - INFO - Fuzzer: fuzz-dwfl-core. Detected bug.
2021-12-08 23:31:17,582 - root - INFO - Trying to reproduce crash using: /tmp/tmp7n4idjys/oom-e7fed1fe8da16c1482845db8b8d1fac479a425b5.
2021-12-08 23:31:18,452 - root - INFO - Reproduce command returned: 71. Reproducible on /github/workspace/build-out/fuzz-dwfl-core.
2021-12-08 23:31:18,452 - root - INFO - Crash is reproducible.
2021-12-08 23:31:18,462 - root - INFO - Trying to downloading previous build 51106acb0d7f01845ebab85a3ce4e8b46ae95ab5.
2021-12-08 23:31:20,151 - root - INFO - Done downloading previous build.
2021-12-08 23:31:20,152 - root - INFO - Trying to reproduce crash using: /tmp/tmp7n4idjys/oom-e7fed1fe8da16c1482845db8b8d1fac479a425b5.
2021-12-08 23:31:20,982 - root - INFO - Reproduce command returned: 71. Reproducible on /github/workspace/cifuzz-prev-build/fuzz-dwfl-core

so I have a patch and a new backtrace and to figure out what is going there it seems I have to build and run the fuzz target locally to get the file triggering it, then I have to revert that patch and build the fuzz target once again to pass the testcase to it to get the backtrace. It wouldn't be necessary if CFLite uploaded files crashing fuzz targets unconditionally and showed "old" backtraces.

Sorry, I'm having trouble understanding this. We already show the stacktrace of the crash on the newer binary, why do we need to show the crash from the older binary?

why do we need to show the crash from the older binary?

Because the backtrace can be different if PRs introduce new bugs on top of old bugs.

@jonathanmetzman judging by https://github.com/evverx/elfutils/actions/runs/1574802879, it seems to be working. Thanks!

I'm not sure why CFLite is red there though. Those issues are reproducible with the latest build as well so I think CFLite should be green.

I'm not sure if it helps but here's what I use in the CFLite workflow:
    env:
      UPLOAD_ALL_CRASHES: 'True'
      REPORT_OOMS: 'False'

My understanding it that UPLOAD_ALL_CRASHES=True combined with REPORT_OOMS=False should prevent PRs from turning red when those OOMs are reproducible with the latest builds.

I moved that to https://github.com/evverx/elfutils/pull/53 to avoid interfering with https://github.com/evverx/elfutils/pull/49 (which I'm using to test https://sourceware.org/pipermail/elfutils-devel/2021q4/004520.html)

Without UPLOAD_ALL_CRASHES: 'True' it's green there as expected

Turned it off for now because without https://github.com/google/oss-fuzz/pull/6997  the fuzzers can't go any further

Landed  google/oss-fuzz#6997

Looks like those OOMs are gone. Thanks! The fuzz target triggers a timeout though but once https://sourceware.org/pipermail/elfutils-devel/2021q4/004463.html is merged it should disappear as well.

With that patch backported the fuzz target can run for 10 minutes on CFLite so it's probably safe to say that it's prepared for the next round of patches. It would be great if PRs crashing the latest builds didn't turn red with UPLOAD_ALL_CRASHES=True and it was possible to show old backtraces though.

authors: evverx jonathanmetzman

repo: google/clusterfuzzlite


text:
Works perfectly with one account but not another

I've finally sorted out my problems with CUPS, with our Brother HL5470-DW printers, with encryption, and so on - and installed the latest version of the cups-connector. I am using local mode. And when I am logged into Chrome with my @gmail.com account, it works perfectly!
However, when I use my Google Apps for Education account (@oakhillschool.net), none of the printers share by the cups-connector appear! I can see some that have been shared in other ways, but not the ones managed by the cups-connector.
Any suggestions?
Thank you!

Hi Tim,
A few questions:

Does your school account require a VPN or Proxy?
From the school account, can you reach the CUPS server (ping or open web page)?
When you switch accounts, are you remaining on the same wired or WiFi connection?

Thanks for the reply.
No VPN nor proxy.
Yes, I can always ping and ssh to the CUPS server.
Yes, I am always using the same Wi-Fi connection.
The strange thing is that I am merely changing the account that I am using to log into Google. Absolutely nothing else is changing on my computer or network. In fact, right now, I am logged in in one Chrome window to my @oakhillschool.net account and another in my @gmail.com account - and one works with the cups-connector printers and one does not.
Also: I see that no Cloud Print printers show up at all when I log in with an old @gmail.com account that I don't use often. Only with my timmrogers@gmail.com account.
Could I have old cups-connector configuration files around from my earlier attempts to get this working? I'll look...

Thanks, is this a Chrome OS device or something else? Can you try installing this extension:
https://chrome.google.com/webstore/detail/mdns-browser/kipighjpklofchgbdgclfaoccdlghidp
when opening mDNS Browser, you should see (among other items) a listing for "_privet" and the IP address of your cups-connector server. Do you see that on both profiles? If you can't see it in the profile, some network setting is blocking cups-connector's mDNS broadcast.

I'm working with Google Chrome on a MacBook Pro (OS X 10.10).
I also tried it on a Chromebook using my @oakhillschool.net account.
I'll try to extension.

While logged into my @oakhillschool.net account in Google Chrome, and running Apps | mDNS Browser, _prvet shows 192.16.0.5 - which is the IP address of my CUPS server.

OK, can you try browsing to:
chrome://policy
and print the page you see there to a PDF and attach it here?

Here you go. (I notice that my timmrogers@gmail.com has no mandatory policies, while this has a couple. Might these be the issue?)
Hmmm...GitHub will not allow me to attach the PDF. It says "Something went really wrong, and we can't process that file."
Here is the information as text:
User policies
User:
trogers@oakhillschool.net
Client ID:
28335CEB-E533-43BF-A56B-60612771C39C
Last fetched:
2 hours ago
Fetch interval:
3 hours
Status:
Policy cache OK
Chrome policies
Applies to	Level	Policy name	Policy value	Status
Current user
Mandatory
ExtensionInstallBlacklist
nccnonfgafoenakjedibnklpgdgjakkh
OK
Current user
Mandatory
MaxInvalidationFetchDelay
10000
OK

Chrome just popped up two announcements, saying that it had found "7 new printers" and suggesting that I add them to my Google Chrome print so I could print from anywhere.
I didn't. I notice that those printers are still not available in Cloud Print.

Tim, that "7 new printers" popup is a Chrome bug. You'll never need to
respond to it with a CUPS Connector printer.
However, it does indicate that Chrome saw the mDNS announcement, so that's
good.

Thanks.
I see that it gave the announcement (twice) again. That might be a problem, if it is making that announcement every few minutes to everyone on campus who is using Google Chrome.

@timmrogers I suggest that you become a squeaky wheel here: crbug.com/540847
I talked to the engineer responsible for this yesterday; he says this is a pretty easy bug to fix.

I voted for the bug. Your report seemed more than clear!
Leaving aside the Google bug, any ideas as to why the printers are available in one account and not another?

(punting to @jay0lee)

Can you share screenshots of what you see when you hit CYRL+P on a web page in both accounts?

CTRL+P, sorry for mobile typo

You can see the account name in the screenshots. I am looking for the printer called "ohs-computer_lab". It is available in the @gmail.com account, but not the @oakhillschool.net account.

@timmrogers we don't expect the GCP version of the printer to show under Google Cloud Print for your school account unless you've shared the printer and accepted it.We're looking for the local version. Does it show further up the list under a "Local Destinations heading?

That makes sense - but a couple of things are confusing to me.
First, the GCP version of the printer DOES show up under Google Cloud Print
for my @gmail.com account. But on the same machine, same network, same
everything, it does not show up there for my @oakhillschool.net account. I
can't imagine why that would be.
Second, no printers show up on a Chromebook when logged in under my @
oakhillschool.net account. Which is, for me, the point of the entire
exercise!
(I haven't tried the Chromebook with my @gmail.com acount, but I can do
that and let you know.)
But no. "ohs-computer_lab" and the other printers shared via the
gcp-cups-connector do not appear under Local Destinations - at least, not
by the names that I expect. I DO see new entries there though. Perhaps that
is the gcp-cups-connector doing its thing? Or could it be the CUPS server?
I'm afraid that the difference between the behavior of the two accounts has
my head spinning a bit!
Thanks.
On Thu, Oct 8, 2015 at 2:11 AM Jay Lee notifications@github.com wrote:

@timmrogers https://github.com/timmrogers we don't expect the GCP
version of the printer to show under Google Cloud Print for your school
account unless you've shared the printer and accepted it.We're looking for
the local version. Does it show further up the list under a "Local
Destinations heading?
—
Reply to this email directly or view it on GitHub
https://github.com/google/cups-connector/issues/109#issuecomment-146466017
.

First, the GCP version of the printer DOES show up under Google Cloud Print
for my @gmail.com account. But on the same machine, same network, same
everything, it does not show up there for my @oakhillschool.net account. I
can't imagine why that would be.

Google CloudPrint printers are shared between Google accounts. It doesn't matter what network or device you are on, what matters is if it's shared with your Google account. You can go to google.com/cloudprint from the @gmail.com account and share the printer with your school account or you can set share_scope in your gcp-cups-connector config file to automatically share all your GCP printers with your school account.

Second, no printers show up on a Chromebook when logged in under my @
oakhillschool.net account. Which is, for me, the point of the entire
exercise!

If local printing is functional and you're connected to the same network, the local version of your printer should show under "Local Destinations" when you hit CTRL+P on the Chromebook and Change the printer.

OK - I'll try a few things and get back to you.
Thanks again.
On Thu, Oct 8, 2015 at 8:43 AM Jay Lee notifications@github.com wrote:

First, the GCP version of the printer DOES show up under Google Cloud Print
for my @gmail.com account. But on the same machine, same network, same
everything, it does not show up there for my @oakhillschool.net account. I
can't imagine why that would be.
Google CloudPrint printers are shared between Google accounts. It doesn't
matter what network or device you are on, what matters is if it's shared
with your Google account. You can go to google.com/cloudprint from the @
gmail.com account and share the printer with your school account or you
can set share_scope in your gcp-cups-connector config file to automatically
share all your GCP printers with your school account.
Second, no printers show up on a Chromebook when logged in under my @
oakhillschool.net account. Which is, for me, the point of the entire
exercise!
If local printing is functional and you're connected to the same network,
the local version of your printer should show under "Local Destinations"
when you hit CTRL+P on the Chromebook and Change the printer.
—
Reply to this email directly or view it on GitHub
https://github.com/google/cups-connector/issues/109#issuecomment-146583396
.

authors: jacobmarble jay0lee timmrogers

repo: google/cups-connector


text:
Question about how to modify the default GPU

Thanks for your great work! In your code, I found that the default GPU number is zero：
`RuntimeError: CUDA out of memory. Tried to allocate 336.00 MiB (GPU 0; 31.75 GiB total capacity; 1.91 GiB already allocated; 212.00 MiB free; 2.14 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation.  See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF.
I attempted to modify -- local_ rank parameter and list (range (torch. cuda. device_count())) and reported an error：
RuntimeError: module must have its parameters and buffers on device cuda:0 (device_ids[0]) but found one of them on device: cuda:1
Where else do I need to modify to change the default GPU0 to GPU1 or GPU2, GPU [1,2]?Thanks

Hi, I would like to ask how you solved this? I met the same problem

Hello, the author previously provided a response to address the issue of insufficient GPU memory，as follows：Hi, we experiment with 4X A100 GPUs with 40GB memory. If you want to train or test with less GPUs, you need to change "chunk_size" and "N_rand" in txt files to be smaller. However, we didn't test it with smaller sample sizes, so the final outcomes can be different.

Thanks for the reply, i would like to know how to change the default GPU
I modify local_rank and list, but it returns the same error: RuntimeError: module must have its parameters and buffers on device cuda:0 (device_ids[0]) but found one of them on device: cuda:1

I solved this problem before, but it's also a long time ago. You need to put the model and parameters on the same device. If you use multiple GPU devices, you need to put the data on the first device in the GPU list, except for modifying the local_ rank and list, you need to pay attention to the consistency between the GPU storing the model in ‘model.py’ and the GPU storing data in ’train.py‘.

authors: Richerhooders ShadowBbBb

repo: google/dynibar


text:
Provide the option to use the system GDAL install

Create a mechanism to ensure that either the system or bundled version of GDAL is loaded at runtime. Currently, the Fusion UI will grab the first GDAL library available, which means that it might be overridden. The daemon processes may work similarly.
The version of GDAL would likely have to be 2.1 or higher. Therefore, we will still need to have the option to build the bundled version. However, this would make it easier for users to use their customized GDAL version.

This might avoid the need to solve proprietary library problems for formats JPEG2000 (see #53), MrSID (see #2) and ECW within GEE.

I've updated the description. We could split this ticket into 2, first ensuring that Fusion always uses the bundled version of GDAL and keep this as a follow-up to enable usage of the system library.

If there's no objection, I'd suggest going with the 2 ticket option.  We can reset this one to allow using the system GDAL library and open a new one to make sure we're loading the correct library at run time.

authors: bradh tst-ccamp tst-lsavoie

repo: google/earthenterprise


text:
An unhandled exception was thrown by the Error Prone static analysis plugin.

java: An unhandled exception was thrown by the Error Prone static analysis plugin.
Please report this at https://github.com/google/error-prone/issues/new and include the following:
 error-prone version: 2.15.0
 BugPattern: UnusedVariable
 Stack Trace:
 java.lang.IndexOutOfBoundsException
at java.base/java.nio.HeapCharBuffer.subSequence(HeapCharBuffer.java:615)
at java.base/java.nio.HeapCharBuffer.subSequence(HeapCharBuffer.java:41)
at com.google.errorprone.VisitorState.getOffsetTokens(VisitorState.java:595)
at com.google.errorprone.fixes.SuggestedFixes.replaceIncludingComments(SuggestedFixes.java:1667)
at com.google.errorprone.bugpatterns.UnusedVariable.buildUnusedVarFixes(UnusedVariable.java:395)
at com.google.errorprone.bugpatterns.UnusedVariable.matchCompilationUnit(UnusedVariable.java:235)
at com.google.errorprone.scanner.ErrorProneScanner.processMatchers(ErrorProneScanner.java:449)
at com.google.errorprone.scanner.ErrorProneScanner.visitCompilationUnit(ErrorProneScanner.java:555)
at com.google.errorprone.scanner.ErrorProneScanner.visitCompilationUnit(ErrorProneScanner.java:150)
at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCCompilationUnit.accept(JCTree.java:591)
at jdk.compiler/com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:56)
at com.google.errorprone.scanner.Scanner.scan(Scanner.java:58)
at com.google.errorprone.scanner.ErrorProneScannerTransformer.apply(ErrorProneScannerTransformer.java:43)
at com.google.errorprone.ErrorProneAnalyzer.finished(ErrorProneAnalyzer.java:152)
at jdk.compiler/com.sun.tools.javac.api.MultiTaskListener.finished(MultiTaskListener.java:132)
at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1418)
at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1365)
at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:960)
at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.lambda$doCall$0(JavacTaskImpl.java:104)
at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.handleExceptions(JavacTaskImpl.java:147)
at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:100)
at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:94)
at org.jetbrains.jps.javac.JavacMain.compile(JavacMain.java:231)
at org.jetbrains.jps.incremental.java.JavaBuilder.lambda$compileJava$2(JavaBuilder.java:514)
at org.jetbrains.jps.incremental.java.JavaBuilder.invokeJavac(JavaBuilder.java:560)
at org.jetbrains.jps.incremental.java.JavaBuilder.compileJava(JavaBuilder.java:512)
at org.jetbrains.jps.incremental.java.JavaBuilder.compile(JavaBuilder.java:355)
at org.jetbrains.jps.incremental.java.JavaBuilder.doBuild(JavaBuilder.java:280)
at org.jetbrains.jps.incremental.java.JavaBuilder.build(JavaBuilder.java:234)
at org.jetbrains.jps.incremental.IncProjectBuilder.runModuleLevelBuilders(IncProjectBuilder.java:1464)
at org.jetbrains.jps.incremental.IncProjectBuilder.runBuildersForChunk(IncProjectBuilder.java:1101)
at org.jetbrains.jps.incremental.IncProjectBuilder.buildTargetsChunk(IncProjectBuilder.java:1247)
at org.jetbrains.jps.incremental.IncProjectBuilder.buildChunkIfAffected(IncProjectBuilder.java:1066)
at org.jetbrains.jps.incremental.IncProjectBuilder.buildChunks(IncProjectBuilder.java:832)
at org.jetbrains.jps.incremental.IncProjectBuilder.runBuild(IncProjectBuilder.java:419)
at org.jetbrains.jps.incremental.IncProjectBuilder.build(IncProjectBuilder.java:183)
at org.jetbrains.jps.cmdline.BuildRunner.runBuild(BuildRunner.java:132)
at org.jetbrains.jps.cmdline.BuildSession.runBuild(BuildSession.java:301)
at org.jetbrains.jps.cmdline.BuildSession.run(BuildSession.java:132)
at org.jetbrains.jps.cmdline.BuildMain$MyMessageHandler.lambda$channelRead0$0(BuildMain.java:219)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)

Duplicate of #1250

seems lombook caused this error, we have. @sl4j annoatation, but didn't use log variable on the code.

authors: tbroyer wolfduan

repo: google/error-prone


text:
Do not call CreateMetricDescriptor

Rely on Terraform to manage metric descriptors.

What's the behavior if this is true, but no metric is defined. Is it an error?

Hmm I just realized this won't work, as Cloud Monitoring will create the metric automatically (http://cloud/monitoring/custom-metrics/creating-metrics#auto-creation).
It looks like we will be in a tough spot if we really want to recreate a metric.

repo: google/exposure-notifications-server


text:
Refactor fetchResourceUsageRecordsTest to not depend on FakeTime

fetchResourceUsageRecordsTest relies on FakeTime, assuming that FakeTime affects resource usage records' server timestamps.
Even though this might be true for existing MySQL and sqlite datastore implementations, it's very much possible to have a datastore implementation that relies on the database server to provide server timestamps. In this case, the test would fail, since real (and not fake) timestamps will be written to the datastore, breaking the test's assumptions.
The test should be refactored along the lines of:

We write a number of resource usage records to the datastore.
We read these resource usage records back and use their timestamps to test that the filtering works as expected.

This is now done with https://github.com/google/fleetspeak/commit/4209f6985bdc5e4dcec5601cddd6c148920f84de

repo: google/fleetspeak


text:
Extract the common logic to calculate the initial flex lines

This PR extracts the common logic to calculate the initial flex lines from the FlexboxLayout to FlexboxHelper to re-use it from the FlexboxLayout and the FlexboxLayoutManager.

@yaraki could you take a look?
Thanks in advance.

This is not a new topic, but there are many "new"s in the layout pass. This can cause bad performance especially for RecyclerView scrolling quickly. We might need to consider making FlexLine and other layout models behave more like Rect in the framework, so that we can reuse layout models without newing items each time.

Thanks! Addressed all. PTAL @yaraki
Regarding the many "new"s, you are right. FlexboxHelper should avoid such many "new"s I'll address it in another PR.
Thanks.

+2!

Thanks! Merged.

authors: thagikura yaraki

repo: google/flexbox-layout