diff --git a/.dev-log b/.dev-log index a67cd60..101c486 100644 --- a/.dev-log +++ b/.dev-log @@ -3,7 +3,6 @@ - fix footer styling (tagged section is cramped with flex-row especially on mobile) - pick a license -START HERE: - add view source link to every page (git forge of source/resource not static/resource; we're here for the sexprs) TODO: diff --git a/modify.rkt b/modify.rkt index 22e2d28..e8bc76a 100644 --- a/modify.rkt +++ b/modify.rkt @@ -9,7 +9,7 @@ (only-in csv-reading csv->list) (only-in xml read-xml) (only-in "./utils.rkt" list->csv resource-link atom-table-entry add-atom-entry - make-feed archive-file)) + make-feed archive-file git-forge source-url)) (define-namespace-anchor anc) (define ns (namespace-anchor->namespace anc)) @@ -247,12 +247,12 @@ ;; resource-replacement ;; -------------------- ;; replace resource in source//id - (define (append-post-footer post-xexpr tag-list history-list) + (define (append-post-footer post-xexpr source-url tag-list history-list) (let ([post-footer (read (open-input-file "source/post-footer.scm"))]) `(body ,post-xexpr - ,((eval post-footer ns) tag-list history-list)))) + ,((eval post-footer ns) source-url tag-list history-list)))) ;; returns lambda that takes res-table to be passed into replace-resource @@ -264,7 +264,7 @@ (findf (lambda (row) (equal? (first row) id)) res-table) 3)]) - (append-post-footer new-content-sans-footer tag-list history-list))))) + (append-post-footer new-content-sans-footer (source-url r-type id) tag-list history-list))))) ;; replace-resource compose chain expression diff --git a/publish.rkt b/publish.rkt index 8eef83b..a562040 100644 --- a/publish.rkt +++ b/publish.rkt @@ -5,7 +5,7 @@ (only-in racket/format ~a) (only-in racket/list append* first second third fourth fifth rest flatten add-between take) (only-in xml xexpr->string) - (only-in "./utils.rkt" homepage list->csv add-atom-entry atom-table-entry make-feed archive-file) + (only-in "./utils.rkt" homepage git-forge source-url list->csv add-atom-entry atom-table-entry make-feed archive-file) csv-reading) (define-namespace-anchor anc) @@ -73,12 +73,12 @@ (let ([l (eval (read (open-input-file "tag-lookup.rkt")))]) (print l))) -(define (append-post-footer post-xexpr tag-list history-list) +(define (append-post-footer post-xexpr s-url tag-list history-list) (let ([post-footer (read (open-input-file "source/post-footer.scm"))]) `(body ,post-xexpr - ,((eval post-footer ns) tag-list history-list)))) + ,((eval post-footer ns) s-url tag-list history-list)))) (define (make-output-file-handle x-test r-type #:headline [l-headline ""] #:res-id [r-id 0]) (define (make-root-file-handle x l) @@ -240,6 +240,7 @@ (define resource (append-post-footer (read (open-input-file i)) + (source-url r res-id) t (list publish-time))) diff --git a/source/about.scm b/source/about.scm index 22d23dc..970abc2 100644 --- a/source/about.scm +++ b/source/about.scm @@ -1 +1 @@ -'(body (section (h2 "a λ.functional λ.gay") (p "i'm a gay lil nerd who's learning everyday about community, and ecology,\n and computer; and trying hard to be good for the world with my gay lil\n friends") (p "i was named after " (a ((href "https://plants.usda.gov/home/plantProfile?symbol=OXOR")) "a plant called sorrel") " and i live in the mountains of southern appalachia on " (span ((lang "chr")) "ᏣᎳᎩ") " (tsalagi/cherokee) land. i live with some cats and a whole mess of plants\n (most of them food) and a cordswain and i have sweet neighbors") (p "i have never identified with the term 'hacker' but i have learned, in the\n past few years, that i do like to orchestrate computer machines and i do\n that with some cute friends at " (a ((href "https://bunk.computer")) "bunk computer club")) (p "some random things i believe/ i like/ i am/etc (in no particular order") (ul (li (p "i like linguistics a whole lot. " (span ((class "hx-target")) (a ((href "/tagged/conlang") (hx-get "/hx/tagged/conlang") (hx-target "closest span.hx-target") (hx-swap "innerHTML")) "i make languages (the human kind) for fun.")) " there's a whole bunch of people who do this! " (a ((href "https://conlang.org/")) "the language creation society") " i'm even working on a " (span ((class "hx-target")) (a ((href "/tagged/latl") (hx-get "/hx/tagged/latl") (hx-target "closest span.hx-target") (hx-swap "innerHTML")) "language (computer) to make languages (human)")))) (li (p "mmt, but make it anarchist " (small "and get rid of all that \"sovereignty\" stuff, ew"))) (li (p "got a spicy brained, trans lady-fied experience. \n i have feelings about these things that inevitably weave thru\n my projects and art and all that")) (li (p "i used to make a lot more visual art than i do these days. some\n sort of smth'll wind up here at some point")))) (footer (section (h5 "tagged") (ul ((class "tag-list")) (li ((class "tag-item")) (span ((class "hx-target")) (a ((href "/tagged/about") (hx-get "/hx/tagged/about") (hx-target "closest span.hx-target") (hx-swap "innerHTML")) "about"))))) (hr) (p ((class "doc-history")) (small "published: 2024-01-18T21:56:45")) (p ((class "license-info")) (small (a ((href "static/license/license.txt")) "license"))))) \ No newline at end of file +'(body (section (h2 "a λ.functional λ.gay") (p "i'm a gay lil nerd who's learning everyday about community, and ecology,\n and computer; and trying hard to be good for the world with my gay lil\n friends") (p "i was named after " (a ((href "https://plants.usda.gov/home/plantProfile?symbol=OXOR")) "a plant called sorrel") " and i live in the mountains of southern appalachia on " (span ((lang "chr")) "ᏣᎳᎩ") " (tsalagi/cherokee) land. i live with some cats and a whole mess of plants\n (most of them food) and a cordswain and i have sweet neighbors") (p "i have never identified with the term 'hacker' but i have learned, in the\n past few years, that i do like to orchestrate computer machines and i do\n that with some cute friends at " (a ((href "https://bunk.computer")) "bunk computer club")) (p "some random things i believe/ i like/ i am/etc (in no particular order") (ul (li (p "i like linguistics a whole lot. " (span ((class "hx-target")) (a ((href "/tagged/conlang") (hx-get "/hx/tagged/conlang") (hx-target "closest span.hx-target") (hx-swap "innerHTML")) "i make languages (the human kind) for fun.")) " there's a whole bunch of people who do this! " (a ((href "https://conlang.org/")) "the language creation society") " i'm even working on a " (span ((class "hx-target")) (a ((href "/tagged/latl") (hx-get "/hx/tagged/latl") (hx-target "closest span.hx-target") (hx-swap "innerHTML")) "language (computer) to make languages (human)")))) (li (p "mmt, but make it anarchist " (small "and get rid of all that \"sovereignty\" stuff, ew"))) (li (p "got a spicy brained, trans lady-fied experience. \n i have feelings about these things that inevitably weave thru\n my projects and art and all that")) (li (p "i used to make a lot more visual art than i do these days. some\n sort of smth'll wind up here at some point")))) (footer (a ((href "https://git.bunk.computer/oxaliq/oxaliq.net/src/branch/main/source/about.scm")) "view source") (hr) (section (h5 "tagged") (ul ((class "tag-list")) (li ((class "tag-item")) (span ((class "hx-target")) (a ((href "/tagged/about") (hx-get "/hx/tagged/about") (hx-target "closest span.hx-target") (hx-swap "innerHTML")) "about"))))) (hr) (p ((class "doc-history")) (small "published: 2024-01-18T21:56:45")) (p ((class "license-info")) (small (a ((href "static/license/license.txt")) "license"))))) \ No newline at end of file diff --git a/source/contact.scm b/source/contact.scm index 8375997..443d48a 100644 --- a/source/contact.scm +++ b/source/contact.scm @@ -1 +1 @@ -'(body (section (h2 "contact") (p (code "email [at] [this domain]") " to send me a good ol' fashioned email") (p "i have avoided 'online' for a long time, but i'm getting hip to it. i'm\n on the mastodon.social server @oxaliq")) (footer (section (h5 "tagged") (ul ((class "tag-list")) (li ((class "tag-item")) (span ((class "hx-target")) (a ((href "/tagged/about") (hx-get "/hx/tagged/about") (hx-target "closest span.hx-target") (hx-swap "innerHTML")) "about"))))) (hr) (p ((class "doc-history")) (small "published: 2024-01-18T22:21:26")) (p ((class "license-info")) (small (a ((href "static/license/license.txt")) "license"))))) \ No newline at end of file +'(body (section (h2 "contact") (p (code "email [at] [this domain]") " to send me a good ol' fashioned email") (p "i have avoided 'online' for a long time, but i'm getting hip to it. i'm\n on the mastodon.social server @oxaliq")) (footer (a ((href "https://git.bunk.computer/oxaliq/oxaliq.net/src/branch/main/source/contact.scm")) "view source") (hr) (section (h5 "tagged") (ul ((class "tag-list")) (li ((class "tag-item")) (span ((class "hx-target")) (a ((href "/tagged/about") (hx-get "/hx/tagged/about") (hx-target "closest span.hx-target") (hx-swap "innerHTML")) "about"))))) (hr) (p ((class "doc-history")) (small "published: 2024-01-18T22:21:26")) (p ((class "license-info")) (small (a ((href "static/license/license.txt")) "license"))))) \ No newline at end of file diff --git a/source/now.scm b/source/now.scm index ea0aded..9d163d8 100644 --- a/source/now.scm +++ b/source/now.scm @@ -1 +1 @@ -'(body (section (hgroup (h2 "now") (p "a snapshot of the (mostly) non-computer things of import")) (section (hgroup (h3 "read") (p "stuff i'm taking in")) (ul (li "the paying guests, sarah waters") (li "females, andrea long chu") (li "palo alto, malcolm harris") (li "desolation's flower, ragana") (li "his happiness shall come first even though we are suffering, backxwash") (li "salesforce, lauren bousfield") (li "el mal querer, rosalía") (li "land and freedom, alex knight") (li "guacamelee, drinkbox"))) (section (hgroup (h3 "eval") (p "stuff i'm crunching on")) (ul (li "winter garden chores") (li "winter sweets cooking and eating") (li "starting a community maker space") (li "going on more hikes") (li "body stuff"))) (section (hgroup (h3 "print") (p "stuff i'm putting out")) (ul (li "some basic sewing stuff") (li "relearning how to draw"))) (section (hgroup (h3 "loop") (p "stuff what's on the horizon")) (ul (li "being in the northeastern us") (li "putting my labor on the market") (li "maybe making some music again?")))) (footer (section (h5 "tagged") (ul ((class "tag-list")) (li ((class "tag-item")) (span ((class "hx-target")) (a ((href "/tagged/about") (hx-get "/hx/tagged/about") (hx-target "closest span.hx-target") (hx-swap "innerHTML")) "about"))))) (hr) (p ((class "doc-history")) (small "published: 2024-01-18T22:22:03")) (p ((class "license-info")) (small (a ((href "static/license/license.txt")) "license"))))) \ No newline at end of file +'(body (section (hgroup (h2 "now") (p "a snapshot of the (mostly) non-computer things of import")) (section (hgroup (h3 "read") (p "stuff i'm taking in")) (ul (li "the paying guests, sarah waters") (li "females, andrea long chu") (li "palo alto, malcolm harris") (li "desolation's flower, ragana") (li "his happiness shall come first even though we are suffering, backxwash") (li "salesforce, lauren bousfield") (li "el mal querer, rosalía") (li "land and freedom, alex knight") (li "guacamelee, drinkbox"))) (section (hgroup (h3 "eval") (p "stuff i'm crunching on")) (ul (li "winter garden chores") (li "winter sweets cooking and eating") (li "starting a community maker space") (li "going on more hikes") (li "body stuff"))) (section (hgroup (h3 "print") (p "stuff i'm putting out")) (ul (li "some basic sewing stuff") (li "relearning how to draw"))) (section (hgroup (h3 "loop") (p "stuff what's on the horizon")) (ul (li "being in the northeastern us") (li "putting my labor on the market") (li "maybe making some music again?")))) (footer (a ((href "https://git.bunk.computer/oxaliq/oxaliq.net/src/branch/main/source/now.scm")) "view source") (hr) (section (h5 "tagged") (ul ((class "tag-list")) (li ((class "tag-item")) (span ((class "hx-target")) (a ((href "/tagged/about") (hx-get "/hx/tagged/about") (hx-target "closest span.hx-target") (hx-swap "innerHTML")) "about"))))) (hr) (p ((class "doc-history")) (small "published: 2024-01-18T22:22:03")) (p ((class "license-info")) (small (a ((href "static/license/license.txt")) "license"))))) \ No newline at end of file diff --git a/source/post-footer.scm b/source/post-footer.scm index 23664e8..f46bc72 100644 --- a/source/post-footer.scm +++ b/source/post-footer.scm @@ -1,6 +1,9 @@ -(lambda (tag-list history-list) +(lambda (source-url tag-list history-list) (let ([class-sec `(ul ((class "tag-list")))]) `(footer + (a ((href ,source-url)) + "view source") + (hr) (section (h5 "tagged") ,(begin diff --git a/source/this.scm b/source/this.scm index 88cf98c..772a189 100644 --- a/source/this.scm +++ b/source/this.scm @@ -1 +1 @@ -'(body (section (hgroup (h2 "how this site") (p "some kind of colophon")) (p "all of the code for the website is hosted and deployed from tree, " (a ((href "https://git.bunk.computer/oxaliq/oxaliq.net")) "bunk computer club's git forge") "i do almost everything in the main branch, cause it's just me and that way\n i can add links below to the in-progress stuff real easy") (p "first, this website doesn't do anything to know who you are or anything.\n this website is a ~20MB binary and some static resources. it is built\n primarily with " (a ((href "https://docs.racket-lang.org/web-server/")) "racket web-server")) (p "this website serves ~46kB of javascript in the form of " (a ((href "https://htmx.org/")) "the htmx library (minified.)") " i don't love serving minified code. forking the library and removing\n features that are of no use to me is on the agenda for 2024") (p "everything here is hosted on turtle, " (a ((href "https://wiki.bunk.computer/hypha/servers")) "bunk computer club's shared application server")) (p "there's some racket scripts i use for tooling that were made with " (a ((href "https://docs.racket-lang.org/cli/")) "#lang cli")) (p (a ((href "https://git.bunk.computer/oxaliq/oxaliq.net/src/branch/main/.dev-log")) "you can read about development here")) (p (a ((href "https://git.bunk.computer/oxaliq/oxaliq.net/src/branch/main/.idea-log")) "you can read about my vague plans here")) (p (a ((href "https://git.bunk.computer/oxaliq/oxaliq.net/src/branch/main/in-progress")) "or read works in progress here")) (p "the image in the header is a crop of the work " (em "'Oxalis acetosella', Otto Wilhelm Thomé (1885)") " run through a generation tool on " (a ((href "https://www.asciiart.eu/")) "this art archive"))) (footer (section (h5 "tagged") (ul ((class "tag-list")) (li ((class "tag-item")) (span ((class "hx-target")) (a ((href "/tagged/about") (hx-get "/hx/tagged/about") (hx-target "closest span.hx-target") (hx-swap "innerHTML")) "about"))))) (hr) (p ((class "doc-history")) (small "published: 2024-01-18T22:19:43")) (p ((class "license-info")) (small (a ((href "static/license/license.txt")) "license"))))) \ No newline at end of file +'(body (section (hgroup (h2 "how this site") (p "some kind of colophon")) (p "all of the code for the website is hosted and deployed from tree, " (a ((href "https://git.bunk.computer/oxaliq/oxaliq.net")) "bunk computer club's git forge") "i do almost everything in the main branch, cause it's just me and that way\n i can add links below to the in-progress stuff real easy") (p "first, this website doesn't do anything to know who you are or anything.\n this website is a ~20MB binary and some static resources. it is built\n primarily with " (a ((href "https://docs.racket-lang.org/web-server/")) "racket web-server")) (p "this website serves ~46kB of javascript in the form of " (a ((href "https://htmx.org/")) "the htmx library (minified.)") " i don't love serving minified code. forking the library and removing\n features that are of no use to me is on the agenda for 2024") (p "everything here is hosted on turtle, " (a ((href "https://wiki.bunk.computer/hypha/servers")) "bunk computer club's shared application server")) (p "there's some racket scripts i use for tooling that were made with " (a ((href "https://docs.racket-lang.org/cli/")) "#lang cli")) (p (a ((href "https://git.bunk.computer/oxaliq/oxaliq.net/src/branch/main/.dev-log")) "you can read about development here")) (p (a ((href "https://git.bunk.computer/oxaliq/oxaliq.net/src/branch/main/.idea-log")) "you can read about my vague plans here")) (p (a ((href "https://git.bunk.computer/oxaliq/oxaliq.net/src/branch/main/in-progress")) "or read works in progress here")) (p "the image in the header is a crop of the work " (em "'Oxalis acetosella', Otto Wilhelm Thomé (1885)") " run through a generation tool on " (a ((href "https://www.asciiart.eu/")) "this art archive"))) (footer (a ((href "https://git.bunk.computer/oxaliq/oxaliq.net/src/branch/main/source/this.scm")) "view source") (hr) (section (h5 "tagged") (ul ((class "tag-list")) (li ((class "tag-item")) (span ((class "hx-target")) (a ((href "/tagged/about") (hx-get "/hx/tagged/about") (hx-target "closest span.hx-target") (hx-swap "innerHTML")) "about"))))) (hr) (p ((class "doc-history")) (small "published: 2024-01-18T22:19:43")) (p ((class "license-info")) (small (a ((href "static/license/license.txt")) "license"))))) \ No newline at end of file diff --git a/source/unsettled/1.scm b/source/unsettled/1.scm index 4ccddff..74b73e0 100644 --- a/source/unsettled/1.scm +++ b/source/unsettled/1.scm @@ -1 +1 @@ -'(body (article (h1 "beginning work on LATL") (p "a little introduction to a project i started thinking about in early 2020,\n as i was learning how to do web development and wanted to try my hand at\n combining some hobbies") (p (a ((href "#the-point")) "skip the story and get to the point")) (section ((id "the-story")) (hgroup (h2 "what even is this?") (p (em "a story of linguistics and hubris")) (hr)) (p "so, when i was a wee little child, i discovered language. like, most\n wee little children discover language, but some wee little children\n get given the lord of the rings when they're ten or something and get\n into the narrative and the characters, sure. but those appendices....\n there's .. a language here? called quenya? and it's written in this\n script? called tengwar? and there's a related language, sindarin? and\n this tolkien guy just made all this up? ") (p "so, i did the precocious kid thing and said to myself \"if this dead\n british weirdo (who's like really into the concept of royalty) can\n make a whole new language, then surely i can too\"") (p "i did not, in fact, make a language. i made a relex of the language\n i already spoke (my own peculiar idiolect of u.s. english,) but we all\n gotta start somewhere") (p "for a long time the internet to me was mostly " (a ((href "https://listserv.brown.edu/archives/conlang.html")) "the brown university conlang listserv.") " here i learned about different phonology, what the heck\n morphosyntactic alignment is, diachronicity and how different\n languages can be related. i got exposed to awkwords and sca2 (tools\n for generating words and modeling changes to those words.) but i\n never interacted with ppl much. i was a kid and the ppl in there\n really knew their stuff, and i never much felt comfy with the idea\n of being just " (em "in public") " on the internet like that") (p "anyway i got better at making languages and learning about how\n language works, and it's just been a (sometimes more consistent, at\n times less) hobby of mine for most of my life") (p "flash forward to a few years ago, i'm working on a language that has\n turned into the passion project that i've spend the majority of my\n conlanging on and i'm getting frustrated with my tools. other\n conlangers have made some really cool tools that i've used forever,\n but i wanted to change my workflow. i wanted to do more complex,\n phonological-feature-aware, sound change rules; i wanted diachroinc\n tooling for morhposyntactic bits of my languages; i wanted a tighter\n feedback loop between defining some changes, or lexical items, or\n whathave you, and seeing the results; i wanted to see how a\n derivational pattern at one stage in a parent form of a language\n branches out or collapses into different derivational patterns in a\n child language") (p "all was not well in my conlanging") (p "i would need to " (strong "do some programming")) (p "the thing is, i had just learned javascript. i had built a few\n little toy web apps, and i was not ready to execute on a vision\n for a multi-purpose conlanging tool that was beginning to take shape in my head") (p "i tried anyway") (p "and i made " (a ((href "settled/1")) "a bad first draft of a sound change tool")) (p "there's an e-bnf grammar in that project somewhere! the hubris i\n had then, to think i could make a little javascript-backed\n language tool with all of the bells and whistles i needed! with\n the knowledge that i had then! (or more accurately, didn't have)") (br) (p "but now...")) (section ((id "the-point")) (hgroup (h2 "reviving this project") (p (em "whatcha gonna do sorrel?")) (hr)) (p "i'm still not ready") (p "but at least, today i'm forgoing bells and whistles for\n execution models. core abstractions. experience using " (a ((href "https://racket-lang.org")) "a (programming) language-oriented programming language") " maybe. there's a lot to think about") (p "so, i'm going to try reviving this project. or, more accurately,\n reimagining this project. from the little sound change tool that\n was merely an unusably buggy iteration on tools that other\n conlangers had executed better, to a more robust environment for\n conlanging. one which gives language nerds the power to solve\n all of their language nerding problems in one runtime, with an\n extensible and reflective interface. and which is written in such\n a way, with the appropriate abstractions, that lanuage nerdy\n hackers can hack their own tools on top of it") (p "and i'm going to be doing " (a ((href "https://www.recurse.com/")) "a hecking hacking retreat") " about it. i'll spend some full-time programming days making a\n goofy little thing for goofy little language nerds surrounded by\n goofy programming nerds doing whatever rad things they happen\n to be getting up to when i happen to be there") (p "like many of the communities i am a part of, i am a quiet part of\n the conlanging community. so, we'll see how this goes. maybe it\n is only ever something of interest to me and the conlangers i\n interact with in meatspace. maybe it only teaches me some things\n about designing and building a tool of the type that i'm designing\n and building. hoooopefully it is helpful in a way to other\n conlangers such that it evolves beyond what i could do on\n my own (cause i ain't no whiz kid 10x programmer)") (p "but that's all me getting ahead of myself (as is often my wont.)\n first! to pack for the trip!")) (section (hgroup (h2 "packing for the trip") (p (em "a biggg heap of things to expand")) (hr)) (p "i'm just gonna fly right through these. there's going to be a lot\n to read up on, to explore, to think and talk through, to build\n toy versions of before it gets time for larger prototyping and\n building a workable tool. so, here's the very start of the\n thinking-in-public. each of these little thoughts is going to get\n at least it's own writeup (if not several) and i'll update with\n additional sections and links to the writeups as i go. a note: it\n would be impossible for me (and probably most ppl) to create the\n full vision in the time i'll be working on it fulltime") (section (h3 "notes on the goals") (p "it's good to have goals! to define what it even is yr tring to\n do. so here's my attempt. my goal is to create a foss+ working\n runtime that *can* serve as a singular tool for conlangers with\n some basic programming capacity. it should be linguistically\n *theory neutral* to the extant that such a thing is possible.\n it should allow for the definition of all relevant structures\n of a language *in code* and support the construction of grammars,\n dictionaries, text documents and (stretch goal) non-programmer\n friendly tools *from code*. it should support phonological,\n lexical, syntactic, morphological, semantic, etc transformations\n across different 'epochs' be they diachronic or synchronic.\n these transformations should work on transformations, ie\n morphological transformations should themselves be transformed\n by phonological transformations. users of the tool should be\n able to edit their work and see the consequences of their changes\n quickly. hopefully, this can all happen on the web, i guess,\n cause ppl like using their browser as the everything app")) (section (h3 "notes on existing tools") (p "i'm going to talk a bunch about existing tools made by\n conlangers or made for professional linguists and used by\n conlangers or just yr regular old spreedsheets and such. i'm\n going to be doing some research about how conlangers do their\n conlanging, lest this truly be a just-for-me type project")) (section (h3 "notes on primitives") (p "i think some interesting things start to bubble out of some of\n those goals up there. like the idea of supporting a bunch of\n different kinds of transformations that should themselves be\n transformable. the primitives we're working with have to work\n below the level of \"lexeme\" or \"phoneme\" to have something\n abstract that can apply to both. i'm not going to get into\n specifics even a little bit at this point-you'll have to stay\n tuned for more")) (section (h3 "notes on execution model") (p "this is going to be the crunchiest stuff to think about. i'm\n going to make some arguments for some things that (it is my\n belief) fall out of these goals. things like dynamic typing.\n things like reflectivity (this is sooo important it gets its\n own section.) things like lazy evaluation (because languages\n are big and sometimes you only want to look at a subset of a\n language.) there's also some hypothetical notions that will\n require some experiments to determine applicability to the\n project. i'm just going to list them as questions and not\n expound upon or defend their existence as questions here:\n propositions as a means of combination? propagation networks\n as primitives?")) (section (h3 "notes on reflectivity and interaction") (p "this is so important! i want conlangers to use this tool to\n iterate and that requires ~something like a REPL~ in a\n dynamic environment. my dream is to have a bidirectional\n flow of information; whereby a user of the system can define\n some rules about their language, evaluate those rules on some\n data in an interpreter, inspect those data, modify those data\n and run the interpreter such that it produces possible rules\n that would yield the new result. wether or not that experience\n results from the project, users should be able to rebind\n anything their project needs *at runtime*")) (section (h3 "notes on portability") (p "as the project develops i will have to give some thought to\n how to make it available to conlangers with different kinds\n of computation experience. the ideal would be for a full\n featured web implementation that interoperates with hosted\n implementations, but we'll see")) (section (h3 "notes on the substrate") (p "not a lot to say here. i will begin this project in racket\n because i have some familiarity with it and it is\n specifically built for developing languages. i will be using\n other tools to explore other aspects of the project and may\n ultimately move away from the racket ecosystem, but a girl\n has gotta start somewhere"))) (section (hgroup (h2 "about the name") (p (em "it's pronouced ˈlæ.ɾɫ̩")) (hr)) (p "i don't know dude, naming things is hard. it's a working name,\n it works good as an extension. " (code "my-conlang.latl") "anyone?") (p "i also just like syllabic laterals? they sound neat to me. the\n official initialism is " (u "l") "inguistic " (u "a") "nalytic " (u "t") "ransformation " (u "l") "anguage, but it also double\n entendres to " (u "l") "ower " (u "a") "nterior " (u "t") "emporal " (u "l") "obe, so that's just kind of fun.") (p "and the l means there can be lambda iconography-this is crucial\n for a new computer project. [ˈλæ.ɾɫ̩] as a typographic image is\n so perfectly specific to the kinds of things i dream about.") (p "maybe it'll have a different name some day, idk"))) (footer (section (h5 "tagged") (ul ((class "tag-list")) (li ((class "tag-item")) (span ((class "hx-target")) (a ((href "/tagged/latl") (hx-get "/hx/tagged/latl") (hx-target "closest span.hx-target") (hx-swap "innerHTML")) "latl"))) (li ((class "tag-item")) (span ((class "hx-target")) (a ((href "/tagged/conlang") (hx-get "/hx/tagged/conlang") (hx-target "closest span.hx-target") (hx-swap "innerHTML")) "conlang"))) (li ((class "tag-item")) (span ((class "hx-target")) (a ((href "/tagged/programming-language") (hx-get "/hx/tagged/programming-language") (hx-target "closest span.hx-target") (hx-swap "innerHTML")) "programming-language"))))) (hr) (p ((class "doc-history")) (small "published: 2024-01-18T22:39:00")) (p ((class "license-info")) (small (a ((href "/license")) "license"))))) \ No newline at end of file +'(body (article (h1 "beginning work on LATL") (p "a little introduction to a project i started thinking about in early 2020,\n as i was learning how to do web development and wanted to try my hand at\n combining some hobbies") (p (a ((href "#the-point")) "skip the story and get to the point")) (section ((id "the-story")) (hgroup (h2 "what even is this?") (p (em "a story of linguistics and hubris")) (hr)) (p "so, when i was a wee little child, i discovered language. like, most\n wee little children discover language, but some wee little children\n get given the lord of the rings when they're ten or something and get\n into the narrative and the characters, sure. but those appendices....\n there's .. a language here? called quenya? and it's written in this\n script? called tengwar? and there's a related language, sindarin? and\n this tolkien guy just made all this up? ") (p "so, i did the precocious kid thing and said to myself \"if this dead\n british weirdo (who's like really into the concept of royalty) can\n make a whole new language, then surely i can too\"") (p "i did not, in fact, make a language. i made a relex of the language\n i already spoke (my own peculiar idiolect of u.s. english,) but we all\n gotta start somewhere") (p "for a long time the internet to me was mostly " (a ((href "https://listserv.brown.edu/archives/conlang.html")) "the brown university conlang listserv.") " here i learned about different phonology, what the heck\n morphosyntactic alignment is, diachronicity and how different\n languages can be related. i got exposed to awkwords and sca2 (tools\n for generating words and modeling changes to those words.) but i\n never interacted with ppl much. i was a kid and the ppl in there\n really knew their stuff, and i never much felt comfy with the idea\n of being just " (em "in public") " on the internet like that") (p "anyway i got better at making languages and learning about how\n language works, and it's just been a (sometimes more consistent, at\n times less) hobby of mine for most of my life") (p "flash forward to a few years ago, i'm working on a language that has\n turned into the passion project that i've spend the majority of my\n conlanging on and i'm getting frustrated with my tools. other\n conlangers have made some really cool tools that i've used forever,\n but i wanted to change my workflow. i wanted to do more complex,\n phonological-feature-aware, sound change rules; i wanted diachroinc\n tooling for morhposyntactic bits of my languages; i wanted a tighter\n feedback loop between defining some changes, or lexical items, or\n whathave you, and seeing the results; i wanted to see how a\n derivational pattern at one stage in a parent form of a language\n branches out or collapses into different derivational patterns in a\n child language") (p "all was not well in my conlanging") (p "i would need to " (strong "do some programming")) (p "the thing is, i had just learned javascript. i had built a few\n little toy web apps, and i was not ready to execute on a vision\n for a multi-purpose conlanging tool that was beginning to take shape in my head") (p "i tried anyway") (p "and i made " (a ((href "settled/1")) "a bad first draft of a sound change tool")) (p "there's an e-bnf grammar in that project somewhere! the hubris i\n had then, to think i could make a little javascript-backed\n language tool with all of the bells and whistles i needed! with\n the knowledge that i had then! (or more accurately, didn't have)") (br) (p "but now...")) (section ((id "the-point")) (hgroup (h2 "reviving this project") (p (em "whatcha gonna do sorrel?")) (hr)) (p "i'm still not ready") (p "but at least, today i'm forgoing bells and whistles for\n execution models. core abstractions. experience using " (a ((href "https://racket-lang.org")) "a (programming) language-oriented programming language") " maybe. there's a lot to think about") (p "so, i'm going to try reviving this project. or, more accurately,\n reimagining this project. from the little sound change tool that\n was merely an unusably buggy iteration on tools that other\n conlangers had executed better, to a more robust environment for\n conlanging. one which gives language nerds the power to solve\n all of their language nerding problems in one runtime, with an\n extensible and reflective interface. and which is written in such\n a way, with the appropriate abstractions, that lanuage nerdy\n hackers can hack their own tools on top of it") (p "and i'm going to be doing " (a ((href "https://www.recurse.com/")) "a hecking hacking retreat") " about it. i'll spend some full-time programming days making a\n goofy little thing for goofy little language nerds surrounded by\n goofy programming nerds doing whatever rad things they happen\n to be getting up to when i happen to be there") (p "like many of the communities i am a part of, i am a quiet part of\n the conlanging community. so, we'll see how this goes. maybe it\n is only ever something of interest to me and the conlangers i\n interact with in meatspace. maybe it only teaches me some things\n about designing and building a tool of the type that i'm designing\n and building. hoooopefully it is helpful in a way to other\n conlangers such that it evolves beyond what i could do on\n my own (cause i ain't no whiz kid 10x programmer)") (p "but that's all me getting ahead of myself (as is often my wont.)\n first! to pack for the trip!")) (section (hgroup (h2 "packing for the trip") (p (em "a biggg heap of things to expand")) (hr)) (p "i'm just gonna fly right through these. there's going to be a lot\n to read up on, to explore, to think and talk through, to build\n toy versions of before it gets time for larger prototyping and\n building a workable tool. so, here's the very start of the\n thinking-in-public. each of these little thoughts is going to get\n at least it's own writeup (if not several) and i'll update with\n additional sections and links to the writeups as i go. a note: it\n would be impossible for me (and probably most ppl) to create the\n full vision in the time i'll be working on it fulltime") (section (h3 "notes on the goals") (p "it's good to have goals! to define what it even is yr tring to\n do. so here's my attempt. my goal is to create a foss+ working\n runtime that *can* serve as a singular tool for conlangers with\n some basic programming capacity. it should be linguistically\n *theory neutral* to the extant that such a thing is possible.\n it should allow for the definition of all relevant structures\n of a language *in code* and support the construction of grammars,\n dictionaries, text documents and (stretch goal) non-programmer\n friendly tools *from code*. it should support phonological,\n lexical, syntactic, morphological, semantic, etc transformations\n across different 'epochs' be they diachronic or synchronic.\n these transformations should work on transformations, ie\n morphological transformations should themselves be transformed\n by phonological transformations. users of the tool should be\n able to edit their work and see the consequences of their changes\n quickly. hopefully, this can all happen on the web, i guess,\n cause ppl like using their browser as the everything app")) (section (h3 "notes on existing tools") (p "i'm going to talk a bunch about existing tools made by\n conlangers or made for professional linguists and used by\n conlangers or just yr regular old spreedsheets and such. i'm\n going to be doing some research about how conlangers do their\n conlanging, lest this truly be a just-for-me type project")) (section (h3 "notes on primitives") (p "i think some interesting things start to bubble out of some of\n those goals up there. like the idea of supporting a bunch of\n different kinds of transformations that should themselves be\n transformable. the primitives we're working with have to work\n below the level of \"lexeme\" or \"phoneme\" to have something\n abstract that can apply to both. i'm not going to get into\n specifics even a little bit at this point-you'll have to stay\n tuned for more")) (section (h3 "notes on execution model") (p "this is going to be the crunchiest stuff to think about. i'm\n going to make some arguments for some things that (it is my\n belief) fall out of these goals. things like dynamic typing.\n things like reflectivity (this is sooo important it gets its\n own section.) things like lazy evaluation (because languages\n are big and sometimes you only want to look at a subset of a\n language.) there's also some hypothetical notions that will\n require some experiments to determine applicability to the\n project. i'm just going to list them as questions and not\n expound upon or defend their existence as questions here:\n propositions as a means of combination? propagation networks\n as primitives?")) (section (h3 "notes on reflectivity and interaction") (p "this is so important! i want conlangers to use this tool to\n iterate and that requires ~something like a REPL~ in a\n dynamic environment. my dream is to have a bidirectional\n flow of information; whereby a user of the system can define\n some rules about their language, evaluate those rules on some\n data in an interpreter, inspect those data, modify those data\n and run the interpreter such that it produces possible rules\n that would yield the new result. wether or not that experience\n results from the project, users should be able to rebind\n anything their project needs *at runtime*")) (section (h3 "notes on portability") (p "as the project develops i will have to give some thought to\n how to make it available to conlangers with different kinds\n of computation experience. the ideal would be for a full\n featured web implementation that interoperates with hosted\n implementations, but we'll see")) (section (h3 "notes on the substrate") (p "not a lot to say here. i will begin this project in racket\n because i have some familiarity with it and it is\n specifically built for developing languages. i will be using\n other tools to explore other aspects of the project and may\n ultimately move away from the racket ecosystem, but a girl\n has gotta start somewhere"))) (section (hgroup (h2 "about the name") (p (em "it's pronouced ˈlæ.ɾɫ̩")) (hr)) (p "i don't know dude, naming things is hard. it's a working name,\n it works good as an extension. " (code "my-conlang.latl") "anyone?") (p "i also just like syllabic laterals? they sound neat to me. the\n official initialism is " (u "l") "inguistic " (u "a") "nalytic " (u "t") "ransformation " (u "l") "anguage, but it also double\n entendres to " (u "l") "ower " (u "a") "nterior " (u "t") "emporal " (u "l") "obe, so that's just kind of fun.") (p "and the l means there can be lambda iconography-this is crucial\n for a new computer project. [ˈλæ.ɾɫ̩] as a typographic image is\n so perfectly specific to the kinds of things i dream about.") (p "maybe it'll have a different name some day, idk"))) (footer (a ((href "https://git.bunk.computer/oxaliq/oxaliq.net/src/branch/main/source/unsettled/1.scm")) "view source") (hr) (section (h5 "tagged") (ul ((class "tag-list")) (li ((class "tag-item")) (span ((class "hx-target")) (a ((href "/tagged/latl") (hx-get "/hx/tagged/latl") (hx-target "closest span.hx-target") (hx-swap "innerHTML")) "latl"))) (li ((class "tag-item")) (span ((class "hx-target")) (a ((href "/tagged/conlang") (hx-get "/hx/tagged/conlang") (hx-target "closest span.hx-target") (hx-swap "innerHTML")) "conlang"))) (li ((class "tag-item")) (span ((class "hx-target")) (a ((href "/tagged/programming-language") (hx-get "/hx/tagged/programming-language") (hx-target "closest span.hx-target") (hx-swap "innerHTML")) "programming-language"))))) (hr) (p ((class "doc-history")) (small "published: 2024-01-18T22:39:00")) (p ((class "license-info")) (small (a ((href "/license")) "license"))))) \ No newline at end of file diff --git a/source/very-earnest-disclaimer.scm b/source/very-earnest-disclaimer.scm index 49b639e..48f8c4e 100644 --- a/source/very-earnest-disclaimer.scm +++ b/source/very-earnest-disclaimer.scm @@ -1 +1 @@ -'(body (section (h2 "a very earnest disclaimer") (p "i like to talk about computation with ppl! but it is important for me that\n you know: i am new to all this! i did not think computers or software were\n ^for me^ and then i had to get good at spreadsheets at my first email-factory\n job and then i got curious about webdev and now i have reached terminal\n velocity down a very λ.particular.rabbit[hole]") (p "i think computation is both fascinating on its own terms and as a substrate\n for pro-social infrastructure. i am motivated to work on projects that\n engage with this possiblity") (p "i'm not very good at many things. i don't even have a math education or a\n degree in anything. have you ever met someone who *is* good at _all_ ^this^\n ~stuff~ ???") (p "i like thinking in public, but please be patient! with me and with\n everyone else you talk about things you care about with") (p "let's hold our strong opinions loosely!") (p "and first assume good faith from each other!") (br) (br) (p ((class "ascii but-normal-size")) " ⃔‥̺⃝⃕") (br)) (footer (section (h5 "tagged") (ul ((class "tag-list")) (li ((class "tag-item")) (span ((class "hx-target")) (a ((href "/tagged/about") (hx-get "/hx/tagged/about") (hx-target "closest span.hx-target") (hx-swap "innerHTML")) "about"))))) (hr) (p ((class "doc-history")) (small "published: 2024-01-18T22:20:50")) (p ((class "license-info")) (small (a ((href "static/license/license.txt")) "license"))))) \ No newline at end of file +'(body (section (h2 "a very earnest disclaimer") (p "i like to talk about computation with ppl! but it is important for me that\n you know: i am new to all this! i did not think computers or software were\n ^for me^ and then i had to get good at spreadsheets at my first email-factory\n job and then i got curious about webdev and now i have reached terminal\n velocity down a very λ.particular.rabbit[hole]") (p "i think computation is both fascinating on its own terms and as a substrate\n for pro-social infrastructure. i am motivated to work on projects that\n engage with this possiblity") (p "i'm not very good at many things. i don't even have a math education or a\n degree in anything. have you ever met someone who *is* good at _all_ ^this^\n ~stuff~ ???") (p "i like thinking in public, but please be patient! with me and with\n everyone else you talk about things you care about with") (p "let's hold our strong opinions loosely!") (p "and first assume good faith from each other!") (br) (br) (p ((class "ascii but-normal-size")) " ⃔‥̺⃝⃕") (br)) (footer (a ((href "https://git.bunk.computer/oxaliq/oxaliq.net/src/branch/main/source/very-earnest-disclaimer.scm")) "view source") (hr) (section (h5 "tagged") (ul ((class "tag-list")) (li ((class "tag-item")) (span ((class "hx-target")) (a ((href "/tagged/about") (hx-get "/hx/tagged/about") (hx-target "closest span.hx-target") (hx-swap "innerHTML")) "about"))))) (hr) (p ((class "doc-history")) (small "published: 2024-01-18T22:20:50")) (p ((class "license-info")) (small (a ((href "static/license/license.txt")) "license"))))) \ No newline at end of file diff --git a/utils.rkt b/utils.rkt index a03a077..9e57873 100644 --- a/utils.rkt +++ b/utils.rkt @@ -6,6 +6,14 @@ (define homepage "https://oxaliq.net") +(define git-forge "https://git.bunk.computer/oxaliq/oxaliq.net/src/branch/main/") + +(define (source-url resource-type resource-id) + (~a git-forge + (if (equal? resource-type "root") + "source/" + (~a "source/" resource-type)) + resource-id ".scm")) ;; takes a parsed table as a list of lists and formats for writing as a .csv file (define (list->csv l)