news
Programming Leftovers
-
Jim Nielsen ☛ Notes from Bryan Cantrill’s “Intelligence is not Enough”
I quite enjoyed this talk from Bryan Cantrill where he discusses the difficult engineering problems they overcame while working on their company Oxide.
Some of the problems they ran into were bugs. But these weren’t any ordinary bugs, they were company-destroying bugs: bugs that, if they couldn’t be fixed, would sink the entire company.
And the difficulty in solving these bugs was that they had no precedent. Any documentation or knowledge they could find around the symptoms of the problem was actively incorrect.
-
Perl / Raku
-
Arne Sommer ☛ Armstring or Strong with Raku
This is my response to The Weekly Challenge #379.
-
Perl ☛ Introducing constant::string and constant::string::uc
Basically they are very thin wrappers over constant, creating the words as constants, either as is or in uppercase
-
-
Shell/Bash/Zsh/Ksh
-
John D Cook ☛ Brace expansion tree
Here’s a crazy bash one-liner I found via an article by Peter Krumins:
echo {w,t,}h{e{n{,ce{,forth}},re{,in,fore,with{,al}}},ither,at}
This prints 30 English words: [...]
-
-
Java/Golang
-
Nicolas Fränkel ☛ Security Baked Into the JVM: why fork Apache River and OpenJDK?
The more distributed a system, the harder it is to secure. Code crosses JVM boundaries. Objects are serialized across trust boundaries. Third-party proxies run inside your process. The usual answer is a network firewall. It helps, but it operates at the wrong level. Java 17 deprecated the SecurityManager, Java 24 put the final nail in its coffin. Most developers didn’t notice.
-
University of Toronto ☛ Go interfaces, reflection, and binary size
Unlike the standard Go toolchain not doing dead code elimination for package level variables with constant values, this isn't merely the linker deciding it's too much work to do this dead code elimination optimization. Instead it's at least partly a correctness issue. The problem for the Go linker is that reflect allows you to reach through any retained interface value to use any and all exported methods on the underlying concrete type of the value (and any types it contains), using things like Value.MethodByName() and Value.Call(). This makes it hard or impossible for the Go linker to know which exported methods are really dead and can never be reached at runtime.
-