It's been a little bit hard to figure out how to explain that my on-and-off hobby project for the last 6 years (with a 4 year break) has been a Nintendo emulator in Common Lisp.
I think that's because the emulator isn't the thing it's the thing that leads to the thing.
The real goal is being able to play a ROM and answer questions to help a constraint solver construct a _model_ of the control/data flow of the game. I don't know if this is possible. To quote Zero Cool, "Fucked if I care, man."
Hi, I'm Brit. 31, cis/het white male, born into more privilege than even that descriptor signifies.
I write code for money but miss teaching.
Too much is important to me and I still don't know how to best honor myself.
I delight in looking at trees, watching dogs run, reading Milosz and Neruda.
I can soak in headphones for hours seeking beautiful sounds.
I instinctively distrust many social structures but I love people madly.
I'm anxious about change and always changing. <3
As a dev that is building his own thing and a culture dude that has always been about pushing forward, I _love_ how folks are getting into the dirty details of what social media is vs. what it can be.
Ha, on the real, I don't have any answers myself because I'm trying to figure it out as I go, but it is so encouraging to see so many other people talking that challenge.
It's hard, it's ugly, it's a lot of thankless work when no one is watching.
But that's the work.
Foreshadow looks really bad.
> At a high level, whereas previous generation Meltdown-type attacks are limited to reading privileged
supervisor data within the attacker’s virtual address space, foreshadow-NG attacks completely bypass the virtual memory abstraction by directly exposing cached physical memory contents to unprivileged applications and guest virtual machines.
So, this is some of my blog posts from last year about my vague hyperdata idea, which is at a *very* rudimentary theoretical state.
Mostly, my thinking has revolved around issues not even yet of programming-language semantics, but of *syntax*. Which you might think doesn't matter, but I think... does, a lot.
So far my idea is to extend S-expressions with one symbol (I use '/' here, but it could be anything) to give a primitive notion of 'type tagging'.
If you need a compiled compiler to compile compilers, how do you know that there's no spyware secretly propagating itself?
hex0 is "a hex assembler written in hex" -- basically several bytes of raw machine code "with a shitload of comments" which translates text to bytes
hex0 translates hex1
which translates M0
which assembles M1/hex2
which assembles M2-Planet
which assembles mes
🆕 which compiles tinycc
which compiles gcc
which compiles the OS!
Changing random stuff until your program works is "hacky" and "bad coding practice", but if you do it fast enough it's "Machine Learning" and pays 4x your current salary.
I wonder how performant a primitive x86 processor, but fabbed on modern processes, could be.
No branch prediction.
No speculative execution.
No out-of-order execution.
No attempts to extract instruction-level parallelism.
Just a single-issue pipeline that issues things as they're ready, and stalls if they're not ready.
"GNU Mes aims to help create full source bootstrapping...It consists of a mutual self-hosting Scheme interpreter written in ~5,000 LOC of simple C and a Nyacc-based C compiler written in Scheme."
"Mes is inspired by The Maxwell Equations of Software: LISP-1.5 – John McCarthy page 13, GNU Guix's source/binary packaging transparency and Jeremiah Orians's stage0 ~500 byte self-hosting hex assembler."
Guix folks continuing to do pretty cool things :)
The reason why I a) keep looking for minimalist programming languages and b) dislike compilation
is that I keep looking for a 'language' that would allow me to express concepts, or knowledge, in a way that can be portable between machines / environments
Eg, say you start with, let's say, JSON, as a data representation language. It's okay, ish, until you want to 'point to something'.
Once you add some kind of idea of a 'link', you are very close to being a Turing-complete language.
Putting it in the simplest terms possible:
When I was 8, I desperately wished I could ask my family computer, "Wow! How did you do that?"
I still can't today and I spend a lot of time thinking about what a solution to that should look like.
I should note that I don't even think all software needs to be preserved. I just think it's a travesty that we're 60 years into the project of programming and our tools for _asking computers_ about how programs behave are so poor and so specialized.
Honing in on a core belief recently (2/2):
I continue to want to find a way explain code without relying on fairly static tools like documentation, the code itself, or even tests. Legacy code and software preservation only makes this need more urgent.
My primary motivation working on the emulator is finding ways to generate an explanation of binaries without just recovering the disassembly. It's the intent and constraints that matter, not necessarily the solution the developers wound up with.
Honing in on a core belief recently (1/2):
There's no such thing as code being "readable", not only because being readable implies assumptions about the context of the reader but also most programs cannot present a linear narrative! (see also: http://www.gigamonkeys.com/code-reading/ and http://akkartik.name/post/comprehension, though lukego.github.io/blog/2012/10/24/readable-programs/ may be a counterpoint.)
This only makes pursuing comprehensible code all the more important though! Even if we can't reach the destination.
Here's a hypothesis: it is useful to support and encourage self-hosting as often as is feasible for the more self-hosters that exist the more likely it becomes that you know one who'd be willing to be a host for you, too. We don't need everyone self-hosting interesting internet services, just a nice evenly distributed fraction who enjoy lending a hand to their friends.
"... the astonishing fact is that this botnet was, inadvertently, performing brute-force attacks against SATCOM modems located onboard an in-flight aircraft."
"Use a good idea again instead of generalizing it" and other gems in Hints for Computer System Design http://research.cs.wisc.edu/areas/os/Qual/papers/design-hints.pdf
I've posted a bug bounty: $250 USD if you can fix this issue: Racket's "raco install" (and even "raco setup" I think) does not work right on Guix / GuixSD and tries to write to the read-only store. https://debbugs.gnu.org/cgi/bugreport.cgi?bug=30680 https://groups.google.com/forum/#!topic/racket-users/wtQ4-JqyDKw
I don't have enough time to fix it myself... but if you can do it, I'm happy to pay you!