commit fc4be661f2ed82fac603fc025ef163b9bbc6a949
parent 4a5895ebee9b2fb2f0a0b916fbc793d0763e5d22
Author: Jake Bauer <jbauer@paritybit.ca>
Date: Mon, 1 May 2023 18:50:00 -0400
*
Diffstat:
16 files changed, 294 insertions(+), 413 deletions(-)
diff --git a/content/garden/avoiding-burnout.md b/content/garden/avoiding-burnout.md
@@ -0,0 +1,18 @@
+Title: Avoiding Burnout
+Summary: Avoiding Burnout
+
+# [%title]
+
+Tips I've collected that might help me avoid experiencing burnout
+again.
+
+* End a session with clear next steps of what to do next (e.g. Know what needs to be implemented next in software, or know what comes next in a story or essay).
+* Do not exert all your energy at once. Try to stop when spirits are still high and the path ahead is clear.
+* Control the scope of projects. Break things into smaller chunks and focus on those that will produce results quickly instead of worrying about the whole picture right away.
+* Create habits around mundane parts of life to make room for creative thinking.
+* Always have the ability to write down ideas and notes anywhere.
+* Always have several problems or projects active for your subconscious to ponder.
+* Externalize checklists, mundane tasks, appointments and reminders to a more appropriate medium (notebook, notes or calendar app, etc).
+* Save old ideas and projects even if they have "failed". They might still come in handy in the future.
+* Design a space that encourages productivity and minimizes distraction (but don't fuss about making it perfect).
+
diff --git a/content/garden/building-a-computer.md b/content/garden/building-a-computer.md
@@ -3,29 +3,28 @@ Summary: Building a Computer
# [%title]
-The idea would be to build a really simple CPU and video card, potentially on a PC or perfboard, and then write simple programs for it.
+The idea would be to build a really simple CPU and video card,
+potentially on breadboards or perfboard, and then write simple
+programs for it.
-Likely will be a 65C02 or Z80-based system, as these seem to be quite common with a lot of resources available in the community.
+Likely will be a 65C02 or Z80-based system, as these seem to be
+quite common with a lot of resources available in the community.
-These resources are likely to be helpful during this process:
-
-[http://www.chrisfenton.com/](http://www.chrisfenton.com/)
-
-[http://www.searle.wales/](http://www.searle.wales/)
-
-[https://eater.net/](https://eater.net/)
-
-[https://www.youtube.com/c/weirdboyjim](https://www.youtube.com/c/weirdboyjim)
+Alternatively, the [RC2014 project](https://rc2014.co.uk/) has
+already created a highly modular, Z80-based platform that might be
+good to use instead of building one from first-principals if I feel
+like I'm more interested in the software side than the hardware.
-[https://old.reddit.com/r/beneater](https://old.reddit.com/r/beneater)
-
-[https://old.reddit.com/r/homebrewcomputer](https://old.reddit.com/r/homebrewcomputer)
-
-[https://github.com/The-Invent0r/8-bit-Computer-PCB](https://github.com/The-Invent0r/8-bit-Computer-PCB)
-
-[https://github.com/cc65/cc65](https://github.com/cc65/cc65)
-
-[http://penkesu.computer/](http://penkesu.computer/)
+These resources are likely to be helpful during this process:
-[https://www.ikejima.org/projects/2022091-egg-laptop.html](https://www.ikejima.org/projects/2022091-egg-laptop.html)
+* [http://www.chrisfenton.com/](http://www.chrisfenton.com/)
+* [http://www.searle.wales/](http://www.searle.wales/)
+* [https://eater.net/](https://eater.net/)
+* [https://www.youtube.com/c/weirdboyjim](https://www.youtube.com/c/weirdboyjim)
+* [https://old.reddit.com/r/beneater](https://old.reddit.com/r/beneater)
+* [https://old.reddit.com/r/homebrewcomputer](https://old.reddit.com/r/homebrewcomputer)
+* [https://github.com/The-Invent0r/8-bit-Computer-PCB](https://github.com/The-Invent0r/8-bit-Computer-PCB)
+* [https://github.com/cc65/cc65](https://github.com/cc65/cc65)
+* [http://penkesu.computer/](http://penkesu.computer/)
+* [https://www.ikejima.org/projects/2022091-egg-laptop.html](https://www.ikejima.org/projects/2022091-egg-laptop.html)
diff --git a/content/garden/building-an-operating-system.md b/content/garden/building-an-operating-system.md
@@ -0,0 +1,154 @@
+Title: Building an Operating System
+Summary: Building an Operating System
+# [%title]
+
+Various notes on operating systems for whenever I get around to
+trying to make my own.
+
+## Jonathan Blow on how an operating system should work
+
+[https://www.youtube.com/watch?v=k0uE_chSnV8](https://www.youtube.com/watch?v=k0uE_chSnV8)
+
+* Current OSes have too many processes running by default before you're even doing anything with your computer(400 in this discussion)
+* Current OSes have way too many executables by default (4500 in this discussion)
+* A functional OS should not be doing very much. If a user wants to do a bunch of work that's good but the OS should not be large
+* No drivers
+* Most things should happen in userspace
+* Programs should be able to go over the network without talking through the kernel
+* Processes communicate through memory mapping/memcpy
+* Few processes running
+* Processes super-sandboxed from each other, basics of how OS works, not additional thing
+* Core interface that OS implements should be as simple as possible -> facilitate DMA with hardware, handle memory pages, etc.
+* Basically microkernel but better
+* This ideally would be a lot more performant because you don't have to keep going through kernel space or use syscalls for every little thing
+* No installs/invisible installs, you just run it, program shouldn't be able to access anything else anyways so no need for install, it runs in its own little sandbox
+* All code position-independent so no static/dynamic libraries, just one library type which could be statically or dynamically linked at compile time (ideally statically, but in such a way that the program knows what code came from which library so if a security patch is needed we can know which processes need to be updated/changed).
+* Command line programs and library functions should be the same, with the command line possibly implementing extra interface stuff, but either way no separation
+* It's not a good idea to have a ton of software on your OS, most software is bad and fluff and really not needed
+* Don't try to replicate functionality of Linux, Windows, MacOS, etc.
+* Batch scripting is not a good idea because it usually turns into programs to just run programs
+* No PATH variable because programs can't arbitrarily read the FS, but maybe more structured folder?
+* No registry
+
+## Jonathan Blow on Drivers
+
+[https://www.youtube.com/watch?v=xXSIs4aTqhI](https://www.youtube.com/watch?v=xXSIs4aTqhI)
+
+* Communication over DMA
+* Each process implements own TCP stack (i.e. it's basically in a library)
+* What we have now is a mess where drivers from anyone get complete access to the kernel
+* Drivers are a mess anyways, a program to connect to a printer should just connect to the printer, not need to go through a middleman
+* Stuff like sound is solved, but very broken/complicated in a lot of OSes, it should be simple to stream sound to devices, no need for 100s of drivers
+* Make the hardware target the software, not the other way around. One software stack/protocol is really simple to maintain compared to 100s of different pieces of software to support 100s of different devices (i.e. standardize on some set of protocols or say "if you want to support this OS, you have to do this in your hardware"), if not then use a userspace translation program, so at least this "driver" doesn't have kernel access.
+
+## Potential Default Font
+
+[http://paulbourke.net/dataformats/hershey/](http://paulbourke.net/dataformats/hershey/)
+
+## Programmable OS
+
+An OS built upon the principle of infinite mutability where there is no difference between a shell and a text editor or the programs running on it and the kernel. Similar to early computers which ran BASIC, a user is immediately dropped into a REPL (maybe Scheme-based?) with which they can immediately start programming the computer to do anything they want of it. Programs can simply be functions, GUIs can be immediately modifiable through a console window, and so on.
+
+Using interpreted languages for the majority of system tasks is ideal, as they are typically easier and faster to write, experiment with, and debug compared to compiled languages. Also, performance is not typically a concern for general OS tasks, though the ability to compile programs should obviously be included for those situations in which performance is a critical aspect.
+
+Scheme or other LISP-like languages seem to be ideal for this purpose given their property of treating code as data and allowing you to mold the language to fit your specific purposes. It's not uncommon for programs written in such languages to have effectively built their own programming language through the use of composing the basic tools LISP-likes give you.
+
+Yes, this kind of sounds like emacs taken to the next level...
+
+## No Symlinks
+
+[The trouble with symbolic links](https://lwn.net/Articles/899543/)
+
+## Cheap Complexity
+
+[https://www.schneier.com/blog/archives/2022/08/security-and-cheap-complexity.html](https://www.schneier.com/blog/archives/2022/08/security-and-cheap-complexity.html)
+
+## Starting from a Linux Distro
+
+Using Linux From Scratch to get an idea of how things can be done, what needs to be done
+
+[https://www.linuxfromscratch.org/](https://www.linuxfromscratch.org/)
+
+pkgsrc as packaging system?
+
+[https://www.pkgsrc.org/#index5h1](https://www.pkgsrc.org/#index5h1)
+
+Try to incorporate as many BSD-likes as possible, even though we still have to work with the Linux kernel
+
+bsdutils instead of coreutils?
+
+[https://github.com/dcantell/bsdutils](https://github.com/dcantell/bsdutils)
+
+## Issue with modern OS desktops
+
+Innovation was done for the sake of innovation and for the new shiny.
+
+The desktop metaphor was done by Windows 95 and we haven't really changed anything since then.
+
+Don't change things for the sake of change, to make users struggle to find where things are now when all they want to do is get their work done.
+
+[https://www.theregister.com/2022/09/05/opinion_column_modern_os_desktop/](https://www.theregister.com/2022/09/05/opinion_column_modern_os_desktop/)
+
+## OSDev Wiki
+
+[https://wiki.osdev.org/](https://wiki.osdev.org/)
+
+## Memory Management on Old OSes
+
+[http://basalgangster.macgui.com/RetroMacComputing/The_Long_View/Entries/2011/1/22_MoreMasters%3B.html](http://basalgangster.macgui.com/RetroMacComputing/The_Long_View/Entries/2011/1/22_MoreMasters%3B.html)
+
+## Another video series on making an OS
+
+[https://www.youtube.com/watch?v=MwPjvJ9ulSc&list=PLm3B56ql_akNcvH8vvJRYOc7TbYhRs19M](https://www.youtube.com/watch?v=MwPjvJ9ulSc&list=PLm3B56ql_akNcvH8vvJRYOc7TbYhRs19M)
+
+## Continuation Passing Style
+
+In continuation passing style, a stack is not needed because functions never return, the code is simply compiled into sequences of instructions with GOTOs. This might be an interesting thing to try for an operating system, entirely eliminating issues related to stack overflow, stack smashing, etc. Although it would come at the cost of very ugly code if written with a traditional language, so perhaps a new language could be designed just for this OS?
+
+[https://ericnormand.me/podcast/what-is-a-continuation](https://ericnormand.me/podcast/what-is-a-continuation)
+
+
+--
+If I ever make an OS, I will need to have support for stylus input and writing freely over everything.
+
+I wish computers were a lot closer to the pen and paper experience. Where you can take some text or a passage from a book or anything like that and just start scribbling and writing and highlighting, regardless of any specific drawing support in any app.
+
+I would also so very much love to have a text editor that supported creating pages on an infinite plane.
+
+Basically like a neverending desk, where you can make pages of any size and format, organize them how you'd like, draw on them, rearrange them, etc.
+
+But then also combine this with the power of computers where nothing is concrete. You can drag and drop text from one page to another, split pages up to reorder things, have infinite undo, modify images on the fly, etc.
+--
+
+[PROGRAMMING FROM THE GROUND UP AN INTRODUCTION TO PROGRAMMING USING LINUX ASSEMBLY LANGUAGE](https://programminggroundup.blogspot.com/)
+
+## Notes on Programming in the OS
+
+When programming, you should always be able to jump to source code of any libraries you use, as if it was part of your project. If you call `printf` from `stdio.h`, for example, you should be able to just jump to its definition/implementation.
+
+## Notes on a Shell
+
+Is there another way to handle shell-based input that doesn't require ugly escaping of special characters?
+
+It would be nice to be able to write something akin to `cp -r Downloads/Dir With Spaces Documents/` instead of needing to escape the spaces (`cp -r Downloads/Dir\ With\ Spaces Documents/`) or quote the whole string in question (`cp -r "Downloads/Dir With Spaces" Documents/`).
+
+It's not so much that there are scenarios that quoting would be impossible, it's more that I'd rather just not have to worry about the need to do it in the first place.
+
+The end goal would be to make the system as "user-friendly" as possible in so much as the user interacting with the shell doesn't have to think about such simple shell-specific details as this, and can just type what they mean without worrying.
+
+## Notes on File Managers
+
+> im very surprised that no file manager has a method to open a file for /viewing/ (eg double click) or for /editing/ (eg alt+double click), and have two context menu options for these two common actions
+> instead i spend too much time going open with.... and then not knowing what its going to default to next time, and end up opening an image i wanted to view in gimp, or a html i wanted to edit in firefox
+
+[https://merveilles.town/@noa/109591421469751580](https://merveilles.town/@noa/109591421469751580)
+
+## Notes on File Systems
+
+* [Gefs - a new CoW filesystem for Plan9](https://orib.dev/gefs.html)
+
+## Other Helpful Resources
+
+* [Software Unscripted: Scratch-Building an Operating System with Steve Klabnik](https://podcasts.apple.com/us/podcast/scratch-building-an-operating-system-with-steve-klabnik/id1602572955?i=1000594645400) ← This is also useful for "C package manager" ideas.
+* [Recfiles](https://chrismanbrown.gitlab.io/28.html) - a simple database format
+
diff --git a/content/garden/index.md b/content/garden/index.md
@@ -46,38 +46,8 @@ Here are links, documents, and other things I found interesting that I want to g
* [Repeat yourself, do more than one thing, and rewrite everything](https://programmingisterrible.com/post/176657481103/repeat-yourself-do-more-than-one-thing-and)
* [The Little Book About OS Development](http://littleosbook.github.io/)
-## 🌾 The Plots
-
-The Plots are where project and post ideas live. These are things that are
-growing into full blog posts or projects.
-
-### Blog Posts
-
-* [Creating A Digital Garden](digital-gardens)
-* [Notes on A Philosophy of Software Development](philosophy-software-development)
-* [Run Your Own Email](run-your-own-email)
-* [Computer Science's Education Problem](computer-science-education-problem)
-* [Good Computing Systems Let Users Mold Them](good-computing-systems-let-users-mold-them)
-* [Nothing is Permanent](nothing-is-permanent)
-* [The Fediverse Has Problems](fediverse-has-problems)
-* [Computers as Place](computers-as-place)
-
-### Projects
-
-List of [potential project names](project-names).
-
-* [Building a Computer](building-a-computer)
-* [IRC Client From Scratch](irc-client)
-* [Math Reference Sheets](math-reference-sheets)
-* [OS Project](os-project)
-* [Text Editor](text-editor)
-* [TextDB](textdb)
-
## 🌲 The Arboretum
-The Arboretum is the place for long-lived things. Opinions, notes, recipes, and
-other similar things are all found here.
-
### 🎨 Art
* Various [colourschemes](colourschemes)
@@ -96,11 +66,15 @@ Notes on:
General documents, notes, and other bits and pieces I find valuable.
* A [collection of notes and clippings](clippings) from articles that don't yet
-fit anywhere else, but which I still find valuable.
-* [Laptops I Might Like](laptops-i-might-like)
-* Benchmarking: [Fedora 36 Spins - Resource Usage Comparison](fedora-36-spin-resource-comparison)
* [Amateur Radio](amateur-radio)
-* [Personal Productivity-Sans-Burnout Tips](productivity-tips)
+* [Avoiding Burnout](avoiding-burnout)
+* Benchmarking: [Fedora 36 Spins - Resource Usage Comparison](fedora-36-spin-resource-comparison)
+* [Building a Computer](building-a-computer)
+* [Building an Operating System](building-an-operating-system)
+* [Laptops I Might Like](laptops-i-might-like)
+* [Math Reference Sheets](math-reference-sheets)
+* [Notes on Text Editors](notes-on-text-editors)
+fit anywhere else, but which I still find valuable.
* Philosophy:
* [Meditation](meditation)
* [Obscurantism](obscurantism)
@@ -117,7 +91,7 @@ fit anywhere else, but which I still find valuable.
* [Bad Assumptions Made By User/Profile Systems](user-profile-systems-bad-assumptions)
* Programming languages: [C](c), [Clojure](clojure), [Haskell](haskell), [Raku](raku), [LaTeX](latex), [uxn](uxn)
* Tools: [git](git), [Vim](vim), [plan9](plan9), [Make](make)
-* Other: [Licenses](software-licenses)
+* Other: [Licenses](software-licenses), [Potential Project Names](project-names)
### 🖥️ System Administration
@@ -194,12 +168,6 @@ All recipes are vegan and free of tree nuts unless otherwise noted.
* [Sauces](sauces)
* [Oven Roasted Corn on the Cob](oven-roasted-corn-on-the-cob)
-### 🍵 Tea
-
-Notes about the various teas I've tried and about tea in general.
-
-[Nothing Here Yet]
-
### ✍️ Writing
Notes about writing and my mini collection of fountain pens and inks.
diff --git a/content/garden/irc-client.md b/content/garden/irc-client.md
@@ -1,8 +0,0 @@
-Title: IRC Client From Scratch
-Summary: IRC Client From Scratch
-
-# [%title]
-
-[https://ircdocs.horse/](https://ircdocs.horse/)
-
-^ This will be very helpful as a reference for all things IRC
diff --git a/content/garden/math-reference-sheets.md b/content/garden/math-reference-sheets.md
@@ -3,15 +3,10 @@ Summary: Math Reference Sheets
# [%summary]
-[Notes on Arithmetic](https://wiki.xxiivv.com/site/arithmetic.html)
-
-[Long Division](https://www.mathsisfun.com/long_division3.html)
-
-[Long Multiplication](https://www.mathsisfun.com/numbers/multiplication-long.html)
-
-[Subtraction by Regrouping](https://www.mathsisfun.com/numbers/subtraction-regrouping.html)
-
-[Column Addition](https://www.mathsisfun.com/numbers/addition-column.html)
-
-[Long Division Cheat Sheet](https://www.scaffoldedmath.com/2017/11/how-to-do-long-division.html)
-
+* [Notes on Arithmetic](https://wiki.xxiivv.com/site/arithmetic.html)
+* [Long Division](https://www.mathsisfun.com/long_division3.html)
+* [Long Multiplication](https://www.mathsisfun.com/numbers/multiplication-long.html)
+* [Subtraction by Regrouping](https://www.mathsisfun.com/numbers/subtraction-regrouping.html)
+* [Column Addition](https://www.mathsisfun.com/numbers/addition-column.html)
+* [Long Division Cheat Sheet](https://www.scaffoldedmath.com/2017/11/how-to-do-long-division.html)
+* [Theoretical Computer Science Cheat Sheet](https://cglab.ca/~morin/teaching/3804/notes/cheat/cheat.pdf)
diff --git a/content/garden/meditation.md b/content/garden/meditation.md
@@ -3,9 +3,6 @@ Summary: Meditation
# [%title]
-[← Back](./)
-
-
Meditation is about slowing down. About taking the time to feel your feelings and think through your emotions and actions. It is about being mindful of the universe and your place within it.
> dum loquimur, fugerit invida ætas; carpe diem, quam minimum credula postero
diff --git a/content/garden/merveilles.md b/content/garden/merveilles.md
@@ -3,17 +3,12 @@ Summary: The Merveilles Sensibility
# [%title]
-[← Back](./)
-
-
-Mirrored from:
-
-[https://wileywiggins.com/merveilles.html](https://wileywiggins.com/merveilles.html)
-
+Mirrored from: [https://wileywiggins.com/merveilles.html](https://wileywiggins.com/merveilles.html)
(There are more resources there than just this text, so look at that too).
## Solutioning for technological resilience
+
Technology-centric subcultures have splintered and transformed radically since the 1960’s when University-born radical researchers synthesized with the funding-rich military industrial complex, creating an unstable cocktail of new ideas. The consumer-computing boom of the 1980’s led to the techno-utopianism of the 1990’s, and ultimately the monkey’s-paw ironic wish fulfillment of the present day- a media landscape that seems to be both the realization and cruel distortion of utopian ideals of “free information”. The breathless venture-capital-powered silicon valley pursuit of untapped markets created a new path of class mobility– private sector software development. As more and more bright young people devoted themselves to this discipline, new technological subcultures were born out of dissatisfaction with the systems these tech workers found themselves serving under. These subcultures are not monolithic, but tribal. They manifest online and are colored by both the ideas of software development as a practice and the class consciousness and values of the various cultures these individuals came from.
The Merveilles Sensibility (from the French word for “Marvels”) is an associated visual design aesthetic, worldview, and collection of production techniques loosely connected to the Merveilles online community. This community exists as an instance of Mastodon (an open source, decentralized and noncommercial microblogging platform reminiscent of Twitter) and as a webring of personal sites hosted over http or distributed via the DAT protocol. The community was founded by Devine Lu Linvega and Rekka Bellum, two artists and technologists who live a nomadic existence on a houseboat and have adapted their lives to these special requirements, producing games and software under the name Hundredrabbits.
diff --git a/content/garden/notes-on-text-editors.md b/content/garden/notes-on-text-editors.md
@@ -0,0 +1,53 @@
+Title: Notes on Text Editors
+Summary: Notes on Text Editors
+
+# [%title]
+
+## Clojurecember December Adventure
+
+During December, 2022, I attempted to learn Clojure and set myself the project of building a text editor. Not having known any Clojure, I picked a commonly recommended GUI framework called Seesaw. It even had a text editor as one of its examples!
+
+Unfortunately, it was just a bit too limiting to do what I wanted it to do. It's limited to very basic text editing, pretty much the kind of stuff you have available in a textbox in the browser. Nevertheless, I did have some new/improved ideas as a result:
+
+* Line numbers aren't really that useful. A current/total line count might be, but the line count on the left is not really that useful outside of editors like Vim or linking to specific lines like on GitHub or other code collaboration tools.
+* Basic text editing is far too limiting to be useful beyond barebones note-taking
+* Modal editing is useful for avoiding hand-cramping shortcuts, but can get in the way of non-power-user editing, especially when the mouse is involved.
+
+## What one person looks for in a text editor (source of ideas)
+
+* no modes
+* syntax highlighting
+* mildly scriptable
+* cut copy and paste
+* search and replace / regex
+* open large files without hanging
+* deal with long lines too
+* persistent workspace
+* doesn’t become difficult if i have 1000 files open at once.
+* a better interface paradigm than “open” and “closed” files and a million tabs
+* just closes without asking dumb questions in infinite sequences of dialogues
+* well defined hypertext format with proportional fonts for comments and documentation.
+* elastic tabstops
+* “command palette”
+* eval selection or line, replace with result or print result on next line
+* literate programming support
+* tab completion snippets
+* a quick easy way to define tab completion snippets
+* multiple cursors
+* clipboard history/visible clipboard
+* permutations on selection sets
+* minimap/zooming
+* a text editor should just let me type as normal without trying to "guess" what I want, thinking it's smarter than me and sabotaging me.
+
+[https://mortoray.com/2016/06/14/the-simple-things-i-want-in-a-text-editor/](https://mortoray.com/2016/06/14/the-simple-things-i-want-in-a-text-editor/)
+
+(From: https://merveilles.town/@zens/108651671078029864)
+
+* display files in a grid, similar to Safari
+* no concept of open files, just active and sleeping?
+* files backed by some VCS, so you can easily open any past version of the file, make it current, etc.
+* perhaps keep files associated with a project in tabs for quick switching, unless there are too many?
+
+## Helpful Resources
+
+[TextEditors.org](https://texteditors.org/cgi-bin/wiki.pl)
diff --git a/content/garden/obscurantism.md b/content/garden/obscurantism.md
@@ -3,9 +3,6 @@ Summary: Obscurantism
# [%title]
-[← Back](./)
-
-
Obscurantism/obscurationism is the practice of deliberately presenting information in an imprecise, abstruse (i.e. difficult to grasp) manner designed to limit further inquiry and understanding. Obscurantism is fundamentally anti-democratic, anti-intellectualism, and elitist.
An obscurantist is any enemy of intellectual enlightenment and the diffusion of knowledge.
@@ -22,5 +19,4 @@ It is also common in governments which seek to be opaque to the citizens which t
> In the essay "Why I Am Not a Conservative" (1960), the economist Friedrich von Hayek said that political conservatism is ideologically unrealistic, because of the conservative person's inability to adapt to changing human realities and refusal to offer a positive political program that benefits everyone in a society. In that context, Hayek used the term obscurantism differently, to denote and describe the denial of the empirical truth of scientific theory, because of the disagreeable moral consequences that might arise from acceptance of fact.
-[https://en.wikipedia.org/wiki/Obscurantism](https://en.wikipedia.org/wiki/Obscurantism)
-
+* [https://en.wikipedia.org/wiki/Obscurantism](https://en.wikipedia.org/wiki/Obscurantism)
diff --git a/content/garden/os-project.md b/content/garden/os-project.md
@@ -1,162 +0,0 @@
-Title: Building an Operating System
-Summary: Building an Operating System
-# [%title]
-
-## Jonathan Blow on how an operating system should work
-
-[https://www.youtube.com/watch?v=k0uE_chSnV8](https://www.youtube.com/watch?v=k0uE_chSnV8)
-
-
-* Current OSes have too many processes running by default before you're even doing anything with your computer(400 in this discussion)
-* Current OSes have way too many executables by default (4500 in this discussion)
-* A functional OS should not be doing very much. If a user wants to do a bunch of work that's good but the OS should not be large
-* No drivers
-* Most things should happen in userspace
-* Programs should be able to go over the network without talking through the kernel
-* Processes communicate through memory mapping/memcpy
-* Few processes running
-* Processes super-sandboxed from each other, basics of how OS works, not additional thing
-* Core interface that OS implements should be as simple as possible -> facilitate DMA with hardware, handle memory pages, etc.
-* Basically microkernel but better
-* This ideally would be a lot more performant because you don't have to keep going through kernel space or use syscalls for every little thing
-* No installs/invisible installs, you just run it, program shouldn't be able to access anything else anyways so no need for install, it runs in its own little sandbox
-* All code position-independent so no static/dynamic libraries, just one library type which could be statically or dynamically linked at compile time (ideally statically, but in such a way that the program knows what code came from which library so if a security patch is needed we can know which processes need to be updated/changed).
-* Command line programs and library functions should be the same, with the command line possibly implementing extra interface stuff, but either way no separation
-* It's not a good idea to have a ton of software on your OS, most software is bad and fluff and really not needed
-* Don't try to replicate functionality of Linux, Windows, MacOS, etc.
-* Batch scripting is not a good idea because it usually turns into programs to just run programs
-* No PATH variable because programs can't arbitrarily read the FS, but maybe more structured folder?
-* No registry
-
-## Jonathan Blow on Drivers
-
-[https://www.youtube.com/watch?v=xXSIs4aTqhI](https://www.youtube.com/watch?v=xXSIs4aTqhI)
-
-
-* Communication over DMA
-* Each process implements own TCP stack (i.e. it's basically in a library)
-* What we have now is a mess where drivers from anyone get complete access to the kernel
-* Drivers are a mess anyways, a program to connect to a printer should just connect to the printer, not need to go through a middleman
-* Stuff like sound is solved, but very broken/complicated in a lot of OSes, it should be simple to stream sound to devices, no need for 100s of drivers
-* Make the hardware target the software, not the other way around. One software stack/protocol is really simple to maintain compared to 100s of different pieces of software to support 100s of different devices (i.e. standardize on some set of protocols or say "if you want to support this OS, you have to do this in your hardware"), if not then use a userspace translation program, so at least this "driver" doesn't have kernel access.
-
-## Default font?
-
-[http://paulbourke.net/dataformats/hershey/](http://paulbourke.net/dataformats/hershey/)
-
-
-## Programmable OS
-
-An OS built upon the principle of infinite mutability where there is no difference between a shell and a text editor or the programs running on it and the kernel. Similar to early computers which ran BASIC, a user is immediately dropped into a REPL (maybe Scheme-based?) with which they can immediately start programming the computer to do anything they want of it. Programs can simply be functions, GUIs can be immediately modifiable through a console window, and so on.
-
-Using interpreted languages for the majority of system tasks is ideal, as they are typically easier and faster to write, experiment with, and debug compared to compiled languages. Also, performance is not typically a concern for general OS tasks, though the ability to compile programs should obviously be included for those situations in which performance is a critical aspect.
-
-Scheme or other LISP-like languages seem to be ideal for this purpose given their property of treating code as data and allowing you to mold the language to fit your specific purposes. It's not uncommon for programs written in such languages to have effectively built their own programming language through the use of composing the basic tools LISP-likes give you.
-
-Yes, this kind of sounds like emacs taken to the next level...
-
-## No Symlinks
-
-[The trouble with symbolic links](https://lwn.net/Articles/899543/)
-
-
-## Cheap Complexity
-
-[https://www.schneier.com/blog/archives/2022/08/security-and-cheap-complexity.html](https://www.schneier.com/blog/archives/2022/08/security-and-cheap-complexity.html)
-
-
-## Starting from a Linux Distro
-
-Using Linux From Scratch to get an idea of how things can be done, what needs to be done
-
-[https://www.linuxfromscratch.org/](https://www.linuxfromscratch.org/)
-
-
-pkgsrc as packaging system?
-
-[https://www.pkgsrc.org/#index5h1](https://www.pkgsrc.org/#index5h1)
-
-
-Try to incorporate as many BSD-likes as possible, even though we still have to work with the Linux kernel
-
-bsdutils instead of coreutils?
-
-[https://github.com/dcantell/bsdutils](https://github.com/dcantell/bsdutils)
-
-
-## Issue with modern OS desktops
-
-Innovation was done for the sake of innovation and for the new shiny.
-
-The desktop metaphor was done by Windows 95 and we haven't really changed anything since then.
-
-Don't change things for the sake of change, to make users struggle to find where things are now when all they want to do is get their work done.
-
-[https://www.theregister.com/2022/09/05/opinion_column_modern_os_desktop/](https://www.theregister.com/2022/09/05/opinion_column_modern_os_desktop/)
-
-
-## OSDev Wiki
-
-[https://wiki.osdev.org/](https://wiki.osdev.org/)
-
-
-## Memory Management on Old OSes
-
-[http://basalgangster.macgui.com/RetroMacComputing/The_Long_View/Entries/2011/1/22_MoreMasters%3B.html](http://basalgangster.macgui.com/RetroMacComputing/The_Long_View/Entries/2011/1/22_MoreMasters%3B.html)
-
-
-## Another video series on making an OS
-
-[https://www.youtube.com/watch?v=MwPjvJ9ulSc&list=PLm3B56ql_akNcvH8vvJRYOc7TbYhRs19M](https://www.youtube.com/watch?v=MwPjvJ9ulSc&list=PLm3B56ql_akNcvH8vvJRYOc7TbYhRs19M)
-
-
-## Continuation Passing Style
-
-In continuation passing style, a stack is not needed because functions never return, the code is simply compiled into sequences of instructions with GOTOs. This might be an interesting thing to try for an operating system, entirely eliminating issues related to stack overflow, stack smashing, etc. Although it would come at the cost of very ugly code if written with a traditional language, so perhaps a new language could be designed just for this OS?
-
-[https://ericnormand.me/podcast/what-is-a-continuation](https://ericnormand.me/podcast/what-is-a-continuation)
-
-
---
-If I ever make an OS, I will need to have support for stylus input and writing freely over everything.
-
-I wish computers were a lot closer to the pen and paper experience. Where you can take some text or a passage from a book or anything like that and just start scribbling and writing and highlighting, regardless of any specific drawing support in any app.
-
-I would also so very much love to have a text editor that supported creating pages on an infinite plane.
-
-Basically like a neverending desk, where you can make pages of any size and format, organize them how you'd like, draw on them, rearrange them, etc.
-
-But then also combine this with the power of computers where nothing is concrete. You can drag and drop text from one page to another, split pages up to reorder things, have infinite undo, modify images on the fly, etc.
---
-
-[PROGRAMMING FROM THE GROUND UP AN INTRODUCTION TO PROGRAMMING USING LINUX ASSEMBLY LANGUAGE](https://programminggroundup.blogspot.com/)
-
-
-## Notes on Programming in the OS
-
-When programming, you should always be able to jump to source code of any libraries you use, as if it was part of your project. If you call `printf` from `stdio.h`, for example, you should be able to just jump to its definition/implementation.
-
-## Notes on a Shell
-
-Is there another way to handle shell-based input that doesn't require ugly escaping of special characters?
-
-It would be nice to be able to write something akin to `cp -r Downloads/Dir With Spaces Documents/` instead of needing to escape the spaces (`cp -r Downloads/Dir\ With\ Spaces Documents/`) or quote the whole string in question (`cp -r "Downloads/Dir With Spaces" Documents/`).
-
-It's not so much that there are scenarios that quoting would be impossible, it's more that I'd rather just not have to worry about the need to do it in the first place.
-
-The end goal would be to make the system as "user-friendly" as possible in so much as the user interacting with the shell doesn't have to think about such simple shell-specific details as this, and can just type what they mean without worrying.
-
-## Notes on File Managers
-
-> im very surprised that no file manager has a method to open a file for /viewing/ (eg double click) or for /editing/ (eg alt+double click), and have two context menu options for these two common actions
-> instead i spend too much time going open with.... and then not knowing what its going to default to next time, and end up opening an image i wanted to view in gimp, or a html i wanted to edit in firefox
-
-[https://merveilles.town/@noa/109591421469751580](https://merveilles.town/@noa/109591421469751580)
-
-## Helpful Resources
-
-[Software Unscripted: Scratch-Building an Operating System with Steve Klabnik](https://podcasts.apple.com/us/podcast/scratch-building-an-operating-system-with-steve-klabnik/id1602572955?i=1000594645400) ← This is also useful for "C package manager" ideas.
-
-## Notes on File Systems
-
-[Gefs - a new CoW filesystem for Plan9](https://orib.dev/gefs.html)
diff --git a/content/garden/permacomputing.md b/content/garden/permacomputing.md
@@ -3,25 +3,18 @@ Summary: Permacomputing
# [%title]
-[← Back](./)
-
-
Permacomputing is an approach to computing inspired by permaculture, aiming to be more sustainable than our current consume-and-throw-away approach to building hardware and software systems.
-[https://permacomputing.net/](https://permacomputing.net/)
-
+* [https://permacomputing.net/](https://permacomputing.net/)
"Permaculture is an approach to land management and settlement design that adopts arrangements observed in flourishing natural ecosystems"
-[https://en.wikipedia.org/wiki/Permaculture](https://en.wikipedia.org/wiki/Permaculture)
-
+* [https://en.wikipedia.org/wiki/Permaculture](https://en.wikipedia.org/wiki/Permaculture)
It is related to Solarpunk which is a lifestyle movement and genre of art and fiction that envisions how the future might look if humanity adopted solutions that emphasised sustainability and human impact on the environment, in which humanity is re-integrated with nature, and where technology is used for human- and eco-centric purposes (as opposed to capital-centric).
-[https://www.re-des.org/a-solarpunk-manifesto/](https://www.re-des.org/a-solarpunk-manifesto/)
-
-[https://www.appropedia.org/Solarpunk](https://www.appropedia.org/Solarpunk)
-
+* [https://www.re-des.org/a-solarpunk-manifesto/](https://www.re-des.org/a-solarpunk-manifesto/)
+* [https://www.appropedia.org/Solarpunk](https://www.appropedia.org/Solarpunk)
Permacomputing aims to:
@@ -48,54 +41,32 @@ It combines the ideas of frugal computing (using computational resources only wh
## Some Permacomputing Technologies
-[The UXN Ecosystem](https://100r.co/site/uxn.html)
-
-[CollapseOS](http://collapseos.org/)
-
+* [The UXN Ecosystem](https://100r.co/site/uxn.html)
+* [CollapseOS](http://collapseos.org/)
Infrared ports and audio-cable-based data communication. They might be slow but they are simple and easy to hack on. (NOT Bluetooth. Anything but Bluetooth.)
## Resources
-[Permacomputing 2020](http://viznut.fi/texts-en/permacomputing.html)
-
-[Permacomputing Update 2021](http://viznut.fi/texts-en/permacomputing_update_2021.html)
-
-[XXIIVV Wiki on Permacomputing](https://wiki.xxiivv.com/site/permacomputing.html)
-
-[Unplanned Obsolescence: Hardware and Software After Collapse](https://kurti.sh/pubs/unplanned_limits17.pdf)
-
-[A pluriverse of local worlds: a review of Computing within Limits related terminology and practices](https://computingwithinlimits.org/2021/papers/limits21-devalk.pdf)
-
-[Regenerative Computing: De-limiting hope.](https://computingwithinlimits.org/2018/papers/limits18-mann.pdf)
-
-[Abstraction, Indirection, and Sevareid's Law: Towards Benign Computing](https://computingwithinlimits.org/2015/papers/limits2015-raghavan.pdf)
-
-[Frugal Computing](https://wimvanderbauwhede.github.io/articles/frugal-computing/)
-
-[Rustic Computing](https://moddr.net/rustic-computing/)
-
-[The 100 Year Computer](https://thedorkweb.substack.com/p/the-100-year-computer)
-
-[Larry Wall's Quest for a 100-Year Programming Language](https://thenewstack.io/larry-walls-quest-100-year-programming-language/)
-
-[CivBoot](https://github.com/civboot/civboot)
-
-[Simple Systems Manifesto](https://communitywiki.org/wiki/SimpleSystemsManifesto)
-
-[Maximalism and Virtualism](http://viznut.fi/texts-en/maximalism_virtualism.html)
-
-[Design for Disassembly and Deconstruction](https://www.ceguide.org/Strategies-and-examples/Design/Design-for-disassembly-deconstruction)
-
-[Collapse Informatics and Practice: Theory, Method, and Design](https://www.researchgate.net/publication/262276832_Collapse_Informatics_and_Practice_Theory_Method_and_Design)
-
-[On Cosmotechnics For a Renewed Relation between Technology and Nature in the Anthropocene](https://www.academia.edu/35561477/On_Cosmotechnics_For_a_Renewed_Relation_between_Technology_and_Nature_in_the_Anthropocene)
-
-[Simple Made Easy - Rich Hickey](https://github.com/matthiasn/talk-transcripts/blob/master/Hickey_Rich/SimpleMadeEasy.md)
-
-[Re-evaluating technology](https://adactio.com/journal/19125)
-
-[A New Old Idea](https://systemstack.dev/2022/12/new-old-computer/)
-
-[Tools For Thought by Howard Rheingold](https://www.rheingold.com/texts/tft/)
+* [Permacomputing 2020](http://viznut.fi/texts-en/permacomputing.html)
+* [Permacomputing Update 2021](http://viznut.fi/texts-en/permacomputing_update_2021.html)
+* [XXIIVV Wiki on Permacomputing](https://wiki.xxiivv.com/site/permacomputing.html)
+* [Unplanned Obsolescence: Hardware and Software After Collapse](https://kurti.sh/pubs/unplanned_limits17.pdf)
+* [A pluriverse of local worlds: a review of Computing within Limits related terminology and practices](https://computingwithinlimits.org/2021/papers/limits21-devalk.pdf)
+* [Regenerative Computing: De-limiting hope.](https://computingwithinlimits.org/2018/papers/limits18-mann.pdf)
+* [Abstraction, Indirection, and Sevareid's Law: Towards Benign Computing](https://computingwithinlimits.org/2015/papers/limits2015-raghavan.pdf)
+* [Frugal Computing](https://wimvanderbauwhede.github.io/articles/frugal-computing/)
+* [Rustic Computing](https://moddr.net/rustic-computing/)
+* [The 100 Year Computer](https://thedorkweb.substack.com/p/the-100-year-computer)
+* [Larry Wall's Quest for a 100-Year Programming Language](https://thenewstack.io/larry-walls-quest-100-year-programming-language/)
+* [CivBoot](https://github.com/civboot/civboot)
+* [Simple Systems Manifesto](https://communitywiki.org/wiki/SimpleSystemsManifesto)
+* [Maximalism and Virtualism](http://viznut.fi/texts-en/maximalism_virtualism.html)
+* [Design for Disassembly and Deconstruction](https://www.ceguide.org/Strategies-and-examples/Design/Design-for-disassembly-deconstruction)
+* [Collapse Informatics and Practice: Theory, Method, and Design](https://www.researchgate.net/publication/262276832_Collapse_Informatics_and_Practice_Theory_Method_and_Design)
+* [On Cosmotechnics For a Renewed Relation between Technology and Nature in the Anthropocene](https://www.academia.edu/35561477/On_Cosmotechnics_For_a_Renewed_Relation_between_Technology_and_Nature_in_the_Anthropocene)
+* [Simple Made Easy - Rich Hickey](https://github.com/matthiasn/talk-transcripts/blob/master/Hickey_Rich/SimpleMadeEasy.md)
+* [Re-evaluating technology](https://adactio.com/journal/19125)
+* [A New Old Idea](https://systemstack.dev/2022/12/new-old-computer/)
+* [Tools For Thought by Howard Rheingold](https://www.rheingold.com/texts/tft/)
diff --git a/content/garden/productivity-tips.md b/content/garden/productivity-tips.md
@@ -1,32 +0,0 @@
-Title: Personal Productivity-Sans-Burnout Tips
-Summary: Personal Productivity-Sans-Burnout Tips
-
-# [%title]
-
-[← Back](./)
-
-
-End a session with clear next steps of what to do next: e.g. Know what needs to be implemented next in software, or know what comes next in a story or essay. Do not exert all energy at once. Stop when spirits are still high and the path ahead is clear.
-
-Control the scope of projects. Break things into smaller chunks and focus on those that will produce results quickly instead of worrying about the whole picture.
-
-Create habits around mundane parts of life to make room for creative thinking.
-
-Always have the ability to write down ideas and notes anywhere.
-
-Always have several problems or projects active for your subconscious to ponder.
-
-Apply new concepts/ideas/solutions to these whenever you encounter them. These can be material (e.g. How do I implement this feature?) or immaterial (e.g. How can we improve equality in society).
-
-Save information you come across that inspires, intrigues, or seems useful.
-
-Externalize checklists, mundane tasks, appointments and reminders to a more appropriate medium (notebook, notes or calendar app, etc).
-
-Save old ideas and projects even if they have "failed". They might still come in handy in the future.
-
-Design a space that encourages productivity and minimizes distraction (but don't fuss about making it perfect).
-
-## Helpful Links
-
-[https://www.raptitude.com/2022/08/how-to-get-started-when-you-just-cant-get-started/](https://www.raptitude.com/2022/08/how-to-get-started-when-you-just-cant-get-started/)
-
diff --git a/content/garden/text-editor.md b/content/garden/text-editor.md
@@ -1,52 +0,0 @@
-Title: Text Editor
-Summary: Text Editor
-
-# [%title]
-
-Ideas for a text editor project
-
-* no modes
-* syntax highlighting
-* mildly scriptable
-* cut copy and paste
-* search and replace / regex
-* open large files without hanging
-* deal with long lines too
-* persistent workspace
-* doesn’t become difficult if i have 1000 files open at once.
-* a better interface paradigm than “open” and “closed” files and a million tabs
-* just closes without asking dumb questions in infinite sequences of dialogues
-* well defined hypertext format with proportional fonts for comments and documentation.
-* elastic tabstops
-* “command palette”
-* eval selection or line, replace with result or print result on next line
-* literate programming support
-* tab completion snippets
-* a quick easy way to define tab completion snippets
-* multiple cursors
-* clipboard history/visible clipboard
-* permutations on selection sets
-* minimap/zooming
-* a text editor should just let me type as normal without trying to "guess" what I want, thinking it's smarter than me and sabotaging me.
-
-[https://mortoray.com/2016/06/14/the-simple-things-i-want-in-a-text-editor/](https://mortoray.com/2016/06/14/the-simple-things-i-want-in-a-text-editor/)
-
-
-(From: https://merveilles.town/@zens/108651671078029864)
-
-* display files in a grid, similar to Safari
-* no concept of open files, just active and sleeping?
-* files backed by some VCS, so you can easily open any past version of the file, make it current, etc.
-* perhaps keep files associated with a project in tabs for quick switching, unless there are too many?
-
-## Clojurecember December Adventure
-
-During December, 2022, I attempted to learn Clojure and set myself the project of building a text editor. Not having known any Clojure, I picked a commonly recommended GUI framework called Seesaw. It even had a text editor as one of its examples!
-
-Unfortunately, it was just a bit too limiting to do what I wanted it to do. It's limited to very basic text editing, pretty much the kind of stuff you have available in a textbox in the browser. Nevertheless, I did have some new/improved ideas as a result:
-
-* Line numbers aren't really that useful. A current/total line count might be, but the line count on the left is not really that useful outside of editors like Vim or linking to specific lines like on GitHub or other code collaboration tools.
-
-## Helpful Resources
-
-[TextEditors.org](https://texteditors.org/cgi-bin/wiki.pl)
diff --git a/content/garden/textdb.md b/content/garden/textdb.md
@@ -1,9 +0,0 @@
-Title: TextDB
-Summary: TextDB
-
-# [%title]
-
-A text-based database somewhere in between plain text and recfiles.
-
-[Recfiles](https://chrismanbrown.gitlab.io/28.html)
-
diff --git a/content/garden/watterson.md b/content/garden/watterson.md
@@ -1,10 +1,8 @@
-Title: SOME THOUGHTS ON THE REAL WORLD BY ONE WHO GLIMPSED IT AND FLED
-Summary: SOME THOUGHTS ON THE REAL WORLD BY ONE WHO GLIMPSED IT AND FLED
+Title: Some Thoughts On The Real World By One Who Glimpsed It And Fled
+Summary: Some Thoughts On The Real World By One Who Glimpsed It And Fled
# [%title]
-[← Back](./)
-
Bill Watterson
Kenyon College Commencement
@@ -119,4 +117,4 @@ I wish you all fulfillment and happiness. Congratulations on your achievement.
Bill Watterson
-Mirrored from: web.mit.edu/jmorzins/www/C-H-speech.html
+Mirrored from: [web.mit.edu/jmorzins/www/C-H-speech.html](web.mit.edu/jmorzins/www/C-H-speech.html)