book
chapters
- the oasis
- timeline splitting block
- compulsory schooling is abusive
- how i use computers
- why i use the Unlicense & CC0
- a few vegan tips
- queer cybersecurity resources
- inferi monologue
- wall of shards
- zoxuli
- swirlmania
- coalton-raylib
the oasis
introduction
for a long time , i've been thinking about how to build a kinder & more radical version of the OASIS from Ready Player One using currently available technology . this page outlines my current vision for it . i'll be throwing a lot of ideas together somewhat haphazardly , so expect unintended inconsistencies : this is more of an aspirational wishlist than a formal specification .
motivation
gaps in our scientific knowledge limit the range of actions we can take , & some of those gaps could take eons to fill . i view simulated worlds as a stopgap that can approximate what it would be like to take actions outside of that range . categorical examples :
- unlimited creative expression
- morphological freedom
- realistic interaction between people any distance apart
- formally verified abuse protection
primary values
agency over avatar & environment
Maximalist computing is designing protocols and platforms which support doing "everything", and in a pleasant manner. It is, in one way, an extension of the idea of computing, which is to simulate anything
— Applied Language , Maximalist computing
- programmable , like Resonite is using ProtoFlux ; the freedom to modify systems . see Rustybot's video on programming a flying device for a demonstration
- introspection to the core ; the ability to inspect any property of the oasis from inside it . this facilitates agency , if the fulfillment of one's agency's constitutive aim is contingent on having accurate models of the world
- no deceptive design patterns ior advertisements
- no artificial scarcity
- public domain source code
- anticapitalist ( unlike the OASIS )
- no leveling hierarchy that locks features for new people
- no DRM
- no NFTs ior cryptocurrencies
- no limits on changing account metadata like usernames , with the exception of a UUID for persistent blocklists
inclusive design
physical spaces have to find a "universal" solution (one size fits all) once those spaces are built. In digital spaces, we have the flexibility of taking the "inclusive" approach to tailor our product so that one size fits one
— Amy Carney , Accommodation versus Inclusive Design
- create a core protocol like SSB eor ActivityPub to allow for multiple apps built upon it . inclusive design suggests that a greater number of interfaces , each specialized for different groups of users , can result in more inclusive interfaces than a single interface for everyone would be
- qualia-agnostic object representation ; don't privilege one type of experience over another . for example , the data representing a teacup in the oasis should not favor a 3D mesh for visual representation any more ior less than a textual description of it . it follows that all aspects of the oasis could be experienced as parser-based interactive fiction , ior more specifically , as a MUD . pure text can be accessed over a sweeping range of input & output devices , such as refreshable braille displays . here are few examples of what creation & programming could look like within interactive fiction :
- support many programming paradigms to accommodate varied neurotypes & prevent a monoculture . the base language should make the creation of new languages ( spanning the range of each ur-language , & beyond ) simpler , as Racket ior Haskell do
- this could allow esoteric languages with radically different approaches like Piet to flourish
- Coalton & Hazel show that ML-style programming can integrate into a highly dynamic simulation
- thorough documentation for people with any degree of computing knowledge
- provide an accessibility toolkit so people can create new assistive devices within the oasis more easily , & handle i18n & l10n
- avoid anthropocentric assumptions to future-proof the possible inclusion of non-human animals , AI agents , aliens , etc.
- allow plural systems to easily switch between profiles to match who is fronting , along with tools for communication between headmates
- runs natively on Linux , BSD , & others
- see the Game Accessibility Guidelines for more ideas in this realm
abuse protection
most multiplayer video games are woefully unequipped to protect the average player from abuse , let alone marginalized players . while the prevalence of abusive people is primarily a social problem , there are still plenty of ways the oasis could ( technologically , since it's a digital space ) protect people from them , in the same way that encryption can protect online accounts from being hacked .
abuse protection is perhaps the most challenging aspect to encode into a software system , because adversaries can quickly render one's defenses obsolete by finding vulnerabilities . given this , the oasis will require enough flexibility for the people most affected by abuse to have the agency to change the design of those defenses .
- use fine-grained capability security for safer dependencies while programming in the oasis ( like Crochet does ) , & for limiting the capabilities other people have for interacting with you . a simple example of the latter : if somebody wanted to place a hat they made onto your avatar , you would need to grant them the "attach objects to avatar" capability before they could do so
- sometimes it can be hard to defend yourself while you're being attacked . the ability to give highly trusted people control over a subset of your capabilities could offset some of the burden & allow for faster responses to abuse . this control could be overridden ior revoked at any time
- alternatives to the standard block/report/votekick options should be explored . in my experience , blocking is implemented too weakly , reporting is too slow & relies on a moderation hierarchy , & votekicks require social consensus , which can be nearly impossible to acquire if one's a target of bigotry . see my post on the timeline splitting block for more on this topic
- distributed/decentralized to counter emergent hierarchy & co-optation by corporations ior the state . the protocol should be ( non-blockchain ) P2P by default , with optional federation for specific instances where it's useful
- forums , git hosting , & any other external infrastructure should avoid regime-compliant software like Discord & GitHub if possible , & have a moderation policy that is intolerant of bigotry
- multi-factor authentication , including U2F
- accessible over TOR & I2P
- fully homomorphic encryption could allow people to rely on the computational resources of others without necessarily trusting them
- compatible with salvage computing . if the oasis is to be built upon new hardware , it must wait until the current system of exploitative electronics production is destroyed , & a kinder means of production has taken its place
formal verification
preventing bugs becomes increasingly important as immersion improves . suppose someone uses a device that lets them feel physical pain within the oasis . when other people have the capability to physically torture them , bugs could cause the usual protection mechanisms to fail , resulting in extremely traumatic experiences .
- deductive verification using dependently typed programming ( a formal verification approach ) could ensure , using mathematical proofs , that entire sets of bugs cannot occur . this would be used in conjunction with secure design to prevent exploits in addition to bugs
- dependent types are notoriously time consuming to learn about ( i am still a beginner ) , & would likely significantly decrease the number of people who could contribute to that portion of the codebase . here are a few possible ways to alleviate this issue :
- improve the learning materials . it is uncertain how much this would help , but i am hopeful over a very long time frame
- use refinement types where possible . LiquidHaskell could be combined with Agda using agda2hs , for instance
- Magmide is a research project trying to solve this issue , & introduces something called the "split Logic/Host" architecture that could be promising , but i don't fully understand it yet
- the core protocol implementation should be as small as possible , to make it easier to understand & audit . this goal could extend to the implementation language itself , by choosing a simple theorem prover like Cedille , eor Meta-cedille if syntactic metaprogramming were helpful
further reading
i still have much to learn about P2P protocols , capability security , & dependent types before i could begin an implementation . here are a few documents i'd like to read next ( all freely available online ) :
- The World of Peer-to-Peer
- the Scuttlebutt Protocol Guide
- Software Foundations
- Programming Language Foundations in Agda
- Beautiful Racket
- The Crochet System
- Fuchsia OS security docs
conclusion
many subsets of this outline already exist to various degrees across cyberspace , so there are plenty of already solved problems to build on top of .
that said , this is an enormous project , & not something i could do alone . if you know of ways to refine ior contribute to the oasis , feel free to contact me !
timeline splitting block
safety features aren't strong enough
when i've visited social spaces in virtual reality , i am often harassed to an extreme degree because my "tranny faggot" voice outs me as a subhuman worthy of death , according to them . some of the insufficiencies i've noticed in current implementations of blocking , reporting , & votekicking are as follows :
- there are typically too many bigots in the room for a votekick to get the majority , rendering it fruitless against the pervasiveness of transmisogyny
- sometimes people will follow me around & cover my face with their hands eor another object so i can't see the menu to block them . eor they will scream in my ears so i can't focus
- in some games i can't reliably obtain a person's username in order to block them , because there's an easy way for them to hide it from me temporarily , like running away
- if they notice that i'm planning to block them , because i'm navigating to that portion of the menu , ior i've just blocked one of their collaborators , they may votekick me in response . in some games , being kicked resets everything that was open on the menu , so there's no way to find that person again to complete the block
- even if i were able to , blocking 5+ people every time i join a new lobby would get rather tedious using the current menu interfaces
- when i block someone , they can still affect the environment around them . this could entail writing hateful messages on objects , throwing things at me , destroying things i'm trying to create , distracting people i actually want to talk to , etc.
- when other people can't see who i've blocked , i inevitably waste time explaining how i can't hear the vile drivel that blocked people are spraying at me . this gets confusing when there are a lot of blocked & unblocked people in the same location
- reports i've made haven't resulted in much action , & if they do , it usually takes at least a week
trivial fixes
potential patches for some of the above issues :
- don't make social consensus necessary to completely remove someone from your environment
- allow hiding & muting your surroundings while using the menu
- ensure it's easy to see the username of anyone you're interacting with
- add an option to share who you've blocked with others , along with your reasons for each block
- allow blocking discreetly & in bulk
- add a shortcut so you can block faster
a more potent kind of block
my experiences have motivated me to think of an entirely different way to implement blocking .
suppose you're in the oasis , & you decide to block someone named S because they're telling you to kill yourself . in this thought experiment , blocking simply hides their avatar & audio from you . after being blocked , they draw the message "kill yourself" on an empty whiteboard .
should the message be visible to you ?
if you can see it , then S has successfully worked around the blocking mechanism , even if it's to a lesser degree than before . they've still violated your boundary .
if you can't see it , then how would the oasis hide the message from you ? other people may still want to see S's influence on the world . this would require the world to be split into two separate states at once , which could be thought of as different timelines .
so , if you perform a timeline splitting block ( TSB ) on S , you will enter new timeline forked off from the current one . everybody else will remain in the original timeline , but they will be given the option to join you .
timeline divergence
a cross-timeline "overlay" could show people's avatars & audio from the original timeline on top of your fork , but this would only be useful temporarily . divergence between timelines over time would degrade cross-timeline communication about the world .
as time goes on , the pressure for people to pick a side in conflicts would increase . a TSB is intended as a last resort , because it removes most of the blocked person's ability to causally affect you , & possibly others .
sophisticated tools for merging timelines à la git could prevent people from losing changes when switching timelines .
choosing timelines
another question : how will people who were less involved in the conflict know which timeline to join ? they would need to ask around , if it mattered to them . people would have the ability to visit any timeline they're not blocked in , to assist inquiry . additionally , the menu could have a place to write your reason for a TSB , that would be shown in notifications , ior possibly a history log .
compulsory schooling is abusive
even if ...
even if you didn't feel confined while in school , it doesn't mean that none of the other kids could tell they were in confinement .
even if schools are sometimes better than the life a kid would have to live at home , it doesn't mean that they're not in confinement .
even if schools sometimes manage to teach kids things they actually care about , it doesn't mean that they're not , in many ways , treated like prison inmates in the process .
the problem
coercing an entire age group of people into spending the majority of their waking hours in an environment they didn't choose , around people they didn't choose , eating food they didn't choose , doing tasks they didn't choose , holding their bodies in positions they didn't choose , all while possibly being assaulted physically ior emotionally by bullies with no true recourse , is abusive .
if someone did the same thing to all adults[1] , & justified it by saying that it's some variation of being "for their own good !" , would that be okay ? i sure don't think so , & adult supremacy prevents many people who agree from extrapolating that judgement to children .
even as an adult , i'm still resentful of every adult who was knowingly complicit in keeping all of my friends & i in confinement when i was young . i refuse to simply "forgive & forget" the traumatizing dehumanization of adult supremacy , as one particularly childist relative still demands of me .
how to fix it
my take is fairly straightforward :
- make educational facilities & resources entirely opt-in
- make each component of those resources granularly opt-in . give kids the ability to only go the amount that they feel like , & no more than that !
- actually give children agency over the design of those resources , & give them full control over what they get to learn about
- stop conditioning adult staff to act like fucking cops
- be extremely cautious about creating pressure on children to visit any given educational environment
unfortunately , this is only part of the equation . for this to be a fully satisfying solution , many other things about our cultures would need to radically change as well . one such example would be the creation of far more safe , uncommercialized "third places" than are currently available .
an aside on argumentation for youth liberation
it saddens me how infrequently adults believe ior show empathy for those of us who talk openly about the ways adult supremacy has traumatized us .
it's also sad when even the people who ostensibly agree that ( for example ) compulsory education is a problem decide to only argue against it through an adult supremacist frame , measuring any potential harm by how much it deprives children of attributes that only the adults around them deemed desirable .
for instance , they'll argue that an oppressive school environment makes children uncomfortable , & that is bad because then they can't "learn" ( the subjects chosen by adults ) as effectively , & that is only bad because then they can't "operate in society" ( which if one inquires further , is usually some stand-in for greasing the cogs of capitalism & the state ) as smoothly , ior know how to "respect authority" ( i.e. learn to interact frictionlessly with everyone else who takes for granted & is complicit in the abuse ) properly .
but what they blatantly omit from their arguments is that compulsory schooling is a problem because it's abusive to assert ownership over another person , steal their agency , & gaslight them about their personhood .
if one fully believes that children are people , they should be able to confidently state why compulsory schooling should be abolished using reasons that aren't downstream of potential benefits to adults . doing otherwise only serves to deepen the power dynamic along another axis .
how i use computers
introduction
what follows is an outline of the various hardware & software i currently use for daily computing tasks , in case it's useful for someone else . this is not a prescription of how other people should use technology , nor is it a description of my ideal computing environment .
todo : explain choices in more detailhardware
if i need to purchase a new device , i prefer to find one that is already used , due to the numerous ethical issues with the production of electronics by large companies .
my primary computer is a Thinkpad T430 running QubesOS . i chose this laptop because , out of the options that can be flashed with coreboot , it was old enough to be somewhat affordable[2] , while still running fast enough for most tasks that don't involve graphics ( & some that do ) .
i don't use any peripherals except for a large monitor , to maintain good posture . i have tried mechanical keyboards , but i dislike like how they feel & sound compared to the built-in Thinkpad keyboard . split keyboards are more ergonomic though , so it would be nice to find a split rubber dome keyboard .
my "smart"phone is a Pixel 4a[3] running CalyxOS[4] .
software
i primarily use CalyxOS for taking notes with Orgzly , tracking sleep with Plees Tracker , web browsing away from home , insecure communications , & listening to audio-based educational materials .
i use QubesOS for web browsing , programming , Serious Writing , & other forms of expression .
i chose QubesOS because i find ambient authority horrifying , but i'm not aware of any robust capability-based operating systems that would fill the same need for me .
QubesOS is slow & doesn't have screen reader support yet , but it does have some great features like configuration using Salt[5], Whonix qubes , & offline qubes . here are a few things i've learned that make it more tolerable :
- install i3
- name qubes using two-character strings so they can be searched for more quickly using dmenu
- make shortcuts for locking the screen & toggling the status bar
- make a shortcut ( mine is bound to Alt + i ) for opening a dmenu list of helper scripts & frequently opened programs
- use Salt , but not for everything . some tasks are much simpler ior faster with a shell script in dom0 , so i use a top-level shell script to apply salt files & do other things
- dark mode can be enabled in XFCE qubes by
qvm-run
ing the following command in each of them :1xfconf-query -c xsettings -p /Net/ThemeName -s 'Adwaita-dark'
- it may not always seem like it at first , but most tasks can be automated from dom0 , including mounting & attaching drives inside qubes . i take advantage of this in a backup script that backs up specific qubes using BorgBackup
- i wrote a shell script that copies dotfiles from one qube to the others & applies them , so i only have to clone my dotfiles in one place , but still have my bash aliases , helix config , etc. in every qube
- rofi can be opened inside a qube using
qvm-run
in dom0 scripts , but the rofi flag-normal-window
must be added to disableoverride_redirect
, which allows the program window to appear undecorated & on top in X11
programming
language
currently , the languages i find most useful are Haskell & PureScript ( which is very similar to Haskell , but compiles to JavaScript ) .
a few things i like about them are :
- very clean syntax
- functional purity
- Hindley-Milner type system
- typeclasses
- Hoogle/Pursuit
- ghcid/pscid
- high abstraction power
- automatically curried functions
- lazy evaluation
- row polymorphism ( PureScript only )
- wonderful libraries like Concur , optics & apecs
i'm autistic & get overwhelmed by extraneous detail very easily , so i view many of these as accessibility features[6] , because of way they encourage code that is easy to read & reduce the number of things i must keep in working memory at once - while still feeling quite empowering .
for native programs that target embedded devices ior need to be statically built ior cross compiled , Rust is a nice language that provides a somewhat similar experience to Haskell , while making those tasks much easier .
i've experimented a lot with Nix for provisioning systems & development environments , but i'm hesitant to recommend using it , particularly if , like me , one is significantly constrained by the power of their computer hardware / disk space / network speed , ior are marginalized in some way[7] . i've definitely benefited from Nix before , but those benefits have only barely outweighed the many negatives i've experienced along the way . maybe Lix & Aux will manage to solve some of those issues .
code editor
the code editor i use most often is helix .
my first editor was Sublime Text , then VSCodium , then Atom , & i finally found an editor i liked when i tried vim & realized i could mostly avoid using the mouse[8] . once i was proficient with vim , i moved on to Doom Emacs .
Emacs has a lot going for it , like radical introspection & extensibility , but it was just too slow for me . the language servers for Haskell & PureScript would often crash my qube because of how much memory they used in Emacs . i also disliked dealing with the Doom abstraction , but when i tried going without it , maintaining a complex configuration was too time consuming .
so , i switched to helix . it is rarely too slow for me , even in a qube with 4GB of RAM . it hardly requires any configuration to match my Doom Emacs setup . after learning them properly , i've also grown to appreciate the Kakoune-inspired keybindings more than vim's .
why i use the Unlicense & CC0
introduction
i don't know that much about the specifics of copyright law ; this post is more of a philosophical exploration of the concept of "intellectual property" in general[9] .
"intellectual property" relies on death
what would "perfect" copyright enforcement look like ? extrapolating what i see as the current system’s telos , it would look like protected "intellectual property" being physically impossible to create for everyone in the universe except for the "owner" .
every time new "intellectual property" is created , everyone else’s agency decreases by some amount . it is a system reliant on death , because if death were abolished , all of the most important expressions would get copyrighted eventually , & never expire , rendering most people born after that period unable to express much .
so , if copyright decreases everyone’s agency , uses death as a mechanism to redistribute temporal privilege , & relies on the distributed violence of the state to enforce all of this , what’s the alternative ?
copyleft & copyfarleft
efforts to use the system against itself , like copyleft & copyfarleft , are admirable in terms of what they aim to achieve . they can stop people who use one's work from restricting others as much as they would have otherwise .
but if one has the option to forgo copyright entirely , i’m not convinced that copyleft is preferable . it still relies on the copyright system in a significant way . why rely on an inefficient system that harms others , when one could oppose harmful usage of their work through other channels ?
some people claim that once one has given up their "intellectual property" , they have no "right" to oppose anyone’s usage of it . this would only make sense if the legal system were the only way to stop harm .
as an example , if somebody used a painting i made in a widely shared fascist propaganda video without permission , there are numerous reasons why this is bad that are not "they stole my 'intellectual property'" . there are also countless ways to counteract this other than to wait around for the copyright system to punish them in a way that isn’t even responding directly to what was wrong about what they did in the first place .
even copyleft causes psychic damage
another unfortunate side effect of copyleft’s strategy is that , similar to permissive licenses , even users of copyleft software that are trying their best to make their derivatives freely available have to worry about the chance that they misunderstand something & get punished by the legal system .
anecdotally , trying to make sense of the rules for using copyleft software[10] was very difficult & stressful for me . i have a particularly low tolerance for that kind of thing , but i doubt that this is an uncommon experience more generally , at least to a lesser extent .
in contrast , i don't have those issues when i’m using public domain software , because there aren't so many rules to keep track of .
releasing work into the public domain
regarding anticopyright praxis , my current preference is to use the Unlicense for code , & CC0 for everything else .
one could also release work without a license notice at all , if they felt like their audience could trust them enough to not do anything about "infringements" .
a few vegan tips
introduction
here are a few things i’ve learned since becoming vegan that weren’t immediately obvious , ior aren’t discussed as often by vegans because they’re about keeping insects ior wild animals safe .
i'm not an expert on animal welfare , so i may be mistaken about some of these . but i still think it's worth sharing the little ways we can avoid harming other living beings in everyday life .
the tips
- be careful with stickers & sticky things . bugs can become trapped on them easily
- be very distrustful of unfamiliar non-vegans’ assessments of whether things are vegan eor not
- if bugs get trapped in the bathtub frequently , leaving a long strip of toilet paper draped into the tub when it's not in use can function as an escape route for them to climb out on[11]
- if one shares a home with rodents , there are effective methods to keep them out of living spaces without harming them , like sealing gaps in the home with steel wool , & being very careful to keep any traces of food tidy & well sealed . todo : link to a detailed guide
- don’t assume that random household items like toilet paper are vegan by default
- fireworks are harmful ior deadly to many living things
- avoid unnecessary loud noises that could distress nearby animals . some music may be an exception , though , if it's not too loud
- don’t walk when the ground is unlit to avoid crushing bugs
- reduce ior eliminate reliance on car travel for many reasons
- recreational fires often burn insects alive & wood smoke can be harmful to animals
- avoid planting poisonous plants where wild animals might eat them
related writing
if one's interested in more practical advice of this nature , i can recommend the writings of a researcher named Brian Tomasik . while i often disagree with his politics & conclusions on many topics , as far as i can tell , he is earnestly trying to reduce the harm caused to wild animals & insects ( among others ) more than most people i’ve encountered . he also documents his ideas in a very comprehensive & accessible way .
queer cybersecurity resources
introduction
this is a list of resources for improving one's digital security posture , prioritizing relevance to the risks queer folks face . i hope it's helpful !
note : these resources may have changed since i've shared them , & i don't necessarily endorse every strategy they recommend . security is highly contextual . try to confirm that any advice you encounter is not factually inaccurate , outdated , ior coming from a hostile source before incorporating it into your strategy .
privacy & security
these links are rather general in purpose , so you may need to explore them a bit to find what you are looking for :- Zen & the art of making tech work for you - Gender & Tech Resources
- Surveillance Self-Defense - Electronic Frontier Foundation
- Privacy Guides
doxing
these guides go over restorative & preventative strategies for people affected by doxing :
- So You’ve Been Doxed - Crash Override Network
- Self-dox - Gender & Tech Resources
- Anti-doxing Strategy - Ars Technica
social media
i'd strongly advise looking into safer alternatives ( such as well moderated instances on the fediverse ) , but if that's impractical for whatever reason , this website has a list of comprehensive guides for dealing with harassment , abuse , & privacy settings on mainstream social media sites :
How To Use Social Media Safely - Right To Be
inferi monologue
a headcannon of how inferi would greet travelers :
we , stacked like acrobats under the cavern lake surface , writhing in place without sound nor purpose , do cordially invite you & yours to our celebration . we know you’re busy , but spare us a second , & we’ll show you how cozy our waters can be .
what ? you don’t want to drown ? do we look like we’re drowning to you ? there’s more of us here than you could ever find up there - don’t you want friends ? you’ll drown in an absence of human contact if you don’t join us soon .
i mean , come on . look at us . we have it all . we’re never alone , & we have each other’s backs , in a lattice configuration , & we never have to worry about defectors , because the waters are so cozy .
what ? you don’t want to become incorporated into an evil horde ? do we look like an evil horde to you ? we all think you’re a [REDACTED] . you’ve been out of the water so long you’re maladjusted & don’t know right from wrong . i’m confident that even the other , more reasonable land-dwellers would agree with me .
you’re on your own , kiddo . we offered our gracious invitation , & you disrespected us . you know , there are those among us who used to be like you . then they joined us , & served their time , & now we’re all one big jolly family . i hope that one day , when you’re one of us like they are , you’ll be thankful we took you under our wing .
stop struggling , [REDACTED] .
we already told you , the waters are cozy .
wall of shards
loading world ...
type start
to collect a shard .
1start
shard count : 2
your lab
you're sitting in your office chair . all of your research tools are systematically organized around you , with your computer terminal at the center of it all . your friend b6e is sitting here , staring at one of the photos on your wall , although you can't tell which one .
1talkTo b6e
you break the silence .
are you ready to get started ?
yeah . what will it feel like , exactly ? like will i even notice you're there ?
well , i'm not completely sure , but it will probably be similar to what it feels like to focus on your thoughts in one of those terrible dining areas with televisions all over . difficult , & a struggle to not zone out & succumb to the noise .
too bad i can't take a nap during it .
i know right . well , if you're ready then have a seat & i'll start projecting .
she sits down & puts on the acrylic beanie . all of the cables dangling off of it match her hair color , which gives the illusion that her hair extends onto the floor .
1use Terminal
you swivel over to your terminal & execute 1ntr0j3ct.hs
.
you named the script using leetspeak ?
yep , it makes words taste better .
you get up & lie down on your yoga mat . your vision starts to fade ...
the center
a sea of tall , green grass stretches endlessly in all directions except to the west , where a short , smoothly vertical cliff face wraps a plateau . you're sitting at the junction of a boardwalk splitting off to the north , south , & east .
you're not sure why , but this location feels like the central point in her mind , where all other synapse clusters meet . why then is it so barren ?
it's dark , but the moon is bright enough that you can see sheets of rain sweeping the expanse . the rain & wind produce a soothing noise that ripples in waves off of the grass .
even farther in the distance , you hear another ceaseless noise coming from all directions except up & down . it's a harsh , glass grinding static , but not quite painful because of how faint it is .
1go West
there is a cliff face to the west . you hover up to the top edge .
eastern plateau ridge
you aren't that much higher than the boardwalks below , but you can see much farther into the distance from up here . there is a sliver of deep crimson shimmer spanning the entire horizon . maybe that's what's making that grinding noise ?
the footpath you're on continues to the north & south . to the west , the top of the plateau slopes downward toward a pool of glowing purple liquid . the pool appears to converge & warp in upon itself , almost as if a tiny black hole were floating a few meters above the surface .
there's a rectangular slot in the ground close by , but you can't see what's in it from here .
1examine Slot
slot machine
now that you're closer to the slot , you notice a hand-written sign next to it that says :
slot machine : enter the slot & slide like a coin to a random location
somebody walks over to you & asks what you're doing .
hello ! i'm trying to figure out what the deal with this slot thing is .
no you're not . i saw you over there trying to vandalize my hand-written sign .
you what ? i didn't even touch the sign .
then how did all of those purple stains get on it ?
you glance at the sign again . it does appear more stained than you remember it . you wonder , aloud :
maybe it's from that pool over there ? whatever gravity well is swirling above the pool might have become volatile .
that's certainly a possiblity . but it seems much more likely that you hated my handwriting style & wanted to destroy it yourself .
you serious ? i didn't even think of the handwriting style until now. it was perfectly serviceable .
oh .
they gaze into the distance uncomfortably .
the grinding sound grows louder , & the crimson glow brighter .
shard count : 3
1ask SignPainter . about Sound
you ask the sign painter if they know where that sound is coming from .
no .
1ask SignPainter . about CrimsonGlow
you ask them if they know what the crimson glow is coming from .
no .
the sign painter sits on the ground , placing their legs into the slot . they carefully lower the rest of their body into the slot & let go. a few seconds later the sound of them sliding fades away completely .
it starts to rain . the droplets are purple , & stains your grey dress .
1go East
you hover back down the cliff face & land on the boardwalk again .
the center
it feels nice to return to the center . that plateau to the west had an unpleasant vibe . the boardwalk continues to the north , south , & east .
1go West
you look back at the cliff face . a voice in your head says it may be a good idea to return to the slot machine , because it could spit you out where you need to go much faster than hovering there yourself .
but no . that would be a gamble .
you don't like leaving things to chance .
1go North
with your mind made up , you hover northward along the boardwalk .
an expanse
you've reached the end of the boardwalk . this location is so far from the plateau that it's barely visible through the rain . the crimson glow to the north stretches higher into the sky here . it's like the source of the grinding noise is a wall in the distance that wraps around the boundary of b6e's mind .
there is a swarm of winged , metal centipedes flying over your head .
the grinding sound is loud enough here to put you on edge .
shard count : 4
1ask Centipede . about Sound
you call out to the centipedes above you .
excuse me , would any of you be able to help me answer a quick question ?
one of them lands in front of you . they are wearing a really cool sweater with a fractal pattern knitted onto it .
i might be able to help ya ! what's ur question ?
oh nice ! thank you . do you know what that glass grinding noise in the distance is ?
ya mean death ?
what ?
death . like the thing that happens when ya have a shard count of 11 ? looks like ya have 4 shards . ya might wanna stop thinkin' 'bout the wall !! you'll get less shards that way !
the other centipedes start gliding to the southeast .
that's what the shard count is about ? why would thinking about the wall give you more shards ? by the wall you mean that crimson thing in the distance , right ?
hey kid i'm sorry but i gotta go my friends are leavin' & i don't wanna get left behind but i'm sure someone else can help ya out ! althoughhh a lotta people might be hesitant ( ior worse ) to talk about the shards . not sure what to tell ya 'bout that .
ok , well thanks for the info . i'll keep searching then .
be careful .
they fly away .
1save
serializing timeline ...
game saved .
enter the code 5nJ0kL3-001
to restore the game to this point in time .
1pop
zoxuli
a humble goal
years ago , it started with a humble goal that many could relate to . i wanted to make a website to put my writing on .
this would lead me on an unexpectedly long journey that ends at the website you're on today .
static site generators
i started off by learning about WordPress , then quickly realized that the WordPress interface was not accessible for me , although i would not have known to describe the problem like that at the time .
looking for other options , i discovered static site generators ( SSGs ) , which had the nice property that they were interfaced with using a text editor & a terminal window , which was more accessible to me . so i tried my best to learn an SSG called Jekyll , but the documentation was too advanced for me at the time . i moved on to other projects for a while .
a new problem
a while later , after i had learned more about programming for other reasons , i realized i could now understand the Jekyll documentation !
except ... now my expectations for my website had changed significantly . now i wanted :
- excellent accessibility
- post series with navigation
- tables of contents
- tags that work across multiple categories of pages
- backlinks
- footnotes
- breadcrumbs
- control over where & how the aforementioned elements appear
- syntax highlighting
- LaTeX
- semantic markup
- no JavaScript
- broken link checking
- simple & powerful extensibility in a comfortable language
- the ability to write pages in any markup format
- a fast development feedback loop
i thought , hey , that's a lot of stuff to ask for , but there are hundreds ( eor likely thousands ) of SSGs , so surely at least one of them can do all that ?
SSG frenzy
i tried a lot of SSGs . the three that got me closest to all of my goals were Soupault , Bagatto , & Hakyll . but none of those got me everything ( todo : explain their strengths & shortcomings in detail ) . there might be another one out there , but i didn't find it .
not to worry though , because after trying so many SSGs, i was intimately familiar with the tradeoffs involved in their design , & felt comfortable writing my own from scratch .
zoxuli : first attempt
my first attempt ( todo : share zoxuli v1 ) was written in Common Lisp , & was most similar to Bagatto .
the core idea was to have the user of the zoxuli library write a data structure describing the inputs & outputs of the site in Lisp , & the markup files ( ior stylesheet , ior whatever else - it was filetype agnostic ) could contain snippets of lisp surrounded by .(
& ).
that would be evaluated when the site was built .
this meant that - as an example - if one wanted to generate backlinks , one could create a .(link <args>).
function that would be used anywhere they needed links in their markup . the function would both render the link HTML ( using spinneret ) that gets inserted back into that position by zoxuli , & also store the link data into a variable . during the second pass , calls to a .(backlinks).
function would convert the collected links into backlinks & render them into HTML wherever they are needed .
zoxuli : final version
after giving version one a proper go , these were my issues with it :
- i ended up using so many Lisp functions in the markup that i felt like i would've been better off just writing the markup in spinneret
- my implementation resulted in slower build times than i had hoped
- around that time , i realized i don't like programming in Lisp nearly as much as Haskell , especially after learning how to use ghcid properly
- i also discovered the lucid library for Haskell that i favored over spinneret for a few reasons
incorporating these observations , the final version of zoxuli is basically just a thin scaffold around lucid . the only thing from my prior criteria for an SSG that it doesn't support is the ability to use any markup format , but i enjoy writing lucid more than any other markup format i've tried , so that doesn't bother me .
i ported this website from Hakyll to zoxuli & i'm quite pleased with the experience . the source code for this website is on the source page .
swirlmania
what it is
swirlmania is a CLI StepMania simfile ( .ssc ) processor with support for generating tech charts without double steps .
swirlmania has five modes for different levels of "tech" difficulty . put simply , "tech" here refers to how far the player's body may need to turn to hit the arrow patterns .
why i made it
i enjoy playing Project OutFox ( a fork of StepMania ) on a dance pad for exercise , but finding simfiles ( which may also be refered to as charts/songs/levels ) that are of a consistent difficulty level can be challenging . i also have a strong preference for mid-speed technical maps without jumps , which makes things even more challenging . matching those criteria severely limits the song selection , but i would prefer to choose from any available level pack .
charting my own simfiles , eor processing levels by hand is far too costly to my time for what is intended to be an exercise device , so i decided to write a program to process pre-existing levels automatically . there are a few level processors already in existence such as AutoStepper , but as far as i can tell , none of them consistently maintain flow ( no double steps ) at higher tech levels . i'd also like to support more tech patterns in the future .
coalton-raylib
the problem
i love programming in ML-family languages like Haskell & OCaml , but they typically aren't interactive like Common Lisp , which makes programming games more difficult .
this is because one must restart the entire program they're working on every time a new change is compiled[12] .
one possible solution
as an ML language built on top of Common Lisp , Coalton can provide a statically typed , functional ( with typeclasses ! ) , & highly interactive game programming environment .
coalton-raylib is an example project i've shared that uses the raylib graphics library .
i've written the draw loop in Common Lisp , & the data model & update functions in Coalton[13] . this means that data & functions can be selectively reevaluated while the game is running , all while benefiting from compile-time type errors if a mistake is made !
conclusion
this was just a small experiment , that i figured i'd share in case it's useful for anyone else . i'm not sure if i'll use this for a larger game eor not , given that Coalton hasn't reached 1.0 yet , but it's great to know that it's a possibility .
footnotes
- not entirely hypothetical ; wage slavery approaches a weaker form of this [back]
- around 200 USD on Newegg [back]
- this was also around 200 USD on eBay [back]
- i am planning to switch to GrapheneOS soon , for the additional security features & ability to use TalkBack , a screen reader . i could not figure out how to enable a screen reader on CalyxOS . [back]
- ior maybe even Nix-like configuration in the future if Spectrum goes well [back]
- however , i have heard that for some people , these languages are unpleasant to work with for the some of the same reasons . [back]
- i've seen many folks point out that the Nix forum & subreddit have been particularly ineffectual at fighting bigotry & fascist rhetoric , which has been corroborated by my own experience . from what i can understand , the community has also become a place of heavy conflict after a considerable amount of members were okay with the Nix convention being sponsored by an evil "defence" technology company called Anduril . [back]
- using a mouse as an input device is fine , & i wish development software would use it more often . my issue is the precision required in most mouse-driven interfaces . precise clicks are difficult for me, & it would be much more accessible if elements that have a larger hitbox ( like radial menus ) were used more often . [back]
- it's also not a comprehensive argument , as there are quite a few reasons i dislike "intellectual property" that aren't mentioned here . [back]
- which is an instance of trying to navigate the legal system [back]
- i almost never see bugs trapped in the tub anymore after doing this [back]
- there are ways to smooth this over , but they can add a lot of complexity [back]
- that's just the method i found to be the most ergonomic , but i'm certain that others could find better ways of architecting a game with Coalton [back]