# Retreat at the recurse center
This file tracks ideas and links and notes related to my retreat at the recurse center.
See also:
- [[My retreat at RC - Volitional Muscles - Why]]
- [[My retreat at RC - Volitional Muscles - What to do]]
## Goals
I want to reconnect with the more inspired and wild side of my thinking, which is both avant-garde yet rooted in pragmatism (see [[Pragmatism in software development]])
### Get better at writing
I want to make the most of my time by taking notes and writing about my discoveries. I want to come up with a solid tool driven workflow (see [[My Obsidian workflow]]) to be able to generate the best content.
This would be:
- daily writing, and a small public writeup of the days activities. Maybe this could be a twitter thread? Maybe some internal write up. I want to convey an interesting thought (not just a write up).
- at least 3 or 4 blog articles a week. Dedicate one hour a day to writing.
But beyond aiming for quantity, which I seem to have gotten quite a bit better at using my Obsidian workflow, it might be good to aim for quality and format. I am interested in those beautiful computational essays such as [[Bret Victor]]'s or [[Andy Matuschak]]'s. These require design (in figma?) and programming and writing.
It would also be fun to do this collaboratively, for example with a shared published obsidian vault. This could be quite exciting if people contribute knowledge based articles. It would probably require quite a bit more editing compared to running your own vault, as you can't just easily leave things in a dirty state to clean up later. There are quite a few projects with shared vaults online though, for example [Obsidian Hub](https://publish.obsidian.md/hub) . Here is the CONTRIBUTING document: [CONTRIBUTING - Obsidian Hub - Obsidian Publish](https://publish.obsidian.md/hub/CONTRIBUTING) (see [[Obsidian Hub]]).
### Thoughts about scope
How much can you realistically achieve in 3 months? I have many big scope ideas, for example, experimenting with writing an operating system. If you spend a full week on such a project, just learning, can you get somewhere? What about 2 weeks? Is that enough to speed run through an OS course? I never had dedicated 9-5 time to tackle such project, it might very well be possible, it might very well be out of bound.
I am going to look at blogs of recurse alumnis to get a sense of what different individuals were able to achieve. I should home in on people of similar skills as me and see what they worked on.
## Collaboration
Collaboration is going to be the main aspect of RC, and also something that I don't have in my daily life.
I hope to work on my [[Manifesto for CLI utilities]] and have people help out, and in order to do that, I need to clearly communicate what I have in mind. Because the system is so holistic and thought out in my head, it is going to be important to keep an open ear and understand what shortcomings my explanations and concept have. Also, be open for improvements, and see what parts people want to collaborate on. Their interests are not the same as mine (!).
In case it doesn't exist (I'm sure it does), organizing a daily writing session where people just sit together to write.
### Collaboration for learning
One way collaboration / a group of peers is important for learning is that partners can provide a very intense spaced repetition system, asking you deep questions (and being able to gauge how well you answered), and ask you ever harder prompts. This is also probably why teaching other people works so well. The act of teaching makes you characterize the knowledge to reinforce, and create series of prompts that elicit the lightbulb moment in the learner. (see [[ZK - Teaching Requires Creating Good Prompts]], [[ZK - Studying With Partners is Like Having a Spaced Repetition System with Challenging Prompts]]).
This will be useful to bring up if I join a learning group for a certain topic. I would love to find people who either already use Spaced Repetition (I'm honestly a complete noob, since I never really stuck with it for long enough to see an effect), or discover the system together.
## Ideas
### Ideas since RC started
- Write a blog post everyday
- Build a voting booth for our cats with Embedded Rust and the microbit board
- Write documentation for [[pgchameleon]]
- Learn [[Alloy]] 6
- Go through some real world [[Haskell]] project
- Work through [[BOOK - Better Web Typography for a Better Web]]
- Write a [[Idea - SQL Test Data Generator]]
- Potentially do some [[leetcode]] at some point
### Learning projects
Big "tutorial" like projects (basically building something according to instructions):
- Operating system
- [[Prolog]] compiler
- [Container Planning Part 1](http://quantumprolog.sgml.io/container-planning-demo/part1.html#the-final-load-planning-program)
- [[Datalog]] engine
- [[Type systems]]
- Distributed job queue with [[Raft Protocol]], see [[Distributed Job Queue for 2D printers]]
- Learn about [[Monad Transformers]], [[Lenses]], [[Free Monads]] more higher order theory
- Work through [[BOOK - Optics by Example]], or [[BOOK - Category Theory for Programmers by Bartosz Milewski]]
- Write a firmware using an [[RTOS]]
- Implement an RTOS
- Look at the [[Zig Language]] and its [[Metaprogramming]] capabilities
- There is some embedded work [GitHub - ZigEmbeddedGroup/microzig: Unified abstraction layer and HAL for several microcontrollers](https://github.com/ZigEmbeddedGroup/microzig)
- [[R Shiny]] visualizations
- [[Emacs Lisp]] plugin writing
- [[Obsidian]] plugin writing
- Build something with [[SystemD]]
- Build something with [[io_uring]]
- Go through [Typing Haskell with Haskell](https://web.cecs.pdx.edu/~mpj/thih/thih.pdf) (see [[Type systems]])
### Implement some algorithms
- Myers diff algorithm (see [[BOOK - Building Git]])
- Conflict resolutions in [[Git]]
- Burrows Wheeler Transform, because of the article in [[ACM Communications]]
### Experiment with building things under load
- How many writes/reads can you do on postgresql in different docker sizes, etc...
- Learn how workloads behave on different cloud instances
- Queueing behaviours / rate limiting / load control and bandwidth control (feedback control) [[Queuing Theory]]
### Read some code bases
See also [[Codebases]].
- sqlite
- MySQL
- Postgresql
- Haskell compiler
- Sbcl / ccl
- Racket
- Git
- LSP
- Vscode
- eMacs lisp
I'm going to call these [[Learning projects]]. These might be interesting to tackle with one or two people of similar speed and skill. If done alone, they probably won't fit the spirit of recurse center anyway
### Read / work through some books
There are a number of books that would be interesting to work through with other people, in a reading group for example:
- [[BOOK - Structure and Interpretation of Computer Programs - 2nd Edition - Harold Abelson Gerald Jay Sussman Julie Sussman]] (actually finish it)
- [[BOOK - Paradigms of Artificial Intelligence Programming - Peter Norvig]] (finish some of the meatier projects)
- [[Notes - Software design for flexibility]]
### Little experiments
This is a list of little things I always wanted to get done or look closer at, probably done in a day or two.
- [[Sound-based debugging]]
- Generative art, in particular with [[VCV Rack]] and [[Hydra Visual Synthesizer]]
- build something with [[io_uring]]
### Real projects
Then there are the ideas that are real projects, and finding people to collaborate on them. Some of it is grunt work, but at the core they could be have transformative ideas.
- Finish [[PROJ - Raza - keep history forever]]
- Building a blog in [[Haskell]] and a [[Obsidian Plugins|plugin]] to publish straight to it from [[Obsidian]]
- Build a executeprogram.com clone to learn [[Haskell]] or [[Rust]], for other students to use as well
- [[Idea - Make rocketbook cards with metadata scanning]]
- Make sixty minute mixits in nextjs or so
- Build something in obsidian, maybe some hypercard related thing?
- Build a [[MySQL]] <> [[PostgreSQL]] synchronization tool
- Finish the [[Wordpress]] actions logger
- [[Wordpress]] [[GraphQL]] compiler / API compiler
- Build a text mode spreadsheet with cloud capabilities
- CLI/web tool scaffolding (basically voodoo)
- Building a units / tagged types system in [[Typescript]]
- networked game in text mode (how to make viral?)
- [[Database Query Languages]] builder for more complex [[SQL]] structures
- How do you make it extensible
- Can you use that to easily build [[Funnel Analytics]]?
- See [[TTC - Wordpress Query Builder]]
- Build a minicomputer that runs basic on boot, like the [[Thomson MO5]]
- Maybe using [[Zig]]? [Zig in production](https://youtu.be/124wdTckHNY)
- Build the [[Elden Ring]] story generator ([[Generative Art]]) / game using [[minikanren]]/[[Prolog]]
- [[Modular synthesizer|Synthesizer]] modules for [[VCV Rack]] or [[Cherry Modular missing modules]]
- Build some patches for [[Daisy Patch]] or [[uOC Eurorack Module]]
- [[Idea - Spaced repetition server]]
- [[Idea - Build a much better interactive jq]]
### Conceptual work / Research
I want to refine some ideas I feel are ripe to be merged together regarding CLI utilities.
- [[Manifesto for CLI utilities]]
- Probabilistic programing of UX behaviours / user behaviours [[Probabilistic Programming]]
### Personal Knowledge Management projects
- [[IDEA - PKM Creative Incident Creator]]
- [[IDEA - Obsidian Plugin to Record Note Editing Dates]]
- [[Idea - Obsidian Native Git Integration]]
- [[Idea - Spaced repetition server]]
### Teaching/writing projects
These are about building things in order to teach.
- Book/Zine about concurrency
- Book/Zine about BASIC gamedev, see [[Old BASIC books]]
- Building promises / compiler / scheduler stack in SICP
- Making a vault just for recurse center and publish it everyday