The design of Emacs' transient-mark-mode, and why power users might want to try disabling it:
https://spwhitton.name/blog/entry/transient-mark-mode/Adding a macro system to a compiled lisp seems really tricky. It's a ton easier when you have an interpreter that you can throw the macro definitions at.
The more I learn about register allocators, the less I want to write programs in assembly. It's really nice having a compiler minimise spills.
GitHub actions is really polished: it groups outputs by command, has good support for build matrices, and a growing ecosystem.
It's a big feature that lets GitHub avoid being a simple git storage service. Issues are nice, but much more easily migrated.
I still associate gdb with "issue that will be tricky to debug", but I used it today with Rust. Everything just worked.
I was investigating some stack overflows and all the metadata was correct and readable. I was pleasantly surprised :)
This resonated with me: a quality set of de-duplicated bug reports is valuable, and automatically closed issues can prevent that.
Normally I don't like segfaults: they usually mean something low in the stack is broken and it'll be a pain to debug.
Writing assembly, segfaults are a good thing! They're a well-defined error state, whilst there are a whole range of messy failure states that are worse.
I like the lisp convention of 'defvar' (define a variable), 'defmacro' (define a macro). 'defun' feels a little weird though -- shouldn't it have been 'deffun'?
Why don't browsers use history or Alexa rank to highlight trustworthy sites? Gmail already warns me if I haven't emailed a person/domain before.
This seems like a viable heuristic against phishing sites.
This announcement of VisualAge 1.0 for Java (released 1997) is cute. How could Java be revolutionary without a "new killer op-code or do-loop"?
I particularly like how the free edition limits you to creating 100 classes.
strace is an incredibly handy tool when you need it.
$ strace ./hello
execve("./hello", ["./hello"], 0x7ffc64e063b0 /* 52 vars */) = 0
write(0, "\177", 1) = 1
In other news, writing to stdin is a definite sign of a bug.
Functions can have pre/postconditions specifying assumptions and legal ranges for inputs. What's the equivalent for pretrained ML models?
https://gradio.app/blog/missing-contractsIt seems crazy to me that the definitive x86-64 resource is a PDF. It's a good reference, but having a canonical, linkable HTML resource would be really handy.
One thing I've learnt from writing a toy compiler is that this instruction usually means you have a bug:
add %al,(%rax)
This is the instruction encoding of all zeroes. It means you've jumped to the wrong place, or screwed up the size of an operand.
Some scary observations from the cURL maintainer about URL interoperability:
https://github.com/bagder/docs/blob/master/URL-interop.md
(apparently browsers will happily convert http:\\ to http:// !)