A small tool to view real-world ActivityPub objects as JSON! Enter a URL
or username from Mastodon or a similar service below, and we'll send a
request with
the right
Accept
header
to the server to view the underlying object.
{
"@context": [
"https://www.w3.org/ns/activitystreams",
{
"ostatus": "http://ostatus.org#",
"atomUri": "ostatus:atomUri",
"inReplyToAtomUri": "ostatus:inReplyToAtomUri",
"conversation": "ostatus:conversation",
"sensitive": "as:sensitive",
"toot": "http://joinmastodon.org/ns#",
"votersCount": "toot:votersCount",
"litepub": "http://litepub.social/ns#",
"directMessage": "litepub:directMessage",
"blurhash": "toot:blurhash",
"focalPoint": {
"@container": "@list",
"@id": "toot:focalPoint"
},
"Hashtag": "as:Hashtag"
}
],
"id": "https://mastodon.thi.ng/users/toxi/collections/featured",
"type": "OrderedCollection",
"totalItems": 5,
"orderedItems": [
{
"id": "https://mastodon.thi.ng/users/toxi/statuses/113653808287560907",
"type": "Note",
"summary": null,
"inReplyTo": null,
"published": "2024-12-14T23:38:06Z",
"url": "https://mastodon.thi.ng/@toxi/113653808287560907",
"attributedTo": "https://mastodon.thi.ng/users/toxi",
"to": [
"https://www.w3.org/ns/activitystreams#Public"
],
"cc": [
"https://mastodon.thi.ng/users/toxi/followers"
],
"sensitive": false,
"atomUri": "https://mastodon.thi.ng/users/toxi/statuses/113653808287560907",
"inReplyToAtomUri": null,
"conversation": "tag:mastodon.thi.ng,2024-12-14:objectId=1293606:objectType=Conversation",
"content": "<p>New work: <a href=\"https://mastodon.thi.ng/tags/ALLUVION\" class=\"mention hashtag\" rel=\"tag\">#<span>ALLUVION</span></a></p><p>Over the past two months I've been actively revisiting, updating/extending and now close to finishing this 1.5 year long journey... The actual journey has been much longer, been toying with (faux) fluid sims since ~2007...</p><p>A 50 second preview of one of my fave variations, best enjoyed fullscreen... Tried to achieve some molten, dichroic/irridescent glass & oilfilm aesthetics here, but there're over a dozen of other very different routes/styles possible too, with 25+ parameters to tweak the simulation and look & feel...</p><p>Made with <a href=\"https://thi.ng/shader-ast\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"\">thi.ng/shader-ast</span><span class=\"invisible\"></span></a> & <a href=\"https://thi.ng/shader-ast-stdlib\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"\">thi.ng/shader-ast-stdlib</span><span class=\"invisible\"></span></a></p><p><a href=\"https://mastodon.thi.ng/tags/Art\" class=\"mention hashtag\" rel=\"tag\">#<span>Art</span></a> <a href=\"https://mastodon.thi.ng/tags/FluidSim\" class=\"mention hashtag\" rel=\"tag\">#<span>FluidSim</span></a> <a href=\"https://mastodon.thi.ng/tags/FlowField\" class=\"mention hashtag\" rel=\"tag\">#<span>FlowField</span></a> <a href=\"https://mastodon.thi.ng/tags/Noise\" class=\"mention hashtag\" rel=\"tag\">#<span>Noise</span></a> <a href=\"https://mastodon.thi.ng/tags/Turbulence\" class=\"mention hashtag\" rel=\"tag\">#<span>Turbulence</span></a> <a href=\"https://mastodon.thi.ng/tags/ShaderAST\" class=\"mention hashtag\" rel=\"tag\">#<span>ShaderAST</span></a> <a href=\"https://mastodon.thi.ng/tags/ThingUmbrella\" class=\"mention hashtag\" rel=\"tag\">#<span>ThingUmbrella</span></a> <a href=\"https://mastodon.thi.ng/tags/TypeScript\" class=\"mention hashtag\" rel=\"tag\">#<span>TypeScript</span></a> <a href=\"https://mastodon.thi.ng/tags/GLSL\" class=\"mention hashtag\" rel=\"tag\">#<span>GLSL</span></a> <a href=\"https://mastodon.thi.ng/tags/WebGL\" class=\"mention hashtag\" rel=\"tag\">#<span>WebGL</span></a> <a href=\"https://mastodon.thi.ng/tags/GenerativeArt\" class=\"mention hashtag\" rel=\"tag\">#<span>GenerativeArt</span></a> <a href=\"https://mastodon.thi.ng/tags/Animation\" class=\"mention hashtag\" rel=\"tag\">#<span>Animation</span></a></p>",
"contentMap": {
"en": "<p>New work: <a href=\"https://mastodon.thi.ng/tags/ALLUVION\" class=\"mention hashtag\" rel=\"tag\">#<span>ALLUVION</span></a></p><p>Over the past two months I've been actively revisiting, updating/extending and now close to finishing this 1.5 year long journey... The actual journey has been much longer, been toying with (faux) fluid sims since ~2007...</p><p>A 50 second preview of one of my fave variations, best enjoyed fullscreen... Tried to achieve some molten, dichroic/irridescent glass & oilfilm aesthetics here, but there're over a dozen of other very different routes/styles possible too, with 25+ parameters to tweak the simulation and look & feel...</p><p>Made with <a href=\"https://thi.ng/shader-ast\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"\">thi.ng/shader-ast</span><span class=\"invisible\"></span></a> & <a href=\"https://thi.ng/shader-ast-stdlib\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"\">thi.ng/shader-ast-stdlib</span><span class=\"invisible\"></span></a></p><p><a href=\"https://mastodon.thi.ng/tags/Art\" class=\"mention hashtag\" rel=\"tag\">#<span>Art</span></a> <a href=\"https://mastodon.thi.ng/tags/FluidSim\" class=\"mention hashtag\" rel=\"tag\">#<span>FluidSim</span></a> <a href=\"https://mastodon.thi.ng/tags/FlowField\" class=\"mention hashtag\" rel=\"tag\">#<span>FlowField</span></a> <a href=\"https://mastodon.thi.ng/tags/Noise\" class=\"mention hashtag\" rel=\"tag\">#<span>Noise</span></a> <a href=\"https://mastodon.thi.ng/tags/Turbulence\" class=\"mention hashtag\" rel=\"tag\">#<span>Turbulence</span></a> <a href=\"https://mastodon.thi.ng/tags/ShaderAST\" class=\"mention hashtag\" rel=\"tag\">#<span>ShaderAST</span></a> <a href=\"https://mastodon.thi.ng/tags/ThingUmbrella\" class=\"mention hashtag\" rel=\"tag\">#<span>ThingUmbrella</span></a> <a href=\"https://mastodon.thi.ng/tags/TypeScript\" class=\"mention hashtag\" rel=\"tag\">#<span>TypeScript</span></a> <a href=\"https://mastodon.thi.ng/tags/GLSL\" class=\"mention hashtag\" rel=\"tag\">#<span>GLSL</span></a> <a href=\"https://mastodon.thi.ng/tags/WebGL\" class=\"mention hashtag\" rel=\"tag\">#<span>WebGL</span></a> <a href=\"https://mastodon.thi.ng/tags/GenerativeArt\" class=\"mention hashtag\" rel=\"tag\">#<span>GenerativeArt</span></a> <a href=\"https://mastodon.thi.ng/tags/Animation\" class=\"mention hashtag\" rel=\"tag\">#<span>Animation</span></a></p>"
},
"attachment": [
{
"type": "Document",
"mediaType": "video/mp4",
"url": "https://mastothing.files.fedi.monster/media_attachments/files/113/653/807/901/575/420/original/cfdb7384737aad84.mp4",
"name": "50 second screencapture of a realtime animated fluidsim showing expanding & interacting droplets of a faux, somewhat lightly viscous liquid, accumulating in thin layers, but constantly diffusing/mixing/fading. The droplets are initially tinted in purple, fading to black and then temportarily transitioning into an molten glass phase before vanishing... The thi.ng logo/watermark is overlayed in the center",
"blurhash": "U76a#Pxb00NGRoRjWTof01og_3oJRkaia$oy",
"width": 960,
"height": 960
}
],
"tag": [
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/alluvion",
"name": "#alluvion"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/art",
"name": "#art"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/fluidsim",
"name": "#fluidsim"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/flowfield",
"name": "#flowfield"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/noise",
"name": "#noise"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/turbulence",
"name": "#turbulence"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/shaderast",
"name": "#shaderast"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/thingumbrella",
"name": "#thingumbrella"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/typescript",
"name": "#typescript"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/glsl",
"name": "#glsl"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/webgl",
"name": "#webgl"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/generativeart",
"name": "#generativeart"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/animation",
"name": "#animation"
}
],
"replies": {
"id": "https://mastodon.thi.ng/users/toxi/statuses/113653808287560907/replies",
"type": "Collection",
"first": {
"type": "CollectionPage",
"next": "https://mastodon.thi.ng/users/toxi/statuses/113653808287560907/replies?only_other_accounts=true&page=true",
"partOf": "https://mastodon.thi.ng/users/toxi/statuses/113653808287560907/replies",
"items": []
}
},
"likes": {
"id": "https://mastodon.thi.ng/users/toxi/statuses/113653808287560907/likes",
"type": "Collection",
"totalItems": 27
},
"shares": {
"id": "https://mastodon.thi.ng/users/toxi/statuses/113653808287560907/shares",
"type": "Collection",
"totalItems": 9
}
},
{
"id": "https://mastodon.thi.ng/users/toxi/statuses/112733351936263849",
"type": "Note",
"summary": null,
"inReplyTo": null,
"published": "2024-07-05T10:13:57Z",
"url": "https://mastodon.thi.ng/@toxi/112733351936263849",
"attributedTo": "https://mastodon.thi.ng/users/toxi",
"to": [
"https://www.w3.org/ns/activitystreams#Public"
],
"cc": [
"https://mastodon.thi.ng/users/toxi/followers"
],
"sensitive": false,
"atomUri": "https://mastodon.thi.ng/users/toxi/statuses/112733351936263849",
"inReplyToAtomUri": null,
"conversation": "tag:mastodon.thi.ng,2024-07-05:objectId=870332:objectType=Conversation",
"content": "<p>I've created & uploaded video previews of a few more <a href=\"https://mastodon.thi.ng/tags/LinearMemory\" class=\"mention hashtag\" rel=\"tag\">#<span>LinearMemory</span></a> variations & recommend the download versions for best quality (HD720p @ 60fps)... The actual piece is a realtime (browser based), endless and non-repeating animation. The only things left now are further optimizations and making it dynamically adaptive to different screen/print sizes...</p><p><a href=\"https://drive.google.com/drive/folders/1y1WWZmQjIsbD5lmlPg0jpQmrLLCv2yCB?usp=sharing\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">drive.google.com/drive/folders</span><span class=\"invisible\">/1y1WWZmQjIsbD5lmlPg0jpQmrLLCv2yCB?usp=sharing</span></a></p><p>Enjoy!</p><p><a href=\"https://mastodon.thi.ng/tags/Generative\" class=\"mention hashtag\" rel=\"tag\">#<span>Generative</span></a> <a href=\"https://mastodon.thi.ng/tags/Art\" class=\"mention hashtag\" rel=\"tag\">#<span>Art</span></a> <a href=\"https://mastodon.thi.ng/tags/GenerativeArt\" class=\"mention hashtag\" rel=\"tag\">#<span>GenerativeArt</span></a> <a href=\"https://mastodon.thi.ng/tags/Color\" class=\"mention hashtag\" rel=\"tag\">#<span>Color</span></a> <a href=\"https://mastodon.thi.ng/tags/Pixel\" class=\"mention hashtag\" rel=\"tag\">#<span>Pixel</span></a> <a href=\"https://mastodon.thi.ng/tags/Glitch\" class=\"mention hashtag\" rel=\"tag\">#<span>Glitch</span></a> <a href=\"https://mastodon.thi.ng/tags/Texture\" class=\"mention hashtag\" rel=\"tag\">#<span>Texture</span></a> <a href=\"https://mastodon.thi.ng/tags/RingBuffer\" class=\"mention hashtag\" rel=\"tag\">#<span>RingBuffer</span></a> <a href=\"https://mastodon.thi.ng/tags/ThingUmbrella\" class=\"mention hashtag\" rel=\"tag\">#<span>ThingUmbrella</span></a> <a href=\"https://mastodon.thi.ng/tags/NoAI\" class=\"mention hashtag\" rel=\"tag\">#<span>NoAI</span></a> <a href=\"https://mastodon.thi.ng/tags/Animation\" class=\"mention hashtag\" rel=\"tag\">#<span>Animation</span></a></p>",
"contentMap": {
"en": "<p>I've created & uploaded video previews of a few more <a href=\"https://mastodon.thi.ng/tags/LinearMemory\" class=\"mention hashtag\" rel=\"tag\">#<span>LinearMemory</span></a> variations & recommend the download versions for best quality (HD720p @ 60fps)... The actual piece is a realtime (browser based), endless and non-repeating animation. The only things left now are further optimizations and making it dynamically adaptive to different screen/print sizes...</p><p><a href=\"https://drive.google.com/drive/folders/1y1WWZmQjIsbD5lmlPg0jpQmrLLCv2yCB?usp=sharing\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">drive.google.com/drive/folders</span><span class=\"invisible\">/1y1WWZmQjIsbD5lmlPg0jpQmrLLCv2yCB?usp=sharing</span></a></p><p>Enjoy!</p><p><a href=\"https://mastodon.thi.ng/tags/Generative\" class=\"mention hashtag\" rel=\"tag\">#<span>Generative</span></a> <a href=\"https://mastodon.thi.ng/tags/Art\" class=\"mention hashtag\" rel=\"tag\">#<span>Art</span></a> <a href=\"https://mastodon.thi.ng/tags/GenerativeArt\" class=\"mention hashtag\" rel=\"tag\">#<span>GenerativeArt</span></a> <a href=\"https://mastodon.thi.ng/tags/Color\" class=\"mention hashtag\" rel=\"tag\">#<span>Color</span></a> <a href=\"https://mastodon.thi.ng/tags/Pixel\" class=\"mention hashtag\" rel=\"tag\">#<span>Pixel</span></a> <a href=\"https://mastodon.thi.ng/tags/Glitch\" class=\"mention hashtag\" rel=\"tag\">#<span>Glitch</span></a> <a href=\"https://mastodon.thi.ng/tags/Texture\" class=\"mention hashtag\" rel=\"tag\">#<span>Texture</span></a> <a href=\"https://mastodon.thi.ng/tags/RingBuffer\" class=\"mention hashtag\" rel=\"tag\">#<span>RingBuffer</span></a> <a href=\"https://mastodon.thi.ng/tags/ThingUmbrella\" class=\"mention hashtag\" rel=\"tag\">#<span>ThingUmbrella</span></a> <a href=\"https://mastodon.thi.ng/tags/NoAI\" class=\"mention hashtag\" rel=\"tag\">#<span>NoAI</span></a> <a href=\"https://mastodon.thi.ng/tags/Animation\" class=\"mention hashtag\" rel=\"tag\">#<span>Animation</span></a></p>"
},
"attachment": [
{
"type": "Document",
"mediaType": "image/png",
"url": "https://mastothing.files.fedi.monster/media_attachments/files/112/733/351/835/237/331/original/f02520f548687f73.png",
"name": "Still frame of one of the linked animation previews, showing a glitchy, multi-layered and multi-colored abstract landscape of layers of pixel patterns of different scales and densities. The white thi.ng logo is overlayed in the center",
"blurhash": "UDHMAFqt9zIVRR_3skIn0LO?x]sAx[jEnoX9",
"width": 1280,
"height": 720
}
],
"tag": [
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/linearmemory",
"name": "#linearmemory"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/generative",
"name": "#generative"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/art",
"name": "#art"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/generativeart",
"name": "#generativeart"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/color",
"name": "#color"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/pixel",
"name": "#pixel"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/glitch",
"name": "#glitch"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/texture",
"name": "#texture"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/ringbuffer",
"name": "#ringbuffer"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/thingumbrella",
"name": "#thingumbrella"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/noai",
"name": "#noai"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/animation",
"name": "#animation"
}
],
"replies": {
"id": "https://mastodon.thi.ng/users/toxi/statuses/112733351936263849/replies",
"type": "Collection",
"first": {
"type": "CollectionPage",
"next": "https://mastodon.thi.ng/users/toxi/statuses/112733351936263849/replies?only_other_accounts=true&page=true",
"partOf": "https://mastodon.thi.ng/users/toxi/statuses/112733351936263849/replies",
"items": []
}
},
"likes": {
"id": "https://mastodon.thi.ng/users/toxi/statuses/112733351936263849/likes",
"type": "Collection",
"totalItems": 13
},
"shares": {
"id": "https://mastodon.thi.ng/users/toxi/statuses/112733351936263849/shares",
"type": "Collection",
"totalItems": 4
}
},
{
"id": "https://mastodon.thi.ng/users/toxi/statuses/111521429001187989",
"type": "Note",
"summary": null,
"inReplyTo": null,
"published": "2023-12-04T09:26:01Z",
"url": "https://mastodon.thi.ng/@toxi/111521429001187989",
"attributedTo": "https://mastodon.thi.ng/users/toxi",
"to": [
"https://www.w3.org/ns/activitystreams#Public"
],
"cc": [
"https://mastodon.thi.ng/users/toxi/followers"
],
"sensitive": false,
"atomUri": "https://mastodon.thi.ng/users/toxi/statuses/111521429001187989",
"inReplyToAtomUri": null,
"conversation": "tag:mastodon.thi.ng,2023-12-04:objectId=431733:objectType=Conversation",
"content": "<p>Truly magical experience, light and frozen fog on our winter walk last night. Simply stunning! -10℃, walking a few kilometers through knee-deep fresh powder snow, thick frozen fog drifting around us, diffusing the last light and creating surreal (almost cliché) colors...</p><p><a href=\"https://mastodon.thi.ng/tags/SilentSunday\" class=\"mention hashtag\" rel=\"tag\">#<span>SilentSunday</span></a> <a href=\"https://mastodon.thi.ng/tags/WinterWonderland\" class=\"mention hashtag\" rel=\"tag\">#<span>WinterWonderland</span></a> <a href=\"https://mastodon.thi.ng/tags/LandscapePhotography\" class=\"mention hashtag\" rel=\"tag\">#<span>LandscapePhotography</span></a> <a href=\"https://mastodon.thi.ng/tags/Photography\" class=\"mention hashtag\" rel=\"tag\">#<span>Photography</span></a> <a href=\"https://mastodon.thi.ng/tags/Winter\" class=\"mention hashtag\" rel=\"tag\">#<span>Winter</span></a> <a href=\"https://mastodon.thi.ng/tags/Snow\" class=\"mention hashtag\" rel=\"tag\">#<span>Snow</span></a> <a href=\"https://mastodon.thi.ng/tags/Fog\" class=\"mention hashtag\" rel=\"tag\">#<span>Fog</span></a> <a href=\"https://mastodon.thi.ng/tags/Sunset\" class=\"mention hashtag\" rel=\"tag\">#<span>Sunset</span></a> <a href=\"https://mastodon.thi.ng/tags/Bayern\" class=\"mention hashtag\" rel=\"tag\">#<span>Bayern</span></a></p>",
"contentMap": {
"en": "<p>Truly magical experience, light and frozen fog on our winter walk last night. Simply stunning! -10℃, walking a few kilometers through knee-deep fresh powder snow, thick frozen fog drifting around us, diffusing the last light and creating surreal (almost cliché) colors...</p><p><a href=\"https://mastodon.thi.ng/tags/SilentSunday\" class=\"mention hashtag\" rel=\"tag\">#<span>SilentSunday</span></a> <a href=\"https://mastodon.thi.ng/tags/WinterWonderland\" class=\"mention hashtag\" rel=\"tag\">#<span>WinterWonderland</span></a> <a href=\"https://mastodon.thi.ng/tags/LandscapePhotography\" class=\"mention hashtag\" rel=\"tag\">#<span>LandscapePhotography</span></a> <a href=\"https://mastodon.thi.ng/tags/Photography\" class=\"mention hashtag\" rel=\"tag\">#<span>Photography</span></a> <a href=\"https://mastodon.thi.ng/tags/Winter\" class=\"mention hashtag\" rel=\"tag\">#<span>Winter</span></a> <a href=\"https://mastodon.thi.ng/tags/Snow\" class=\"mention hashtag\" rel=\"tag\">#<span>Snow</span></a> <a href=\"https://mastodon.thi.ng/tags/Fog\" class=\"mention hashtag\" rel=\"tag\">#<span>Fog</span></a> <a href=\"https://mastodon.thi.ng/tags/Sunset\" class=\"mention hashtag\" rel=\"tag\">#<span>Sunset</span></a> <a href=\"https://mastodon.thi.ng/tags/Bayern\" class=\"mention hashtag\" rel=\"tag\">#<span>Bayern</span></a></p>"
},
"attachment": [
{
"type": "Document",
"mediaType": "image/jpeg",
"url": "https://mastothing.files.fedi.monster/media_attachments/files/111/521/428/717/954/784/original/bd9d9052d734ef2d.jpg",
"name": "View of snowed in trees and hedges in a field and forests in the background. Fog drifting between. The completely clear sky is tinted in a gradient of orange, pink and purple",
"blurhash": "UsL;Efs:tRj[=^ofWCay~Vj@R*fQRjWBoMj[",
"width": 1280,
"height": 879
},
{
"type": "Document",
"mediaType": "image/jpeg",
"url": "https://mastothing.files.fedi.monster/media_attachments/files/111/521/428/718/338/616/original/3ba0ded81bcb007d.jpg",
"name": "View down a small country lane near the edge of a village. The road has been cleared, there's ~50cm of snow pushed up on either side. A dense, but thin fog bank is drifting across, obscuring the road after a few meters. A group of trees and the first houses are clearly visible further back against the orange/purple sunset sky.",
"blurhash": "UfKdlFE2-;xa~ANGjst6~pxaNGWBT0%0R*NH",
"width": 1280,
"height": 880
},
{
"type": "Document",
"mediaType": "image/jpeg",
"url": "https://mastothing.files.fedi.monster/media_attachments/files/111/521/428/717/802/811/original/aeb369d04f61e825.jpg",
"name": "View of a group of snow covered trees (and a power pole further back) behind the fog near the edge of a field. It's close to sunset and the light is being heavily diffused in the fog, creating an intense vanilla/pinkish glow against the silhouettes of the trees",
"blurhash": "UaOo;coJI;j??YWqRkj@~pofs.j[RkoJt6ay",
"width": 1280,
"height": 880
},
{
"type": "Document",
"mediaType": "image/jpeg",
"url": "https://mastothing.files.fedi.monster/media_attachments/files/111/521/428/666/919/271/original/ea7e95c39b64a5b7.jpg",
"name": "A small group of trees (spruce, larch) covered in heavy snow standing in a field covered in layers of ground fog. Clear sky. It's close to sunset and the light already has a faint vanilla/pink tint.",
"blurhash": "UgNJ@1-:-;IUpJWCWBWB~qofM|t7D%oLs:of",
"width": 1280,
"height": 879
}
],
"tag": [
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/silentsunday",
"name": "#silentsunday"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/winterwonderland",
"name": "#winterwonderland"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/landscapephotography",
"name": "#landscapephotography"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/photography",
"name": "#photography"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/winter",
"name": "#winter"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/snow",
"name": "#snow"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/fog",
"name": "#fog"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/sunset",
"name": "#sunset"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/bayern",
"name": "#bayern"
}
],
"replies": {
"id": "https://mastodon.thi.ng/users/toxi/statuses/111521429001187989/replies",
"type": "Collection",
"first": {
"type": "CollectionPage",
"next": "https://mastodon.thi.ng/users/toxi/statuses/111521429001187989/replies?only_other_accounts=true&page=true",
"partOf": "https://mastodon.thi.ng/users/toxi/statuses/111521429001187989/replies",
"items": []
}
},
"likes": {
"id": "https://mastodon.thi.ng/users/toxi/statuses/111521429001187989/likes",
"type": "Collection",
"totalItems": 240
},
"shares": {
"id": "https://mastodon.thi.ng/users/toxi/statuses/111521429001187989/shares",
"type": "Collection",
"totalItems": 74
}
},
{
"id": "https://mastodon.thi.ng/users/toxi/statuses/111438019166834099",
"type": "Note",
"summary": null,
"inReplyTo": null,
"published": "2023-11-19T15:53:48Z",
"url": "https://mastodon.thi.ng/@toxi/111438019166834099",
"attributedTo": "https://mastodon.thi.ng/users/toxi",
"to": [
"https://www.w3.org/ns/activitystreams#Public"
],
"cc": [
"https://mastodon.thi.ng/users/toxi/followers"
],
"sensitive": false,
"atomUri": "https://mastodon.thi.ng/users/toxi/statuses/111438019166834099",
"inReplyToAtomUri": null,
"conversation": "tag:mastodon.thi.ng,2023-11-19:objectId=408149:objectType=Conversation",
"content": "<p>A week ago was the 1st anniversary of this solo instance & more generally of my fulltime move to Mastodon. A good time for a more detailed intro, partially intended as CV thread (pinned to my profile) which I will add to over time (also to compensate the ongoing lack of a proper website)... Always open to consulting offers, commissions and/or suitable remote positions...</p><p>Hi, I'm Karsten 👋 — indy software engineer, researcher, <a href=\"https://mastodon.thi.ng/tags/OpenSource\" class=\"mention hashtag\" rel=\"tag\">#<span>OpenSource</span></a> author of hundreds of projects (since ~1999), computational/generative artist/designer, landscape photographer, lecturer, outdoor enthusiast, on the ND spectrum. Main interest in transdisplinary research, tool making, exploring techniques, projects & roles amplifying the creative, educational, expressive and inspirational potential of (personal) computation, code as material, combining this with generative techniques of all forms (quite different to what is now called and implied by "generative AI").</p><p>Much of my own practice & philosophy is about <a href=\"https://mastodon.thi.ng/tags/BottomUpDesign\" class=\"mention hashtag\" rel=\"tag\">#<span>BottomUpDesign</span></a>, interconnectedness, simplicity and composability as key enablers of emergent effects (also in terms of workflow & tool/system design). Been adopting a round-robin approach to cross-pollinate my work & learning, spending periods going deep into various fields to build up and combine experience in (A-Z order): API design, audio/DSP, baremetal (mainly STM32), computer vision/image processing, compiler/DSL/VM impl, databases/linked data/query engines, data structures impl, dataviz, fabrication (3DP, CNC, knit, lasercut), file formats & protocols (as connective tissue), "fullstack" webdev (front/back/AWS), generative & evolutionary algorithms/art/design/aesthetics/music, geometry/graphics, parsers, renderers, simulation (agents/CFD/particles/physics), shaders, typography, UI/UX/IxD...</p><p>Since 2018 my main endeavor has been <a href=\"https://thi.ng/umbrella\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"\">thi.ng/umbrella</span><span class=\"invisible\"></span></a>, a "jurassic" (as it's been called) monorepo of ~185 code libraries, addressing many of the above topics (plus ~150 examples to illustrate usage). More generally, for the past decade my OSS work has been focused on <a href=\"https://mastodon.thi.ng/tags/TypeScript\" class=\"mention hashtag\" rel=\"tag\">#<span>TypeScript</span></a>, <a href=\"https://mastodon.thi.ng/tags/C\" class=\"mention hashtag\" rel=\"tag\">#<span>C</span></a>, <a href=\"https://mastodon.thi.ng/tags/Zig\" class=\"mention hashtag\" rel=\"tag\">#<span>Zig</span></a>, <a href=\"https://mastodon.thi.ng/tags/WebAssembly\" class=\"mention hashtag\" rel=\"tag\">#<span>WebAssembly</span></a>, <a href=\"https://mastodon.thi.ng/tags/Clojure\" class=\"mention hashtag\" rel=\"tag\">#<span>Clojure</span></a>, <a href=\"https://mastodon.thi.ng/tags/ClojureScript\" class=\"mention hashtag\" rel=\"tag\">#<span>ClojureScript</span></a>, <a href=\"https://mastodon.thi.ng/tags/GLSL\" class=\"mention hashtag\" rel=\"tag\">#<span>GLSL</span></a>, <a href=\"https://mastodon.thi.ng/tags/OpenCL\" class=\"mention hashtag\" rel=\"tag\">#<span>OpenCL</span></a>, <a href=\"https://mastodon.thi.ng/tags/Forth\" class=\"mention hashtag\" rel=\"tag\">#<span>Forth</span></a>, <a href=\"https://mastodon.thi.ng/tags/Houdini\" class=\"mention hashtag\" rel=\"tag\">#<span>Houdini</span></a>/#VEX. Earlier on, mainly Java (~15 years, since 1996).</p><p>Formative years in the deep end of the <a href=\"https://mastodon.thi.ng/tags/Atari\" class=\"mention hashtag\" rel=\"tag\">#<span>Atari</span></a> 8bit demoscene (Chip Special Software) & game dev (eg. The Brundles, 1993), B&W dark room lab (since age 10), music production/studio (from 1993-2003), studied media informatics, moved to London initially as web dev, game dev (Shockwave 3D, ActionScript), interaction designer, information architect. Branched out, more varied clients/roles/community for my growing collection of computational design tools, which I've been continously expanding/updating for the past 20+ years, and which have been the backbone of 99% of my work since ~2006 (and which helped countless artists/designers/students/studios/startups). Creator of thi.ng (since 2011), toxiclibs (2006-2013), both large-scale, multi-faceted library collections. Early contributor to Processing (2003-2005, pieces of core graphics API).</p><p>Worked on dozens of interactive installations/exhibitions, public spaces & mediafacades (own projects and many collabs, several award winning), large-scale print on-demand projects (>250k unique outputs), was instrumental in creating some of the first generative brand identity systems (incl. cloud infrastructure & asset management pipelines), collaborated with architects, artists, agencies, hardware engineers, had my work shown at major galleries/museums worldwide, taught 60+ workshops at universities, institutions and companies (mainly in EMEA). Was algorithm design lead at Nike's research group for 5 years, working on novel internal design tools, workflows, methods of make, product design (footwear & apparel) and team training. After 23 years in London, my family decided on a lifestyle change and so currently based in the beautiful Allgäu region in Southern Germany.</p>",
"contentMap": {
"en": "<p>A week ago was the 1st anniversary of this solo instance & more generally of my fulltime move to Mastodon. A good time for a more detailed intro, partially intended as CV thread (pinned to my profile) which I will add to over time (also to compensate the ongoing lack of a proper website)... Always open to consulting offers, commissions and/or suitable remote positions...</p><p>Hi, I'm Karsten 👋 — indy software engineer, researcher, <a href=\"https://mastodon.thi.ng/tags/OpenSource\" class=\"mention hashtag\" rel=\"tag\">#<span>OpenSource</span></a> author of hundreds of projects (since ~1999), computational/generative artist/designer, landscape photographer, lecturer, outdoor enthusiast, on the ND spectrum. Main interest in transdisplinary research, tool making, exploring techniques, projects & roles amplifying the creative, educational, expressive and inspirational potential of (personal) computation, code as material, combining this with generative techniques of all forms (quite different to what is now called and implied by "generative AI").</p><p>Much of my own practice & philosophy is about <a href=\"https://mastodon.thi.ng/tags/BottomUpDesign\" class=\"mention hashtag\" rel=\"tag\">#<span>BottomUpDesign</span></a>, interconnectedness, simplicity and composability as key enablers of emergent effects (also in terms of workflow & tool/system design). Been adopting a round-robin approach to cross-pollinate my work & learning, spending periods going deep into various fields to build up and combine experience in (A-Z order): API design, audio/DSP, baremetal (mainly STM32), computer vision/image processing, compiler/DSL/VM impl, databases/linked data/query engines, data structures impl, dataviz, fabrication (3DP, CNC, knit, lasercut), file formats & protocols (as connective tissue), "fullstack" webdev (front/back/AWS), generative & evolutionary algorithms/art/design/aesthetics/music, geometry/graphics, parsers, renderers, simulation (agents/CFD/particles/physics), shaders, typography, UI/UX/IxD...</p><p>Since 2018 my main endeavor has been <a href=\"https://thi.ng/umbrella\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"\">thi.ng/umbrella</span><span class=\"invisible\"></span></a>, a "jurassic" (as it's been called) monorepo of ~185 code libraries, addressing many of the above topics (plus ~150 examples to illustrate usage). More generally, for the past decade my OSS work has been focused on <a href=\"https://mastodon.thi.ng/tags/TypeScript\" class=\"mention hashtag\" rel=\"tag\">#<span>TypeScript</span></a>, <a href=\"https://mastodon.thi.ng/tags/C\" class=\"mention hashtag\" rel=\"tag\">#<span>C</span></a>, <a href=\"https://mastodon.thi.ng/tags/Zig\" class=\"mention hashtag\" rel=\"tag\">#<span>Zig</span></a>, <a href=\"https://mastodon.thi.ng/tags/WebAssembly\" class=\"mention hashtag\" rel=\"tag\">#<span>WebAssembly</span></a>, <a href=\"https://mastodon.thi.ng/tags/Clojure\" class=\"mention hashtag\" rel=\"tag\">#<span>Clojure</span></a>, <a href=\"https://mastodon.thi.ng/tags/ClojureScript\" class=\"mention hashtag\" rel=\"tag\">#<span>ClojureScript</span></a>, <a href=\"https://mastodon.thi.ng/tags/GLSL\" class=\"mention hashtag\" rel=\"tag\">#<span>GLSL</span></a>, <a href=\"https://mastodon.thi.ng/tags/OpenCL\" class=\"mention hashtag\" rel=\"tag\">#<span>OpenCL</span></a>, <a href=\"https://mastodon.thi.ng/tags/Forth\" class=\"mention hashtag\" rel=\"tag\">#<span>Forth</span></a>, <a href=\"https://mastodon.thi.ng/tags/Houdini\" class=\"mention hashtag\" rel=\"tag\">#<span>Houdini</span></a>/#VEX. Earlier on, mainly Java (~15 years, since 1996).</p><p>Formative years in the deep end of the <a href=\"https://mastodon.thi.ng/tags/Atari\" class=\"mention hashtag\" rel=\"tag\">#<span>Atari</span></a> 8bit demoscene (Chip Special Software) & game dev (eg. The Brundles, 1993), B&W dark room lab (since age 10), music production/studio (from 1993-2003), studied media informatics, moved to London initially as web dev, game dev (Shockwave 3D, ActionScript), interaction designer, information architect. Branched out, more varied clients/roles/community for my growing collection of computational design tools, which I've been continously expanding/updating for the past 20+ years, and which have been the backbone of 99% of my work since ~2006 (and which helped countless artists/designers/students/studios/startups). Creator of thi.ng (since 2011), toxiclibs (2006-2013), both large-scale, multi-faceted library collections. Early contributor to Processing (2003-2005, pieces of core graphics API).</p><p>Worked on dozens of interactive installations/exhibitions, public spaces & mediafacades (own projects and many collabs, several award winning), large-scale print on-demand projects (>250k unique outputs), was instrumental in creating some of the first generative brand identity systems (incl. cloud infrastructure & asset management pipelines), collaborated with architects, artists, agencies, hardware engineers, had my work shown at major galleries/museums worldwide, taught 60+ workshops at universities, institutions and companies (mainly in EMEA). Was algorithm design lead at Nike's research group for 5 years, working on novel internal design tools, workflows, methods of make, product design (footwear & apparel) and team training. After 23 years in London, my family decided on a lifestyle change and so currently based in the beautiful Allgäu region in Southern Germany.</p>"
},
"attachment": [
{
"type": "Document",
"mediaType": "image/jpeg",
"url": "https://mastothing.files.fedi.monster/media_attachments/files/111/438/019/022/039/414/original/546b69369fdce78a.jpg",
"name": "A subdivided irregular grid of thumbnail images of some notable projects I've worked on (exhibitions, renders/visualizations, workshops, tools, physical products/artifacts), all of them involving generative design approaches and made with tools I've created myself. The selection covers projects from 2007-2020...",
"blurhash": "UGJkQAxI4:^m?cx@~oJncGwbRQOtM|9ZX7RP",
"width": 1920,
"height": 1080
}
],
"tag": [
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/opensource",
"name": "#opensource"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/bottomupdesign",
"name": "#bottomupdesign"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/typescript",
"name": "#typescript"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/c",
"name": "#c"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/zig",
"name": "#zig"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/webassembly",
"name": "#webassembly"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/clojure",
"name": "#clojure"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/clojurescript",
"name": "#clojurescript"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/glsl",
"name": "#glsl"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/opencl",
"name": "#opencl"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/forth",
"name": "#forth"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/houdini",
"name": "#houdini"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/atari",
"name": "#atari"
}
],
"replies": {
"id": "https://mastodon.thi.ng/users/toxi/statuses/111438019166834099/replies",
"type": "Collection",
"first": {
"type": "CollectionPage",
"next": "https://mastodon.thi.ng/users/toxi/statuses/111438019166834099/replies?only_other_accounts=true&page=true",
"partOf": "https://mastodon.thi.ng/users/toxi/statuses/111438019166834099/replies",
"items": []
}
},
"likes": {
"id": "https://mastodon.thi.ng/users/toxi/statuses/111438019166834099/likes",
"type": "Collection",
"totalItems": 39
},
"shares": {
"id": "https://mastodon.thi.ng/users/toxi/statuses/111438019166834099/shares",
"type": "Collection",
"totalItems": 11
}
},
{
"id": "https://mastodon.thi.ng/users/toxi/statuses/111348591236791838",
"type": "Note",
"summary": null,
"inReplyTo": null,
"published": "2023-11-03T20:51:06Z",
"url": "https://mastodon.thi.ng/@toxi/111348591236791838",
"attributedTo": "https://mastodon.thi.ng/users/toxi",
"to": [
"https://www.w3.org/ns/activitystreams#Public"
],
"cc": [
"https://mastodon.thi.ng/users/toxi/followers"
],
"sensitive": false,
"atomUri": "https://mastodon.thi.ng/users/toxi/statuses/111348591236791838",
"inReplyToAtomUri": null,
"conversation": "tag:mastodon.thi.ng,2023-11-03:objectId=383649:objectType=Conversation",
"content": "<p><a href=\"https://mastodon.thi.ng/tags/HowToThing\" class=\"mention hashtag\" rel=\"tag\">#<span>HowToThing</span></a> <a href=\"https://mastodon.thi.ng/tags/Epilogue\" class=\"mention hashtag\" rel=\"tag\">#<span>Epilogue</span></a> <a href=\"https://mastodon.thi.ng/tags/LongRead\" class=\"mention hashtag\" rel=\"tag\">#<span>LongRead</span></a>: After 66 days of addressing 30 wildly varied use cases and building ~20 new example projects of varying complexity to illustrate how <a href=\"https://mastodon.thi.ng/tags/ThingUmbrella\" class=\"mention hashtag\" rel=\"tag\">#<span>ThingUmbrella</span></a> libraries can be used & combined, I'm taking a break to concentrate on other important thi.ngs...</p><p>With this overall selection I tried shining a light on common architectural patterns, but also some underexposed, yet interesting niche topics. Since there were many different techniques involved, it's natural not everything resonated with everyone. That's fine! Though, my hope always is that readers take an interest in a wide range of topics, and so many of these new examples were purposefully multi-faceted and hopefully provided insights for at least some parts, plus (in)directly communicated a core essence of the larger project:</p><p>Only individual packages (or small clusters) are designed & optimized for a set of particular use cases. At large, though, thi.ng explicitly does NOT offer any such guidance or even opinion. All I can offer are possibilities, nudges and cross-references, how these constructs & techniques can be (and have been) useful and/or the theory underpinning them. For some topics, thi.ng libs provide multiple approaches to achieve certain goals. This again is by design (not lack of it!) and stems from hard-learned experience, showing that many (esp. larger) projects highly benefit from more nuanced (sometimes conflicting approaches) compared to popular defacto "catch-all" framework solutions. To avid users (incl. myself) this approach has become a somewhat unique offering and advantage, yet in itself seems to be the hardest and most confusing aspect of the entire project to communicate to newcomers.</p><p>So seeing this list of new projects together, to me really is a celebration (and confirmation/testament) of the overall <a href=\"https://mastodon.thi.ng/tags/BottomUpDesign\" class=\"mention hashtag\" rel=\"tag\">#<span>BottomUpDesign</span></a> <a href=\"https://mastodon.thi.ng/tags/ThingUmbrella\" class=\"mention hashtag\" rel=\"tag\">#<span>ThingUmbrella</span></a> approach (which I've been building on since ~2006): From the wide spectrum/flexibility of use cases, the expressiveness, concision, the data-first approach, the undogmatic mix of complementary paradigms, the separation of concerns, no hidden magic state, only minimal build tooling requirements (a bundler is optional, but recommended for tree shaking, no more) — these are all aspects I think are key to building better (incl. more maintainable & reason-able) software. IMO they are worth embracing & exposing more people to and this is what I've partially attempted to do with this series of posts...</p><p>ICYMI here's a summary of the 10 most recent posts (full list in the <a href=\"https://thi.ng/umbrella\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"\">thi.ng/umbrella</span><span class=\"invisible\"></span></a> readme). Many of those examples have more comments than code...</p><p>021: Iterative animated polygon subdivision & heat map viz<br /><a href=\"https://mastodon.thi.ng/@toxi/111221943333023306\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">mastodon.thi.ng/@toxi/11122194</span><span class=\"invisible\">3333023306</span></a></p><p>022: Quasi-random voronoi lattice generator<br /><a href=\"https://mastodon.thi.ng/@toxi/111244412425832657\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">mastodon.thi.ng/@toxi/11124441</span><span class=\"invisible\">2425832657</span></a></p><p>023: Tag-based Jaccard similarity ranking using bitfields<br /><a href=\"https://mastodon.thi.ng/@toxi/111256960928934577\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">mastodon.thi.ng/@toxi/11125696</span><span class=\"invisible\">0928934577</span></a></p><p>024: 2.5D hidden line visualization of DEM files<br /><a href=\"https://mastodon.thi.ng/@toxi/111269505611983570\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">mastodon.thi.ng/@toxi/11126950</span><span class=\"invisible\">5611983570</span></a></p><p>025: Transforming & plotting 10k data points using SIMD<br /><a href=\"https://mastodon.thi.ng/@toxi/111283262419126958\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">mastodon.thi.ng/@toxi/11128326</span><span class=\"invisible\">2419126958</span></a></p><p>026: Shader meta-programming to generate 16 animated function plots<br /><a href=\"https://mastodon.thi.ng/@toxi/111295842650216136\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">mastodon.thi.ng/@toxi/11129584</span><span class=\"invisible\">2650216136</span></a></p><p>027: Flocking sim w/ neighborhood queries to visualize proximity<br /><a href=\"https://mastodon.thi.ng/@toxi/111308439597090930\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">mastodon.thi.ng/@toxi/11130843</span><span class=\"invisible\">9597090930</span></a></p><p>028: Randomized, space-filling, nested 2D grid layout generator<br /><a href=\"https://mastodon.thi.ng/@toxi/111324566926701431\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">mastodon.thi.ng/@toxi/11132456</span><span class=\"invisible\">6926701431</span></a></p><p>029: Forth-like DSL & livecoding playground for 2D geometry<br /><a href=\"https://mastodon.thi.ng/@toxi/111335025037332972\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">mastodon.thi.ng/@toxi/11133502</span><span class=\"invisible\">5037332972</span></a></p><p>030: Procedural text generation via custom DSL & parse grammar<br /><a href=\"https://mastodon.thi.ng/@toxi/111347074558293056\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">mastodon.thi.ng/@toxi/11134707</span><span class=\"invisible\">4558293056</span></a></p><p><a href=\"https://mastodon.thi.ng/tags/ThingUmbrella\" class=\"mention hashtag\" rel=\"tag\">#<span>ThingUmbrella</span></a> <a href=\"https://mastodon.thi.ng/tags/OpenSource\" class=\"mention hashtag\" rel=\"tag\">#<span>OpenSource</span></a> <a href=\"https://mastodon.thi.ng/tags/TypeScript\" class=\"mention hashtag\" rel=\"tag\">#<span>TypeScript</span></a> <a href=\"https://mastodon.thi.ng/tags/JavaScript\" class=\"mention hashtag\" rel=\"tag\">#<span>JavaScript</span></a> <a href=\"https://mastodon.thi.ng/tags/Tutorial\" class=\"mention hashtag\" rel=\"tag\">#<span>Tutorial</span></a></p>",
"contentMap": {
"en": "<p><a href=\"https://mastodon.thi.ng/tags/HowToThing\" class=\"mention hashtag\" rel=\"tag\">#<span>HowToThing</span></a> <a href=\"https://mastodon.thi.ng/tags/Epilogue\" class=\"mention hashtag\" rel=\"tag\">#<span>Epilogue</span></a> <a href=\"https://mastodon.thi.ng/tags/LongRead\" class=\"mention hashtag\" rel=\"tag\">#<span>LongRead</span></a>: After 66 days of addressing 30 wildly varied use cases and building ~20 new example projects of varying complexity to illustrate how <a href=\"https://mastodon.thi.ng/tags/ThingUmbrella\" class=\"mention hashtag\" rel=\"tag\">#<span>ThingUmbrella</span></a> libraries can be used & combined, I'm taking a break to concentrate on other important thi.ngs...</p><p>With this overall selection I tried shining a light on common architectural patterns, but also some underexposed, yet interesting niche topics. Since there were many different techniques involved, it's natural not everything resonated with everyone. That's fine! Though, my hope always is that readers take an interest in a wide range of topics, and so many of these new examples were purposefully multi-faceted and hopefully provided insights for at least some parts, plus (in)directly communicated a core essence of the larger project:</p><p>Only individual packages (or small clusters) are designed & optimized for a set of particular use cases. At large, though, thi.ng explicitly does NOT offer any such guidance or even opinion. All I can offer are possibilities, nudges and cross-references, how these constructs & techniques can be (and have been) useful and/or the theory underpinning them. For some topics, thi.ng libs provide multiple approaches to achieve certain goals. This again is by design (not lack of it!) and stems from hard-learned experience, showing that many (esp. larger) projects highly benefit from more nuanced (sometimes conflicting approaches) compared to popular defacto "catch-all" framework solutions. To avid users (incl. myself) this approach has become a somewhat unique offering and advantage, yet in itself seems to be the hardest and most confusing aspect of the entire project to communicate to newcomers.</p><p>So seeing this list of new projects together, to me really is a celebration (and confirmation/testament) of the overall <a href=\"https://mastodon.thi.ng/tags/BottomUpDesign\" class=\"mention hashtag\" rel=\"tag\">#<span>BottomUpDesign</span></a> <a href=\"https://mastodon.thi.ng/tags/ThingUmbrella\" class=\"mention hashtag\" rel=\"tag\">#<span>ThingUmbrella</span></a> approach (which I've been building on since ~2006): From the wide spectrum/flexibility of use cases, the expressiveness, concision, the data-first approach, the undogmatic mix of complementary paradigms, the separation of concerns, no hidden magic state, only minimal build tooling requirements (a bundler is optional, but recommended for tree shaking, no more) — these are all aspects I think are key to building better (incl. more maintainable & reason-able) software. IMO they are worth embracing & exposing more people to and this is what I've partially attempted to do with this series of posts...</p><p>ICYMI here's a summary of the 10 most recent posts (full list in the <a href=\"https://thi.ng/umbrella\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"\">thi.ng/umbrella</span><span class=\"invisible\"></span></a> readme). Many of those examples have more comments than code...</p><p>021: Iterative animated polygon subdivision & heat map viz<br /><a href=\"https://mastodon.thi.ng/@toxi/111221943333023306\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">mastodon.thi.ng/@toxi/11122194</span><span class=\"invisible\">3333023306</span></a></p><p>022: Quasi-random voronoi lattice generator<br /><a href=\"https://mastodon.thi.ng/@toxi/111244412425832657\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">mastodon.thi.ng/@toxi/11124441</span><span class=\"invisible\">2425832657</span></a></p><p>023: Tag-based Jaccard similarity ranking using bitfields<br /><a href=\"https://mastodon.thi.ng/@toxi/111256960928934577\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">mastodon.thi.ng/@toxi/11125696</span><span class=\"invisible\">0928934577</span></a></p><p>024: 2.5D hidden line visualization of DEM files<br /><a href=\"https://mastodon.thi.ng/@toxi/111269505611983570\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">mastodon.thi.ng/@toxi/11126950</span><span class=\"invisible\">5611983570</span></a></p><p>025: Transforming & plotting 10k data points using SIMD<br /><a href=\"https://mastodon.thi.ng/@toxi/111283262419126958\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">mastodon.thi.ng/@toxi/11128326</span><span class=\"invisible\">2419126958</span></a></p><p>026: Shader meta-programming to generate 16 animated function plots<br /><a href=\"https://mastodon.thi.ng/@toxi/111295842650216136\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">mastodon.thi.ng/@toxi/11129584</span><span class=\"invisible\">2650216136</span></a></p><p>027: Flocking sim w/ neighborhood queries to visualize proximity<br /><a href=\"https://mastodon.thi.ng/@toxi/111308439597090930\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">mastodon.thi.ng/@toxi/11130843</span><span class=\"invisible\">9597090930</span></a></p><p>028: Randomized, space-filling, nested 2D grid layout generator<br /><a href=\"https://mastodon.thi.ng/@toxi/111324566926701431\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">mastodon.thi.ng/@toxi/11132456</span><span class=\"invisible\">6926701431</span></a></p><p>029: Forth-like DSL & livecoding playground for 2D geometry<br /><a href=\"https://mastodon.thi.ng/@toxi/111335025037332972\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">mastodon.thi.ng/@toxi/11133502</span><span class=\"invisible\">5037332972</span></a></p><p>030: Procedural text generation via custom DSL & parse grammar<br /><a href=\"https://mastodon.thi.ng/@toxi/111347074558293056\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">mastodon.thi.ng/@toxi/11134707</span><span class=\"invisible\">4558293056</span></a></p><p><a href=\"https://mastodon.thi.ng/tags/ThingUmbrella\" class=\"mention hashtag\" rel=\"tag\">#<span>ThingUmbrella</span></a> <a href=\"https://mastodon.thi.ng/tags/OpenSource\" class=\"mention hashtag\" rel=\"tag\">#<span>OpenSource</span></a> <a href=\"https://mastodon.thi.ng/tags/TypeScript\" class=\"mention hashtag\" rel=\"tag\">#<span>TypeScript</span></a> <a href=\"https://mastodon.thi.ng/tags/JavaScript\" class=\"mention hashtag\" rel=\"tag\">#<span>JavaScript</span></a> <a href=\"https://mastodon.thi.ng/tags/Tutorial\" class=\"mention hashtag\" rel=\"tag\">#<span>Tutorial</span></a></p>"
},
"attachment": [],
"tag": [
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/howtothing",
"name": "#howtothing"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/epilogue",
"name": "#epilogue"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/longread",
"name": "#longread"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/thingumbrella",
"name": "#thingumbrella"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/bottomupdesign",
"name": "#bottomupdesign"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/opensource",
"name": "#opensource"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/typescript",
"name": "#typescript"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/javascript",
"name": "#javascript"
},
{
"type": "Hashtag",
"href": "https://mastodon.thi.ng/tags/tutorial",
"name": "#tutorial"
}
],
"replies": {
"id": "https://mastodon.thi.ng/users/toxi/statuses/111348591236791838/replies",
"type": "Collection",
"first": {
"type": "CollectionPage",
"next": "https://mastodon.thi.ng/users/toxi/statuses/111348591236791838/replies?min_id=111348701717467907&page=true",
"partOf": "https://mastodon.thi.ng/users/toxi/statuses/111348591236791838/replies",
"items": [
"https://mastodon.thi.ng/users/toxi/statuses/111348701717467907"
]
}
},
"likes": {
"id": "https://mastodon.thi.ng/users/toxi/statuses/111348591236791838/likes",
"type": "Collection",
"totalItems": 21
},
"shares": {
"id": "https://mastodon.thi.ng/users/toxi/statuses/111348591236791838/shares",
"type": "Collection",
"totalItems": 11
}
}
]
}