Avoiding the Maybe/option type to make intent clearer:
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.