I hadn’t noticed that! You are totally right. Looks like Safari is explicitly blocked in the stylesheet 🤷
Very wren vibes from the website
PocketLang - a small, fast and friendly language for scripting and embedding
From the GitHub page:
The language is written using Wren Language and their wonderful book Crafting Interpreters as a reference.
I love Nils’s work. Good to know he’s still at it. Has anyone worked through the scheme 9 from empty space book? Can you recommend it to someone who has worked through (most of) SICP?
Yes, so my hope is that it goes into the nitty-gritty that was left out of SICP: hygienic macros, call/cc, threads.. I’m guessing it has to be the case since s9 does R4RS.
Answering myself, for posterity: This is what the book is about (from http://www.t3x.org/s9book/index.html)
How does automatic memory management work?
How is macro expansion implemented?
How does lexical scoping work?
How is arbitrary precision arithmetics implemented?
How does tail call elimination work?
How are first-class continuations implemented?
This is probably a dumb question, but what’s wrong with passing an anonymous word to the activate-toaster
word?
[ my-custom-code-here ] activate-toaster
That’s what I’d do, too. and then I would just : warm-toaster [ warm ] activate-toaster ;
and do forth like Chuck would. At uni I wrote a lot of Forth esp on FlashForth and such and never ever found myself ever using defer, hooks and such, because they are anti-patterns imo.
Hooks are best used when you have something you need to be able to temporarily replace. For instance, output. The c:put
is a hookable word. By setting a new target, you can capture all displayed data until the word is unhooked to a buffer or file.
I may well be misunderstanding the context here, but my understanding is that, while your solution would 100% work, it solves a different problem than what a hook seeks to solve – I imagine the scenario where, for example, a toaster manufacturer includes hooks in the toaster’s code that an enthusiast home-toaster-programmer could extend without having to gain direct access to the toaster’s core code. Your solution (I think) assumes direct access to the point of invocation of a word, whereas, with a hook, you could extend an existing interface without having to touch it directly.
From the readme,
Each commit of this project corresponds to a section of the book. For this purpose, not only the final state of the project but each commit was carefully written with readability in mind. Readers should be able to learn how a C language feature can be implemented just by reading one or a few commits of this project.
I’m not heaps familiar with github’s web interface. I know you can do this from the git cli with git log –reverse
When the ziglings came up on the orange site someone started a list but it seems some of the other repos suggested are more complete, if a bit out of date.
Thanks for the heads up! This by example includes some things I’d missed!
It seems that maybe this list already exists!
https://github.com/ahmdrefat/awesome-koans/blob/master/koans-en.md
in a similar thrust to Casey’s making this entire game from scratch, have you seen Charles Childers’ The Code It Yourself Manifesto? It is the second to bottom-most link in the left-hand column, I can’t find a way to link to it directly!
Loved the episode, too!
Here’s a link to the manifesto: http://pestilenz.org/~ckeen/blog/posts/ciy-manifesto.html
I would appreciate a high-level overview on stack machines. e.g. how do they work, what can they do, why did they disappear, and why are some people missing them?
A little on the dry-side, but I think that this offers a really solid overview of a stack machine from a technical vantage point, https://users.ece.cmu.edu/~koopman/stack_computers/sec3_2.html
As to why they disappeared, I’m not 100% certain but as for why folks miss them, at least for me, it is because they offer a way to hold more of the “problem space” of computing in my head all at once. I like to work with systems where I can understand the entire stack, from hardware all the way up. A stack machine reduces the available pallet enough to be understandable while also preserving the majority of the power of a computer.
Edited, formatting issue
I wrote a script to let me type in morse code by opening and closing my laptop lid: https://github.com/veggiedefender/open-and-shut
And also recently modified the chrome dinosaur game to use a projector and webcam so that you play by physically jumping in front of a wall: https://github.com/veggiedefender/projectordino
For the dino game I also wrote a blog post about some of what I learned: https://blog.jse.li/posts/projectordino/
Innovative SIGTERM-based concurrency control. Semaphores who??
You’re hilarious. These are among the dumbest projects I’ve ever heard of. 10/10, following you on GitHub.
The last one I remember writing was a pomodoro timer – not to ever use, but to play with the logical structures of lua.
I am currently learning forth and doing the same.
I’m gonna ask. I’ve seen a lot of references to ZNC on the self hosting thread, I’ve did some research, but at the end I couldn’t find a clear answer: could someone explain the purpose of an IRC bouncer like I’m five?
No problem! IRC (internet relay chat) is a type of real-time chat. Sort of like telegram or signal, but not really at all.
With it folks can chat with one another online. A major difference between IRC and other chat protocols is that if you aren’t actively connected to an IRC server you won’t receive any messages. So, whereas with telegram or signal you can close/quit the app and still get messaged, the same isn’t true for IRC.
This is where bouncers, like this, and ZNC come in. A bouncer is a program that you run on a server or any computer that is always online – the bouncer connects to one or more IRC servers and then when you want to log on, you (re)connect to your bounce instead of directly to the IRC server. This way you are able to have a log of messages, and sort of fake persistent connection, because the bouncer is always online, even when you aren’t connected.
Thanks! That explain it all. I was getting mixed information between privacy, persistent logs and mobility.
Yeah – there is a lot more to bouncers than first meets the eye!
The privacy angle is that usually, unless you’ve configured it elsewise or unless the server is explicitly masking it, connecting to an IRC server reveals your IP address. Using a bouncer can help to prevent that if that is a concern.
The mobility angle is that there are no (that I know of) persistent IRC clients for mobile. The way to use IRC from a mobile device with intermittent connection to the server is through a bouncer. If it is always connected, it doesn’t matter if your IRC client is always connected.
I use Retro a lot. Especially for writing programs like one might use Perl or something, short but not short enough for a oneliner, or as a supplementary tool. The programs packaged with it are also intermittently useful, unu
actually being really great. The Freenode channel #retro is dead quiet but the developer (crc) is always around. This is the other homepage.
Do you have any examples of the programs you write in retro?
I’ll I’ve played with it a lot, I haven’t written anything “useful” as of yet and would like to start doing so.
I’ve played with retro quite a bit! It is a little different from other forths, but I love how it treats literate programs as first-class-citizens.
Literally the first link in the article
Not 100% sure on what the this is referring to, but if it is Gemini, here is more info on that: < https://gemini.circumlunar.space/>
The tl;dr is that Gemini is a relatively young protocol somewhere in between http and gopher for serving text.
If ya wanna use this on macOS, I think you’ll need to replace
-q
with-G
to set the timeout interval. Very cool!Or just omit -q all together.