I'm very actively undecided about how I think AI should be used to write code, or really at all, but if you're having AI write apps for you, and want to try having it write them so that their data and algorithms are open to inspection, here's an AI-written Skill for that. dactal.org/dactal.html?...
DACTAL.org
@dactal.org
A notional organization for an experimental query language.
If you hate punctuation-centric data tools, DACTAL has both bad news and good news for you. furia.com/log/523
Extensions are accumulating. Here's a geo adapter feeding into a weather adapter feeding into a map renderer. Europe .search countries .weather forecast |temp=(.history@1.temperature_2m_max) ...map=(...colorField=temp,width=700,height=700) |data-of
Club teammates, but World Cup group opponents? Yes, several. dactal.org?dbname=wc202...
DACTAL
dactal.org
If you haven't learned what >> and << and ~~ do, it's too late because they don't do anything any more.
I've made some changes that are either exciting or too geeky to comprehend, depending on how geeky you are. I'll post about them, but if you have any trouble in the meantime, you can use dactal1.js to keep using the previous version.
And if you want a bizarrely oblique quasi-command-line interface to Spotify and Apple Music at once, there's also dactal.org/curiax.html
DACTAL Apple/Spotify cross-explorer
dactal.org
There are services that will magically move your music collection from one service to another. But we don't have to put up with secret magic and what if we didn't?
Hmm, what about a query that traverses music services?
Data navigation. (dactal.org/curiam.html – you'll need Apple Music for this one, and tolerance for a deliberately unadorned state.)
You have a rack with no good Scrabble plays. Which tile is the best to unload? Here's that question asked in DACTAL.
Structurally tiny but useful addition. Inverting a graph arc can now be done like this: .inverse name>forward property E.g., in data where each album has track objects, but the tracks don't refer back to their album: .album>tracks adds an "album" property to each track while traversing.
Tiny additions. Filtering items that have any, or no, values for a property can now be done with: :property+ :property- as shorthand for the subquery forms: :(.property) :-(.property) But the subquery forms are still needed for any path more complicated than a single property.
I should pretend I designed this feature intentionally, but in reality I just realized that because something/someprop.10 gives us the first 10 items from each group, you can also truncate each group to 10 items in place, like this: something/someprop|of=10
The Gallery now includes a DACTAL Sudoku solver! Or, more accurately, a Sudoku solution-process revealer. dactal.org/dactal.html?...
This may not interest you until you suddenly hit a case where you need it, but you can now short-circuit a traverse operation when it gets its first results, like this: some data.<(.some expensive subquery) instead of running the subquery N times only to throw away N-1 of the results.
DACTAL,ATProto.fun
BlueSky is not just an app, it's an experiment in public data, but the experiment is hidden under a normal-looking app that doesn't really give you different powers than you have elsewhere. If you're curious to see under this surface, I made a thing to help. Explained here: furia.com/log/518
A start/labeling operation can append to the existing list with ?label=+(subquery) ??label=+(subquery) And a start operation can use the value ONLY as a reference with =label =type Thus this form for setting a label if it isn't already set: ??district size=(=district size;~1000)
Sometimes you want (or just need) the results of another query in the middle of the one you're writing. Highlight the subquery and hit Command-U to unpack it.
Saved relative queries let you encapsulate complexity, like AEIODLT .possible words .by added letter And now you can decapsulate it again with command-I (for Inline).
Also: added regex filtering. And then, only a little later, added documentation of regex filtering.
If anybody can vibe-code embryonic ideas into slick apps, we're gonna get a lot of slick apps sealed airlessly around ideas that never got a chance to become. I want the opposite of that, unslick explorers of exposed exologic. We only start at the beginning. dactal.org/Scrabble.html
Yesterday's excellent tiny realization: subtractive traversal is a set-disjunction operation, but subtractive traversal with duplicates is itemwise removal. ...x=(1,1,2,2,3,3),y=(2) .x,-y → 1,3 ..x,y → 1,1,2,3,3
On one hand, we already know all the prime numbers below 1000. On the other, here's the Sieve of Eratosthenes in a DACTAL query. dactal.org/dactal.html?...
DACTAL
dactal.org
I give you your carets back. ^ and ^^ for comments have been replaced by ??? for notes, so ^ is no longer a reserved character. ??? your notes here Notes in DACTAL are a null operation, not meta-text, which has some cool implications that I haven't thought of yet.
I moved the inline-math handling to a more sensible place in the resolution process, so now you can use it in traversal, grouping, sorting, or either form of annotation.
Realized and fixed an early-implementation laziness that evaluated :x=y as :(.x:@1:=y) instead of :(.x:=y)