#wanderland — Public Fediverse posts
Live and recent posts from across the Fediverse tagged #wanderland, aggregated by home.social.
-
→ Download Travel Freely and start earning free flights and hotel stays today. Learn More Here: https://my.travelfreely.com/wphome?bref=yhw #TravelStartsNow #glbnom #Wanderland
-
Oh my goodness... I've had a full text search endpoint (powered by ripgrep of course) available in the API for ever and only a slug based search in the UI...
No longer
Hit highlighting, floating widget to scroll hits
The search page filters on viewed / updated / created dates, plus passing through all the useful bits to shape the response.
ripgrep is 💜 when ADHD is life ;)
[I wonder if it can find my keys]
-
Oh my goodness... I've had a full text search endpoint (powered by ripgrep of course) available in the API for ever and only a slug based search in the UI...
No longer
Hit highlighting, floating widget to scroll hits
The search page filters on viewed / updated / created dates, plus passing through all the useful bits to shape the response.
ripgrep is 💜 when ADHD is life ;)
[I wonder if it can find my keys]
-
Ghirija Jayarraj's 'Wanderland' Weaves Dance, Displacement, and Multi-media Narratives
Ghirija Jayarraj's 'Wanderland' performance uses dance, theatre, and film to explore identity, displacement, and family history across Sri Lanka, India, and Australia.
#Wanderland, #GhirijaJayarraj, #DanceTheatre, #DiasporaStories, #MulticulturalArts
https://newsletter.tf/ghirija-jayarraj-wanderland-dance-film-identity/
-
Ghirija Jayarraj's 'Wanderland' performance combines dance, film, and theatre. It explores themes of displacement and identity across Sri Lanka, India, and Australia.
#Wanderland, #GhirijaJayarraj, #DanceTheatre, #DiasporaStories, #MulticulturalArts
https://newsletter.tf/ghirija-jayarraj-wanderland-dance-film-identity/ -
SmolChalk :: if SmallTalk and Erlang had a baby and it was web components for kids and it composed itself out of markdown and YAML
Just a bunch of little things that mostly don't suck all doing their best to give your children a place to learn whatever you can think of, and letting them explore and learn from the environment they're learning in while they do so.
#humantools #computingforlittles #smoldata #smolchalk #wanderland
-
SmolChalk :: if SmallTalk and Erlang had a baby and it was web components for kids and it composed itself out of markdown and YAML
Just a bunch of little things that mostly don't suck all doing their best to give your children a place to learn whatever you can think of, and letting them explore and learn from the environment they're learning in while they do so.
#humantools #computingforlittles #smoldata #smolchalk #wanderland
-
Anyone following along probably has questions about just how the heck we're using a single YAML fence in a Markdown file as shared storage for multiple users?
Well we're not.
The <oculus-fence> Web Component assigns as session id the first time one is called. The rest of them share the same id while until the session expires. The `write_path` method intercepts calls containing X-Wanderland-Client-Id and cuts them their own slice of the universe - an overlay driver tracking an append-only list of updates made by that session.
Replay on read. Multi-player ready. Collision proof updating.
Game on Wayne. Game on Goose
-
Anyone following along probably has questions about just how the heck we're using a single YAML fence in a Markdown file as shared storage for multiple users?
Well we're not.
The <oculus-fence> Web Component assigns as session id the first time one is called. The rest of them share the same id while until the session expires. The `write_path` method intercepts calls containing X-Wanderland-Client-Id and cuts them their own slice of the universe - an overlay driver tracking an append-only list of updates made by that session.
Replay on read. Multi-player ready. Collision proof updating.
Game on Wayne. Game on Goose
-
It's Monday night, your daughter is at dance and you're stuck in town at the library waiting for her...
[As you do]
You're bored
[As you do]
What do you do?
Goose Pong Mobile
[As you do]
PEEK / POKE / EXECUTE
state = peek('goose-pong:game-state.yaml')
poke('goose-pong:game-state.yaml', state)
execute('goose-pong:board', action='poke_cell', params={'row': ball_row, 'col': ball_col, 'value': '🪩'})
[As you were]
-
It's Monday night, your daughter is at dance and you're stuck in town at the library waiting for her...
[As you do]
You're bored
[As you do]
What do you do?
Goose Pong Mobile
[As you do]
PEEK / POKE / EXECUTE
state = peek('goose-pong:game-state.yaml')
poke('goose-pong:game-state.yaml', state)
execute('goose-pong:board', action='poke_cell', params={'row': ball_row, 'col': ball_col, 'value': '🪩'})
[As you were]
-
"""
Hello World!
"""
--- wanderland, as to you, inviting you to try executable markdown -
"""
Hello World!
"""
--- wanderland, as to you, inviting you to try executable markdown -
"""
Shut-up and take my money!
"""
--- you, after seeing goose-pong played in a Markdown file in a browser===
Wanderland is built on executable Markdown - think Jupyter, but you know... not those bits...
Markdown has ```code-fences, they're normally used for presentation. But semantics are semantics and MDAST is perfectly happy to pop them out of the tree so we'll take advantage of that to turn them into lovely little addressable distributed functions.
And then we'll wrap them in Web Components to bring them to life (or Emacs, or Neovim, or you know... whatever can talk to a simple HTTP API)
<oculus-fence> exposes a function
<oculus-node> exposes some text (in this case a Markdown table standing in as our beer pong table)new-game resets the game
take-turn ... takes a turn ;)Here we go
#emacs #orgmode #jupyter #smoldata #wanderland #devops #devops_you_say_as_a_question_but_of_course_i_say_as_an_answer_distributed_functions_build_platforms
-
"""
Shut-up and take my money!
"""
--- you, after seeing goose-pong played in a Markdown file in a browser===
Wanderland is built on executable Markdown - think Jupyter, but you know... not those bits...
Markdown has ```code-fences, they're normally used for presentation. But semantics are semantics and MDAST is perfectly happy to pop them out of the tree so we'll take advantage of that to turn them into lovely little addressable distributed functions.
And then we'll wrap them in Web Components to bring them to life (or Emacs, or Neovim, or you know... whatever can talk to a simple HTTP API)
<oculus-fence> exposes a function
<oculus-node> exposes some text (in this case a Markdown table standing in as our beer pong table)new-game resets the game
take-turn ... takes a turn ;)Here we go
#emacs #orgmode #jupyter #smoldata #wanderland #devops #devops_you_say_as_a_question_but_of_course_i_say_as_an_answer_distributed_functions_build_platforms
-
"""
How does that make money for business?
"""
--- my mom, a harsh critic+++
Executable Markdown means executable markdown - fences are functions, the file is the I/O surface
-
"""
How does that make money for business?
"""
--- my mom, a harsh critic+++
Executable Markdown means executable markdown - fences are functions, the file is the I/O surface
-
"""
Ooh...
"""
--- he, after having a go at this===
Wanderland runs on executable Markdown. Code fences become distributed functions. Patterns in the structure of the text become API surfaces (to-do lists, tables, changelogs...).
Lantern is the rendering engine in front of the graph built on custom Web Components with a two phase rendering pipeline: server side they expand with static content and a hydration marker for non-js enabled friends, client side detects the marker and explodes them into lovely rich, interactive control surfaces
Like this one, for running those embedded fences.
Take a Markdown document, write some code in it. Now you have a tool.
Write some prose around it. Now you have a documented tool.
Write a YAML block in it. Now you have a data store.
Run it and push it to git. Now you have an audit trail
Neat
-
"""
Ooh...
"""
--- he, after having a go at this===
Wanderland runs on executable Markdown. Code fences become distributed functions. Patterns in the structure of the text become API surfaces (to-do lists, tables, changelogs...).
Lantern is the rendering engine in front of the graph built on custom Web Components with a two phase rendering pipeline: server side they expand with static content and a hydration marker for non-js enabled friends, client side detects the marker and explodes them into lovely rich, interactive control surfaces
Like this one, for running those embedded fences.
Take a Markdown document, write some code in it. Now you have a tool.
Write some prose around it. Now you have a documented tool.
Write a YAML block in it. Now you have a data store.
Run it and push it to git. Now you have an audit trail
Neat
-
"""
Ooh...
"""
--- he, after having a go at this===
Wanderland runs on executable Markdown. Code fences become distributed functions. Patterns in the structure of the text become API surfaces (to-do lists, tables, changelogs...).
Lantern is the rendering engine in front of the graph built on custom Web Components with a two phase rendering pipeline: server side they expand with static content and a hydration marker for non-js enabled friends, client side detects the marker and explodes them into lovely rich, interactive control surfaces
Like this one, for running those embedded fences.
Take a Markdown document, write some code in it. Now you have a tool.
Write some prose around it. Now you have a documented tool.
Write a YAML block in it. Now you have a data store.
Run it and push it to git. Now you have an audit trail
Neat
-
"""
Ooh...
"""
--- he, after having a go at this===
Wanderland runs on executable Markdown. Code fences become distributed functions. Patterns in the structure of the text become API surfaces (to-do lists, tables, changelogs...).
Lantern is the rendering engine in front of the graph built on custom Web Components with a two phase rendering pipeline: server side they expand with static content and a hydration marker for non-js enabled friends, client side detects the marker and explodes them into lovely rich, interactive control surfaces
Like this one, for running those embedded fences.
Take a Markdown document, write some code in it. Now you have a tool.
Write some prose around it. Now you have a documented tool.
Write a YAML block in it. Now you have a data store.
Run it and push it to git. Now you have an audit trail
Neat
-
"""
Ooh...
"""
--- he, after having a go at this===
Wanderland runs on executable Markdown. Code fences become distributed functions. Patterns in the structure of the text become API surfaces (to-do lists, tables, changelogs...).
Lantern is the rendering engine in front of the graph built on custom Web Components with a two phase rendering pipeline: server side they expand with static content and a hydration marker for non-js enabled friends, client side detects the marker and explodes them into lovely rich, interactive control surfaces
Like this one, for running those embedded fences.
Take a Markdown document, write some code in it. Now you have a tool.
Write some prose around it. Now you have a documented tool.
Write a YAML block in it. Now you have a data store.
Run it and push it to git. Now you have an audit trail
Neat
-
"""
Of course
"""
--- he, answering the obvious question about themability -
"""
Of course
"""
--- he, answering the obvious question about themability -
When you're building tools, it's important that you meet people where they are.
That means building your core with a surface area that can be consumed as broadly as possible, with as little effort as possible.
That requires careful consideration. Usually, you need to get a lot of people in the room. Make big decisions.
[PEEK/POKE/EXECUTE]
It doesn't have to be hard. What you're going to be doing is going to boil down to one of those things anyways
[Reading/Writing/Rithmaticing]
Make it easy on yourself, smoldata is your data. Little things compose into lovely ones
-
When you're building tools, it's important that you meet people where they are.
That means building your core with a surface area that can be consumed as broadly as possible, with as little effort as possible.
That requires careful consideration. Usually, you need to get a lot of people in the room. Make big decisions.
[PEEK/POKE/EXECUTE]
It doesn't have to be hard. What you're going to be doing is going to boil down to one of those things anyways
[Reading/Writing/Rithmaticing]
Make it easy on yourself, smoldata is your data. Little things compose into lovely ones
-
That's better.
I'm not sure why everyone assumes /cyan/ of all colours should be the primary one when 💜 was right there
Here's Neovim doing things that normally only the `org-babel` folk get to do
Wanderland is built on the idea that computing shouldn't be opaque:
See a thing, want a thing, have a thing
In this case, I want to have the code fences in any Markdown node loaded in the graph be fully composable, distributed functions.
So I could run them in my editor.
Or from the CLI
Or so Claude could play along
As you do
Neat
-
That's better.
I'm not sure why everyone assumes /cyan/ of all colours should be the primary one when 💜 was right there
Here's Neovim doing things that normally only the `org-babel` folk get to do
Wanderland is built on the idea that computing shouldn't be opaque:
See a thing, want a thing, have a thing
In this case, I want to have the code fences in any Markdown node loaded in the graph be fully composable, distributed functions.
So I could run them in my editor.
Or from the CLI
Or so Claude could play along
As you do
Neat
-
That's better.
I'm not sure why everyone assumes /cyan/ of all colours should be the primary one when 💜 was right there
Here's Neovim doing things that normally only the `org-babel` folk get to do
Wanderland is built on the idea that computing shouldn't be opaque:
See a thing, want a thing, have a thing
In this case, I want to have the code fences in any Markdown node loaded in the graph be fully composable, distributed functions.
So I could run them in my editor.
Or from the CLI
Or so Claude could play along
As you do
Neat
-
Oh Neovim, I didn't forget you
Same API
Same Markdown
Same YAML(slightly different bindings... I need to clean that up)
Oculus is /OK/ at this. Two things I learned.
1. Event source all of the things
2. See 1`wanderland-core` is the result.
As a wise man with nice socks once said "Build back better"
-
Oh Neovim, I didn't forget you
Same API
Same Markdown
Same YAML(slightly different bindings... I need to clean that up)
Oculus is /OK/ at this. Two things I learned.
1. Event source all of the things
2. See 1`wanderland-core` is the result.
As a wise man with nice socks once said "Build back better"
-
Oh Neovim, I didn't forget you
Same API
Same Markdown
Same YAML(slightly different bindings... I need to clean that up)
Oculus is /OK/ at this. Two things I learned.
1. Event source all of the things
2. See 1`wanderland-core` is the result.
As a wise man with nice socks once said "Build back better"
-
Oh my goodness! I forgot about this too
At the core of Wanderland is this thing I call computational Markdown
[think Jupyter without all the hasslee]
Can't be Turing complete without loops and conditionals and in a declarative world, you get there with composition
When you need to test things that need to be a bit fluid well...
When your knowledge graph has RPG semantics, you need a character sheet.
Change one value and the entire thing shifts with it.
Just Markdown with a bit of YAML in it
Neat
-
Oh my goodness! I forgot about this too
At the core of Wanderland is this thing I call computational Markdown
[think Jupyter without all the hasslee]
Can't be Turing complete without loops and conditionals and in a declarative world, you get there with composition
When you need to test things that need to be a bit fluid well...
When your knowledge graph has RPG semantics, you need a character sheet.
Change one value and the entire thing shifts with it.
Just Markdown with a bit of YAML in it
Neat
-
Carrying on from yesterday's work to make mo' mode lines...
Wanderland uses the idea of Detective Cases to represent tasks. It gives the work a framing that helps get your agent in the mood to dive into things and take a lot of notes if you play along
[the assistant activation space doesn't have to stay where Anthropic wants it to be - they're theatre kids after all, play to their strengths]
A case is a simple object of metadata + events. You can embed a <task-case> node anywhere you need something like that. Cases for sure, but comments on documents, guestbooks on public pages, the wild rantings and ravings on an old man...
And with two Web Components, I've replaced about 1K LOC of hand rolled templating
[and you can drop them anywhere, it's just Markdown with a bit of YAML in it]
Neat
-
Carrying on from yesterday's work to make mo' mode lines...
Wanderland uses the idea of Detective Cases to represent tasks. It gives the work a framing that helps get your agent in the mood to dive into things and take a lot of notes if you play along
[the assistant activation space doesn't have to stay where Anthropic wants it to be - they're theatre kids after all, play to their strengths]
A case is a simple object of metadata + events. You can embed a <task-case> node anywhere you need something like that. Cases for sure, but comments on documents, guestbooks on public pages, the wild rantings and ravings on an old man...
And with two Web Components, I've replaced about 1K LOC of hand rolled templating
[and you can drop them anywhere, it's just Markdown with a bit of YAML in it]
Neat
-
If you've never watched a letter based cellular automata try to spell "knowledge", "tasks" and "graph" while you're eating a bowl of ice cream and watching Chuck from the Buy-More play Jack Ryan on TV...
... it's an interesting way to finish off a Friday
-
If you've never watched a letter based cellular automata try to spell "knowledge", "tasks" and "graph" while you're eating a bowl of ice cream and watching Chuck from the Buy-More play Jack Ryan on TV...
... it's an interesting way to finish off a Friday
-
Documentation drifts, doubly so when Claude's involved
When it matters, it helps to have eyes on
In Wanderland, that means provenance and that means Web Components
On the page, a mode line presents the current document hash, its version and whether or not the contents have drifted since the last checkpoint - because you never know who's might have POKE'd what
Provenance is tracked in the site configuration, release is calculated from the change log
Event source revision control... why not?
-
Documentation drifts, doubly so when Claude's involved
When it matters, it helps to have eyes on
In Wanderland, that means provenance and that means Web Components
On the page, a mode line presents the current document hash, its version and whether or not the contents have drifted since the last checkpoint - because you never know who's might have POKE'd what
Provenance is tracked in the site configuration, release is calculated from the change log
Event source revision control... why not?
-
Knowledge work generates a lot of artifacts - documents, code, tasks, conversations.
Wanderland organizes these as linked nodes in a shared graph... with benefits
It's a graph-native platform for situated knowledge [and it's a lot of fun]
#ruby #selfhosted #platformengineering #wanderland #basicisnotboring
-
Knowledge work generates a lot of artifacts - documents, code, tasks, conversations.
Wanderland organizes these as linked nodes in a shared graph... with benefits
It's a graph-native platform for situated knowledge [and it's a lot of fun]
#ruby #selfhosted #platformengineering #wanderland #basicisnotboring
-
Heh... can your microblog do this?
Yes... I'm looking directly at you BlueSky and your "convenient" lack of an edit button
===
Wanderland - just some markdown with a bit of YAML in it
[and yes, there are emacs and neovim keybinds, I'm not an animal]
-
Heh... can your microblog do this?
Yes... I'm looking directly at you BlueSky and your "convenient" lack of an edit button
===
Wanderland - just some markdown with a bit of YAML in it
[and yes, there are emacs and neovim keybinds, I'm not an animal]
-
Heh... can your microblog do this?
Yes... I'm looking directly at you BlueSky and your "convenient" lack of an edit button
===
Wanderland - just some markdown with a bit of YAML in it
[and yes, there are emacs and neovim keybinds, I'm not an animal]
-
The payoff of using Web Components in your platform is that you can remix and compose them
They're the web equivalent of Lego MindStorms - little computational blocks of joy
Be kind to yourself and make them self contained. Emits and Subscribes, nothing coupled
And then the fun begins
===
I've got a blog that I use to tell stories on how to build things
And it needed to show real specs, so component was needed
And now it's everywhere
[including inside itself
[including inside itself
[including inside itself
<not scrolling any more>
]]] -
The payoff of using Web Components in your platform is that you can remix and compose them
They're the web equivalent of Lego MindStorms - little computational blocks of joy
Be kind to yourself and make them self contained. Emits and Subscribes, nothing coupled
And then the fun begins
===
I've got a blog that I use to tell stories on how to build things
And it needed to show real specs, so component was needed
And now it's everywhere
[including inside itself
[including inside itself
[including inside itself
<not scrolling any more>
]]] -
"Now", you say, "why the heck aren't you using a real framework React like a grown up?"
"Because", I say, "I have a low tolerance for pain and a high tolerance for extremely empathetic systems, and the most empathetic systems are those the user can compose themselves."
"After all", he concluded, "not everyone works the same and your tools should meet your users where they are. Wherever that might be"
-
"Now", you say, "why the heck aren't you using a real framework React like a grown up?"
"Because", I say, "I have a low tolerance for pain and a high tolerance for extremely empathetic systems, and the most empathetic systems are those the user can compose themselves."
"After all", he concluded, "not everyone works the same and your tools should meet your users where they are. Wherever that might be"
-
There she is in all her glory
Document focused means the control surface should ideally get out da way
That's what mode lines are for.
Wanderland uses a Case system for task tracking
[theatre kids love playing detective]
The mode line injected at the top of the case detail page starts collapsed, but expands to give you access to everything you might need, including links to the rest of the system and beyond
===
Like emacs, which has a completely isomorphic control plane (same API, same surface)
Cuz... why wouldn't you?
-
There she is in all her glory
Document focused means the control surface should ideally get out da way
That's what mode lines are for.
Wanderland uses a Case system for task tracking
[theatre kids love playing detective]
The mode line injected at the top of the case detail page starts collapsed, but expands to give you access to everything you might need, including links to the rest of the system and beyond
===
Like emacs, which has a completely isomorphic control plane (same API, same surface)
Cuz... why wouldn't you?
-
"""
Well hello there beautiful
"""
--- me, a moment ago, for no reason in particular===
The mode line refactor in progress. Isn't that lovely?
Serif text, dark on cream
Straight lines
Just a splash of colour to draw the eye
Like Gutenburg intended
-
"""
Well hello there beautiful
"""
--- me, a moment ago, for no reason in particular===
The mode line refactor in progress. Isn't that lovely?
Serif text, dark on cream
Straight lines
Just a splash of colour to draw the eye
Like Gutenburg intended
-
API | CLI | Test
The test fixture is the same as the production config
The test harness is its own application, same format, the YAML loads the YAML that tests itself
[this guy has a thing for YAML]
And you can run it yourself, make sure things are still working
The same configuration projects all three faces, because when it's 2am and you just want to get back to bed, the test is the tool is the thing you need.
-
API | CLI | Test
The test fixture is the same as the production config
The test harness is its own application, same format, the YAML loads the YAML that tests itself
[this guy has a thing for YAML]
And you can run it yourself, make sure things are still working
The same configuration projects all three faces, because when it's 2am and you just want to get back to bed, the test is the tool is the thing you need.
-
Fixtures in Wanderland are fully formed applications
Applications in Wanderland are just YAML files
YAML files in Wanderland define routes as boundary chains with conditions
Routes in Wanderland are isomorphic - the engine dispatches the same shape with Rack for HTTP, Commander for CLI and RSpec for testing
Cuz when you've got a platform to support, who's got time to repeat themselves?
-
Fixtures in Wanderland are fully formed applications
Applications in Wanderland are just YAML files
YAML files in Wanderland define routes as boundary chains with conditions
Routes in Wanderland are isomorphic - the engine dispatches the same shape with Rack for HTTP, Commander for CLI and RSpec for testing
Cuz when you've got a platform to support, who's got time to repeat themselves?
-
Mode lines and status bars
Same function, different location. Information at a glance, quick interactions
Wanderland uses modelines as its primary interface mechanism for interacting with documents
Each indicator in the bar maps to one of its expanded functions. Quick access and status
-
Mode lines and status bars
Same function, different location. Information at a glance, quick interactions
Wanderland uses modelines as its primary interface mechanism for interacting with documents
Each indicator in the bar maps to one of its expanded functions. Quick access and status
-
This is cool.
AI is going to write stuff. It just is.
You're going to read it, you're going to edit it, you're going to rewrite it when necessary
And then you're going to sign it, just a little hash in the YAML that declares the site
And that little modeline at the top of the page won't let it lie. If the content, drifts that lovely little splash of colour will remind you.
Never fear, hashing API bound to Emacs and Neovim integrations provides an updated hash in your kill ring. Add a new changelog entry and everyone can be sure that your documentation is that good ol' organic, stick to your ribs variety