My contributions to open source projects in reverse chronological order.
- 2023 (Rust hyper): Contributed graceful server connection shutdown example to Hyper 1.0
- 2022 (Go quic-go): Fixed bug in Caddy when using HTTP/3 + fastcgi resverse proxy
- Observed HTTP/3 frontend with fastcgi reverse proxy backend always returned 500
- After some packet sniffing found the bug was in server protocol field value
- I fixed this bug in quic-go which fixed above issue in Caddy.
- 2022-2023 (C++ and Kotlin flatbuffers): 2 PRs to avoid always generating a viral/FUD-producing
@ExperimentalUnsignedTypes
annotation in Kotlin code. Change is in theflatc
flatbuffers schema compiler written in C++.- First PR: simple change given that in Kotlin 1.5 unsigned types are not experimental, remove generation of annotation
- Above change was reverted because unsigned arrays are still experimental
- Second PR: change to detect when unsigned arrays are used and generate annotation only when needed.
- Second change still exists in
flatc
main branch
- 2021 (Go quic-go): Made port HTTP3 Alt-Svc header configurable
- Needed when Layer 4 firewall is redirecting UDP port for HTTP3 servers (e.g.
443 -> 8443
) - quic-go library is used as go HTTP3 library in Caddy and cloudflared for example
- Needed when Layer 4 firewall is redirecting UDP port for HTTP3 servers (e.g.
- 2021 (Java Hazelast): Added Nonnull annotations to StreamSerializer
- A colleague and I were unsure if parameters and return values from read/write methods were nullable. So I proposed above PR to Hazelcast to enforce this at compile-time.
- Change allows Java spotbugs to use these annotations at compile time to ensure proper null handling.
- Also alows Kotlin code using Hazelcast to enforce null-safety
- 2018 (Go CoreDNS): Added MINTTL option
- Can be used to clamp minimum TTL when caching DNS responses similar to
cache-min-ttl
option in Unbound - MINTTL option still exists in CoreDNS
- Can be used to clamp minimum TTL when caching DNS responses similar to
- 2018 (Rust Hyper): Update send_file example
- Made example using async file operations provided by tokio
- 2017 (Rust Hyper): Fixed infinite loop
- Infinite loop happened converting from
Cow::Owned
string or bytes to hyper http body.
- Infinite loop happened converting from
- 2016 (Java Apache Camel): Fixed Kafka key and partition field names in Apache Camel Kafka Component
- Made these fields easier to use as properties on Camel exchange.
- 2014 (C/Java Netty): Fixed issue 2280 in Netty
- In early days of Netty having an epoll transport written in C and JNI, the epoll client transport was incorrectly firing
channelActive
events even if connecting to server failed. - I fixed this bug in Netty's C and Java code using JNI
- In modern times much of the JVM REST API world is running on Netty epoll transport (e.g. Spring Boot Webflux, Cassandra, Micronaut, others)
- In early days of Netty having an epoll transport written in C and JNI, the epoll client transport was incorrectly firing
- 2011 (Java Netty): Contributed failImmediatelyOnTooLongFrame option to Netty decoders
- 2011 (C++ boost): Contributed lock-free version of
boost::shared_ptr
for IBM AIX operating system to improve performance by 5x.boost::shared_ptr
is reference-counted, thread-safe smart pointer similar to Arc in Rust.- My code still exists in the boost source code.
- Eventually
boost::shared_ptr
becamestd::shared_ptr
in c++11.