{"version":"https://jsonfeed.org/version/1","title":"Micro.blog - s-ol @ 39c3","home_page_url":"https://micro.blog","feed_url":"https://micro.blog/posts/s_ol@merveilles.town","_microblog":{"about":"https://micro.blog/about/api","id":"20827","username":"s_ol@merveilles.town","bio":"tinkering between hard- and software, research and development, audio- and visual...","pronouns":"","is_following":false,"is_you":false,"following_count":0,"discover_count":0},"author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://micro.blog/photos/200/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png"},"items":[{"id":"90718143","content_html":"<p><span class=\"h-card\"><a href=\"https://tldr.nettime.org/@tomjennings\" class=\"u-url mention\">@<span>tomjennings</span></a></span> <br>Hm, i was interested in finding some of her writing. Wikipedia says:</p><p>- Hacking the Wetware: The NerdGirl’s Pillow Book (1994) (internet release of ebook)</p><p>With a reference to the same archived page from her site that is linked to from the WIRED article \"Hackers Lose a Patron Saint\" that states:</p><p>\"Written for girl geeks, Hacking the Wetware: The NerdGirl's Pillow Book was a guide intended to turn women into happy hackers by demystifying the workings of both the body and the brain.<br>[...]<br>The original version of Wetware was released on the Internet in the spring of 1994. Milhon later reissued it, again on the Net, under a new title: The Joy of Hacker Sex.\"</p><p>...but that linked page has just a section on the history of the supposed new text (\"The Joy of HACKER SEX\"), mentioning the 1994 \"NerdGirl's Pillow Book\" release, a \"non-introduction\", two short sections and then the following:</p><p>\"You want more?</p><p>Ah, that would be telling! Write me email. More to the point, write to your publisher friend about this damn book. If somebody agrees to publish it, I can finish writing it. Moreover I can buy some living time with the advance $$ that publishers are known to provide. This would be good. I'll add more chapters to this site. I will. Check back.\"</p><p>So I don't understand - are these sections all that ever existed, or have we already lost this 1994 ebook that is constantly cited when she is mentioned?</p>","url":"https://merveilles.town/users/s_ol/statuses/116619261167445038","date_published":"2026-05-22T16:51:46+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2026-05-22 16:51","date_timestamp":1779468706,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":true,"is_linkpost":false,"is_mention":true}},{"id":"90512827","content_html":"<p>made a couple of self-hosting changes in the last weeks with surprisingly little effort...?</p><p>- set up <a href=\"https://ariadne.id\"><span class=\"invisible\">https://</span><span>ariadne.id</span><span class=\"invisible\"></span></a> on my main domain (see my profile)<br>- switched <a href=\"https://git.s-ol.nu\"><span class=\"invisible\">https://</span><span>git.s-ol.nu</span><span class=\"invisible\"></span></a> from klaus to plain old cgit, which is performing infinitely better<br>- put anubis in front of the more involved sites (especially git web, that was long overdue)</p>","summary":"","url":"https://merveilles.town/@s_ol/116603112832776926","date_published":"2026-05-19T20:25:02+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2026-05-19 20:25","date_timestamp":1779222302,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":false,"is_linkpost":false,"is_mention":false,"note":"","syndication":[]}},{"id":"90470027","content_html":"<p><span class=\"h-card\"><a href=\"https://autonomous.zone/@p2panda\" class=\"u-url mention\">@<span>p2panda</span></a></span> awesome! The todo example looks very clean. This is missing a way to sync the \"backlog\" if a second node joins though, right? At least the way prune() is described, it seems like there's no way for someone joining the topic later to recover todos created earlier 🤔</p>","url":"https://merveilles.town/users/s_ol/statuses/116600304564951739","date_published":"2026-05-19T08:30:51+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2026-05-19 08:30","date_timestamp":1779179451,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":true,"is_linkpost":false,"is_mention":true}},{"id":"90469442","content_html":"<p><span class=\"h-card\"><a href=\"https://merveilles.town/@thomasorus\" class=\"u-url mention\">@<span>thomasorus</span></a></span> </p><p>&gt; I am neither arrogant nor slutty enough to believe that my escapades will be the thing to tear down western cultural hegemony.</p><p>😁</p>","url":"https://merveilles.town/users/s_ol/statuses/116600242540374143","date_published":"2026-05-19T08:15:05+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2026-05-19 08:15","date_timestamp":1779178505,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":true,"is_linkpost":false,"is_mention":true}},{"id":"90119790","content_html":"<p>some eventually do load, other never seem to do. There was four more wesl-spec topics I wanted to take a look at but I just can't apparently. guess that means it's time for bed...</p>","url":"https://merveilles.town/users/s_ol/statuses/116569786669748625","date_published":"2026-05-13T23:09:45+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2026-05-13 23:09","date_timestamp":1778713785,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":true,"is_linkpost":false,"is_mention":true}},{"id":"90119562","content_html":"<p>are GitHub issues really fucking slow to load rn or has their frontend just finally become too much for my aging phone to handle?</p>","summary":"","url":"https://merveilles.town/@s_ol/116569770655825534","date_published":"2026-05-13T23:05:41+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2026-05-13 23:05","date_timestamp":1778713541,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":true,"is_linkpost":false,"is_mention":false,"note":"","syndication":[]}},{"id":"90096251","content_html":"<p>I was a bit hesitant about the switch to WGSL initially, but despite the backlash that it got initially online, I'm actually mostly finding it a step up from GLSL in terms of ergonomics.</p><p>The only two major gripes I have wrt livecoding at the moment are not being able to assign to / modify swizzled vectors (`p.xy *= math::rotate2d(r)`) and needing to reassign function parameters to make them modifiable (as seen in the examples above).</p><p>Next on the list would be the lack of function overloading, which makes for somewhat awkward conventions like `center`, `center2`, `center3` etc... Which is mostly annoying in combination with the fact that WESL lacks wildcard imports.</p>","url":"https://merveilles.town/users/s_ol/statuses/116568234694470143","date_published":"2026-05-13T16:35:04+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2026-05-13 16:35","date_timestamp":1778690104,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":true,"is_linkpost":false,"is_mention":true}},{"id":"90094041","content_html":"<p>bit more detail on the <a href=\"https://merveilles.town/tags/alv\" class=\"mention hashtag\">#<span>alv</span></a> part of this: inside a $shader\"…\" you can interpolate values of different types:</p><p>Numbers, Booleans, and arrays of (arrays of) these are assembled into a uniform struct (one per shader). Textures and samplers are declared as globals with a unique name. The interpolation is replaced with a reference to that name in both cases.</p><p>When you interpolate a shader module, that module is added to the set of dependencies of the generated module and the reference expands to the referenced modules fully qualified name. That happens to work both in an import statement (to give a local name or import module members directly) or as an inline reference:</p><p>    (def depmod $shader\"fn double(v: f32) -&gt; f32 { return v*2; }\")<br>    <br>    ## import alias:<br>    import $depmod as aliased_name;<br>    let six = aliased_name::double(3);<br>    <br>    ## import specific members:<br>    import $depmod::double;<br>    let six = double(3);<br>    <br>    ## direct reference:<br>    let six = $depmod::double(3);</p><p>Here's the alv code and the generated WESL modules for a simple example that distorts and draws an input texture:</p><p><a href=\"https://merveilles.town/tags/theWorkshop\" class=\"mention hashtag\">#<span>theWorkshop</span></a></p><p><img src=\"https://cdn.micro.blog/photos/1000x/https%3A%2F%2Fassets.merveilles.town%2Fmedia_attachments%2Ffiles%2F116%2F568%2F108%2F647%2F432%2F216%2Foriginal%2Fa4470be43a9b54c3.png\" alt=\"alv code:\n\n([1]import* time wgsl-view)\n([2]import osc)\n\n([4]def *oscout* ([3]osc/connect 'localhost' 9000)\n        samp ([5]sampler \" loading=\"lazy\"> vec2f {\n    var p = _p;\n    let phase = p.x + $([8]ramp 5 1) * consts::TAU;\n    p.y += sin(phase) / 4;\n    return p;\n  }\")\n\n([7]draw $[6]shader\"\n  import lygia::space::center;\n  \n  <a href=\"https://micro.blog/fragment\">@fragment</a>\n  fn fs_main(@location(0) _uv: vec2f)\n    -&gt; <a href=\"https://micro.blog/location\">@location</a>(0) vec4f\n  {\n    var uv = $utils::wave(center::center2(_uv));\n    return textureSample($stream, $samp, uv);\n  }\")\n\nWESL output:\n\n// package::alv_texture_alv_9:\nimport lygia::math::consts;\n\nfn wave(_p: vec2f) -&gt; vec2f {\n  var p = _p;\n  let phase = p.x + u._1 * consts::TAU;\n  p.y += sin(phase) / 4;\n  return p;\n}\n\nstruct Uniforms {\n  _1: f32,\n};\n@group(1) @binding(2) var u: Uniforms;\n\n// package::alv_texture_alv_6:\nimport lygia::space::center;\n\n<a href=\"https://micro.blog/fragment\">@fragment</a>\nfn fs_main(@location(0) _uv: vec2f)\n  -&gt; <a href=\"https://micro.blog/location\">@location</a>(0) vec4f\n{\n  var uv = package::alv_texture_alv_9::wave(\n    center::center2(_uv)\n  );\n  return textureSample(b_1, b_2, uv);\n}\n\n@group(1) @binding(0) var b_1: texture_2d;\n@group(1) @binding(1) var b_2: sampler;\n\" /&gt;</p>","url":"https://merveilles.town/users/s_ol/statuses/116568111094674701","date_published":"2026-05-13T16:03:38+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2026-05-13 16:03","date_timestamp":1778688218,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":true,"is_linkpost":false,"is_mention":true}},{"id":"90091244","content_html":"<p><span class=\"h-card\"><a href=\"https://recurse.social/@shapr\" class=\"u-url mention\">@<span>shapr</span></a></span> do link if posted!</p>","url":"https://merveilles.town/users/s_ol/statuses/116567976730901306","date_published":"2026-05-13T15:29:28+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2026-05-13 15:29","date_timestamp":1778686168,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":true,"is_linkpost":false,"is_mention":true}},{"id":"90091079","content_html":"<p>spinny cube go brrr</p><p><video controls=\"controls\" playsinline=\"playsinline\" src=\"https://assets.merveilles.town/media_attachments/files/116/567/965/544/269/439/original/ee48a379588694aa.mp4\" preload=\"none\"></video></p>","url":"https://merveilles.town/users/s_ol/statuses/116567966594310735","date_published":"2026-05-13T15:26:53+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2026-05-13 15:26","date_timestamp":1778686013,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":true,"is_linkpost":false,"is_mention":true}},{"id":"90090811","content_html":"<p>What's pretty neat is that I have <a href=\"http://wesl-lang.dev\"><span class=\"invisible\">http://</span><span class=\"\">wesl-lang.dev</span><span class=\"invisible\"></span></a> with its module system now! That means I can trivially consume <a href=\"https://lygia.xyz\"><span class=\"invisible\">https://</span><span class=\"\">lygia.xyz</span><span class=\"invisible\"></span></a> now :)</p><p>I'm also finding some interesting metaprogramming techniques between <a href=\"https://merveilles.town/tags/alv\" class=\"mention hashtag\">#<span>alv</span></a> and the modules, like basic polymorphism in this raymarching library:</p><p>pic one is the user code, pic two is the library implementation.</p><p>First the user declares the scene sample type they want to use by defining a shader module that contains a \"Sample\" type, an intial value, and a helper function that extracts the \"distance\" float from that type. This means they have complete autonomy over what material data they need (e.g. meterial identifiers, surface UVs, or whatever else).</p><p>That shader module can be passed to an alive function that returns another shader module that implements common distance field operations (union, difference etc) on top of these primitives.</p><p>Now the user can define a second shader module that contains the scene function (using the SDF utils), and give that back to the library which uses it to provide \"castRay\" and \"calcNormal\", which the primary user module can include to render the scene.</p><p>Unlike GLSL <a href=\"https://merveilles.town/tags/define\" class=\"mention hashtag\">#<span>define</span></a>-type approaches, you could even instantiate multiple scenes with different result types if you wanted to</p><p><a href=\"https://merveilles.town/tags/theWorkshop\" class=\"mention hashtag\">#<span>theWorkshop</span></a></p><p><img src=\"https://cdn.micro.blog/photos/1000x/https%3A%2F%2Fassets.merveilles.town%2Fmedia_attachments%2Ffiles%2F116%2F567%2F907%2F144%2F056%2F755%2Foriginal%2F2f4b56a97745deec.png\" alt=\"screenshot of examples/wgsl-view/raymarch.alv,  the user code to render a spinning cube on a plane\n\n([9]def\n  ## define sample type returned by scene\n  sdf-types $[5]shader\" loading=\"lazy\"> f32 { return h.dist; }\"\n\n  ## compile SDF helpers\n  ops ([6]wgsl-raymarch/sdf-ops sdf-types)\n\n  ## compile scene functions\n  scene ([8]wgsl-raymarch/scene {\"max-dist\" 10} sdf-types $[7]shader\"\n    import lygia::{sdf::boxSDF, math::{consts, rotate2d::rotate2d}};\n    import $sdf-types as tp;\n    fn map(_p: vec3f) -&gt; tp::Sample {\n      var p = _p;\n      let plane = tp::Sample(p.y + 1, 0);\n\n      p = vec3f(p.xz * rotate2d($([12]ramp 1 0.5) * consts::TAU), p.y).xzy;\n      let box = tp::Sample(boxSDF::boxSDF1(p, vec3f(.85)) - 0.3, 1);\n      return $ops::unite(plane, box);\n    }\"))\n\n([11]draw $[10]shader\"\n  import lygia::space::lookAtView::lookAtView;\n\n  <a href=\"https://micro.blog/fragment\">@fragment</a>\n  fn fs_main(@location(0) _uv: vec2f, <a href=\"https://micro.blog/location\">@location</a>(1) res: vec2f) -&gt; <a href=\"https://micro.blog/location\">@location</a>(0) vec4f {\n    // calculate ro/rd\n\n    let hit = $scene::castRay(ro, rd.xyz);\n    if hit.sample.mat &gt;= 0 {\n      let nor = $scene::calcNormal(hit.pos);\n      let lig = normalize(vec3f(-0.5, 0.5, -.7));\n      let diff = dot(nor, lig) * (2.4 - hit.t/4);\n\n      return vec4f(pal[hit.sample.mat] * diff, 1);\n    }\n  \n    return vec4f(0, 0, 0, 1);\n  }\")\" /&gt;</p><p><img src=\"https://cdn.micro.blog/photos/1000x/https%3A%2F%2Fassets.merveilles.town%2Fmedia_attachments%2Ffiles%2F116%2F567%2F913%2F767%2F265%2F594%2Foriginal%2F3b18ee9faa4f4cde.png\" alt=\"screenshot of wgsl-raymarch.alv, the raymarching library:\n\n([1]import* wgsl-view struct string)\n\n([13]export\n  ([3]defn sdf-ops [typemod] $[2]shader\" loading=\"lazy\"> tp::Sample {\n  if tp::dist(a) &lt; tp::dist(b) {\n    return a;\n  } else {\n    return b;\n  }\n}\")\n\n  ([12]defn scene [opts typemod scene]\n    ([11]do\n      ([8]def min-dist ([4]getdef opts 'min-dist' 0)\n              max-dist ([5]getdef opts 'max-dist' 20)\n              max-step ([6]getdef opts 'max-step' 30)\n              step-fct ([7]getdef opts 'step-fct' 1))\n\n         $[10]shader\"\nimport $typemod as tp;\nimport $scene as scene;\n\nstruct Hit {\n  sample: tp::Sample,\n  t: f32,\n  pos: vec3f,\n};\n\nfn castRay(origin: vec3f, dir: vec3f) -&gt; Hit {\n  var t: f32 = $min-dist;\n  var res = tp::none;\n  var pos = origin;\n\n  for (var i: i32 = 0; i &lt; $([9]str max-step); i++) {\n    pos = origin + t * dir;\n    res = scene::map(origin + t * dir);\n\n    let precis = 0.00005 * t;\n    let dist = tp::dist(res);\n    if dist &lt; precis { break; }\n\n    t += dist * $step-fct;\n    if t &gt; $max-dist { return Hit(tp::none, t, pos); }\n  }\n\n  return Hit(res, t, pos);\n}\n\nfn calcNormal(p: vec3f) -&gt; vec3f {\n  let h = 0.00001;\n  let k = vec2f(1, -1);\n  return normalize(k.xyy * tp::dist(scene::map(p + k.xyy*h)) + \n                   k.yyx * tp::dist(scene::map(p + k.yyx*h)) + \n                   k.yxy * tp::dist(scene::map(p + k.yxy*h)) + \n                   k.xxx * tp::dist(scene::map(p + k.xxx*h)));\n}\")))\n\n\" /&gt;</p><p><img src=\"https://cdn.micro.blog/photos/1000x/https%3A%2F%2Fassets.merveilles.town%2Fmedia_attachments%2Ffiles%2F116%2F567%2F937%2F369%2F931%2F094%2Foriginal%2F70832a5839a0cc8f.png\" alt=\"the rendered scene, a somewhat rounded purple cube floating over an orange floor that fades to black in the distance \" loading=\"lazy\"></p>","url":"https://merveilles.town/users/s_ol/statuses/116567939909182967","date_published":"2026-05-13T15:20:06+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2026-05-13 15:20","date_timestamp":1778685606,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":true,"is_linkpost":false,"is_mention":true}},{"id":"90087570","content_html":"<p>I've been migrating glsl-view (Zig + OpenGL + GLSL) to a new wgsl-based toolkit (Rust + wgpu/Vulkan + WESL/WGSL) that heavily relies on (a fork of) texture-share-vk.</p><p>The new toolkit splits the monolothic \"shader host that can images, videos, streams as textures\" up into a set of tools like</p><p>- tsv-view: show a texture-share-vk texture in a window<br>- tsv-video-stream: stream any ffmpeg source into a 2d TSV texture<br>- tsv-video-buffer: load N frames of any ffmpeg stream into a 3D TSV texture<br>- wgsl-render: receive a shader, uniform values and TSV texture bindings and render it to another TSV texture</p><p>So using these tools I basically set up a multimedia pipeline/graph by spawning processes and sending UDP.</p><p>TSV works fine but is a little temperamental, eventually I'd like to move to PipeWire with DMABuf as media interconnect, and maybe do OSC-over-pipewire as well (but the former I haven't gotten to work yet even in isolation and the latter isn't supported in PipeWire yet).</p>","url":"https://merveilles.town/users/s_ol/statuses/116567732456019729","date_published":"2026-05-13T14:27:21+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2026-05-13 14:27","date_timestamp":1778682441,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":true,"is_linkpost":false,"is_mention":true}},{"id":"89858050","content_html":"<p>so did anyone do \"glitter makeup but it's tiny SMT passives actually\" yet?</p>","summary":"","url":"https://merveilles.town/@s_ol/116546046835362808","date_published":"2026-05-09T18:32:24+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2026-05-09 18:32","date_timestamp":1778351544,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":false,"is_linkpost":false,"is_mention":false,"note":"","syndication":[]}},{"id":"89602431","content_html":"<p>look ma, we're trending on <span class=\"h-card\"><a href=\"https://micro.blog/lectronz@mastodon.social\" class=\"u-url mention\">@lectronz</a></span>!</p><p>Since adding that option with the last batch, I've also collected 16€ of donations for the designer, Simon Küppers that I'll forward to them soon :)</p><p><img src=\"https://cdn.micro.blog/photos/1000x/https%3A%2F%2Fassets.merveilles.town%2Fmedia_attachments%2Ffiles%2F116%2F518%2F801%2F980%2F293%2F848%2Foriginal%2Fc68ea0be91e85cad.jpg\" alt=\"screenshot of the trending section on the Lectronz homepage including the \" loading=\"lazy\"></p>","url":"https://merveilles.town/users/s_ol/statuses/116518803978674179","date_published":"2026-05-04T23:04:11+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2026-05-04 23:04","date_timestamp":1777935851,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":true,"is_linkpost":false,"is_mention":true}},{"id":"89245811","content_html":"<p><span class=\"h-card\"><a href=\"https://sonomu.club/@oleksiy\" class=\"u-url mention\">@<span>oleksiy</span></a></span> (that's all assuming you go with a \"traditional\" dj deck look and feel, given that the aurora mixer doesn't have those i guess they just use a much smaller regular knob for jogging tracks and i guess that can also work fine)</p>","url":"https://merveilles.town/users/s_ol/statuses/116488501823157278","date_published":"2026-04-29T14:37:57+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2026-04-29 14:37","date_timestamp":1777473477,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":true,"is_linkpost":false,"is_mention":true}},{"id":"89245692","content_html":"<p><span class=\"h-card\"><a href=\"https://sonomu.club/@oleksiy\" class=\"u-url mention\">@<span>oleksiy</span></a></span> oh i didn't mean hi-res in that sense, I just meant that ICs like this MT6701 used in the \"smartknob\" have the resolution you'd need to get decent angular resolution from a deck sized encoder, where the usual 30/48/...-step rotary encoders would not be sufficient and where generally any shaft-based encoder would probably struggle mechanically with given how much lever even a small DJ controller deck would put on it</p><p><a href=\"https://www.lcsc.com/product-detail/C2856764.html\"><span class=\"invisible\">https://www.</span><span class=\"ellipsis\">lcsc.com/product-detail/C28567</span><span class=\"invisible\">64.html</span></a><br><a href=\"https://github.com/scottbez1/smartknob\"><span class=\"invisible\">https://</span><span class=\"\">github.com/scottbez1/smartknob</span><span class=\"invisible\"></span></a></p>","url":"https://merveilles.town/users/s_ol/statuses/116488489901087449","date_published":"2026-04-29T14:34:55+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2026-04-29 14:34","date_timestamp":1777473295,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":true,"is_linkpost":false,"is_mention":true}},{"id":"89241482","content_html":"<p><span class=\"h-card\"><a href=\"https://sonomu.club/@oleksiy\" class=\"u-url mention\">@<span>oleksiy</span></a></span> <span class=\"h-card\"><a href=\"https://nya.otter.sh/@dashie\" class=\"u-url mention\">@<span>dashie</span></a></span> <br>this opendeck? <a href=\"https://github.com/nekename/OpenDeck\"><span class=\"invisible\">https://</span><span class=\"\">github.com/nekename/OpenDeck</span><span class=\"invisible\"></span></a></p><p>was not aware that this is useful for anything beyond the proprietary hardware, huh</p>","url":"https://merveilles.town/users/s_ol/statuses/116488211486156010","date_published":"2026-04-29T13:24:07+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2026-04-29 13:24","date_timestamp":1777469047,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":true,"is_linkpost":false,"is_mention":true}},{"id":"89094299","content_html":"<p><span class=\"h-card\"><a href=\"https://social.wake.st/@liaizon\" class=\"u-url mention\">@<span>liaizon</span></a></span><br>that sinking feeling when half your brain is still trying to come up with legit reasons why it wouldn't be there while the realization sets in is the worst :(</p>","url":"https://merveilles.town/users/s_ol/statuses/116476545925282747","date_published":"2026-04-27T11:57:25+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2026-04-27 11:57","date_timestamp":1777291045,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":true,"is_linkpost":false,"is_mention":true}},{"id":"88990774","content_html":"<p><span class=\"h-card\"><a href=\"https://social.wake.st/@liaizon\" class=\"u-url mention\">@<span>liaizon</span></a></span> oh dang, that sucks :(</p>","url":"https://merveilles.town/users/s_ol/statuses/116466252487510626","date_published":"2026-04-25T16:19:39+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2026-04-25 16:19","date_timestamp":1777133979,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":true,"is_linkpost":false,"is_mention":true}},{"id":"88715123","content_html":"<p>when management is on your back about wrapping up the docs and getting the product out the door but you're not quite through board bringup yet</p><p><img src=\"https://cdn.micro.blog/photos/1000x/https%3A%2F%2Fassets.merveilles.town%2Fmedia_attachments%2Ffiles%2F116%2F443%2F535%2F209%2F046%2F663%2Foriginal%2Fd2aff5a90927140f.png\" alt=\"snippet of a datasheet showing a IR receiver and a note that reads\n\n\" loading=\"lazy\"></p>","summary":"","url":"https://merveilles.town/@s_ol/116443535348499256","date_published":"2026-04-21T16:02:23+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2026-04-21 16:02","date_timestamp":1776787343,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":true,"is_linkpost":false,"is_mention":false,"note":"","syndication":[]}},{"id":"88601306","content_html":"<p><span class=\"h-card\"><a href=\"https://mastodon.gamedev.place/@lritter\" class=\"u-url mention\">@<span>lritter</span></a></span> <br>huh, this on the backdrop of the FoC podcast episode \"Rule(s) of Code\" I just listened prompted (🙄) me to realize </p><p>a) in the context of that paper, one could argue AI is actually more suitable to execute law/social norms/... than our usual discrete code [obviously, I want to live in a world where we agree either is a terrible idea]<br>b) now I'm imagining a slopjudge going \"Sorry. You're right, I should not have sentenced your client to the death penalty. Let me go back...\", stuck in a ping-pong loop between two prompt-engineer-attorneys</p>","url":"https://merveilles.town/users/s_ol/statuses/116433918467305456","date_published":"2026-04-19T23:16:41+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2026-04-19 23:16","date_timestamp":1776640601,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":true,"is_linkpost":false,"is_mention":true}},{"id":"88183279","content_html":"<p>just released lua-abletonlink 1.1.0, adding support for callbacks. Not sure how useful those really are given that the messages have to be polled from the main thread (so you could just compare the values from the last seen state) but here we are :)</p><p><a href=\"https://git.s-ol.nu/lua-abletonlink/\"><span class=\"invisible\">https://</span><span class=\"\">git.s-ol.nu/lua-abletonlink/</span><span class=\"invisible\"></span></a></p>","url":"https://merveilles.town/users/s_ol/statuses/116398908884133629","date_published":"2026-04-13T18:53:17+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2026-04-13 18:53","date_timestamp":1776106397,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":true,"is_linkpost":false,"is_mention":true}},{"id":"87974036","content_html":"<p><span class=\"h-card\"><a href=\"https://merveilles.town/@cancel\" class=\"u-url mention\">@<span>cancel</span></a></span> really digging this, do you have released music somewhere? If there were a buy button I'd click it</p>","url":"https://merveilles.town/users/s_ol/statuses/116380202988618335","date_published":"2026-04-10T11:36:08+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2026-04-10 11:36","date_timestamp":1775820968,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":true,"is_linkpost":false,"is_mention":true}},{"id":"87596263","content_html":"<p><span class=\"h-card\"><a href=\"https://merveilles.town/@bd\" class=\"u-url mention\">@<span>bd</span></a></span> oh yeah, had to look up the plot to remember which book is what but now I remember that part being a bit drawn out too.</p><p>The series as a whole was a very nice trip, by the end of it I felt like I was getting a little too familiar with their writing style and preferred idioms but that's hard to fault anyone for given the many hours it entertained me 😉 It's been a while now I haven't done fiction like that, maybe it's time to go and find a world to get lost in for a while again 👀</p>","url":"https://merveilles.town/users/s_ol/statuses/116347362574674832","date_published":"2026-04-04T16:24:23+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2026-04-04 16:24","date_timestamp":1775319863,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":true,"is_linkpost":false,"is_mention":true}},{"id":"87560809","content_html":"<p>picked up a used iPod Mini (2G) and put <a href=\"https://merveilles.town/tags/rockbox\" class=\"mention hashtag\">#<span>rockbox</span></a> on it in a quest for the simples audiobook mediaplayer for my grandma. I've already disabled all menu items except the tracklist, but I'll have to do a little (two-line) patch to remove the settings menu also. I'd like to also put a much larger font on it, but I'm not sure yet whether that's easy or possible</p>","summary":"","url":"https://merveilles.town/@s_ol/116343584258206139","date_published":"2026-04-04T00:23:30+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2026-04-04 00:23","date_timestamp":1775262210,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":false,"is_linkpost":false,"is_mention":false,"note":"","syndication":[]}},{"id":"87254545","content_html":"<p>uff, it seems BRT lost another package I sent. 😒<br>That's two lost out of the six I've sent with them so far, wtf?</p><p>I guess my packages being very small and light might be a factor, but this is just insanely poor stats. I guess at this point I'll just have to stop using their service altogether.</p>","summary":"","url":"https://merveilles.town/@s_ol/116318634388192279","date_published":"2026-03-30T14:38:26+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2026-03-30 14:38","date_timestamp":1774881506,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":false,"is_linkpost":false,"is_mention":false,"note":"","syndication":[]}},{"id":"87244366","content_html":"<p><span class=\"h-card\"><a href=\"https://mastodon.social/@youyoubilly\" class=\"u-url mention\">@<span>youyoubilly</span></a></span> <span class=\"h-card\"><a href=\"https://hachyderm.io/@crowdsupply\" class=\"u-url mention\">@<span>crowdsupply</span></a></span> <span class=\"h-card\"><a href=\"https://chaos.social/@ishotjr\" class=\"u-url mention\">@<span>ishotjr</span></a></span> <br>such a neat project! At work we often travel to set up PCs in interactive media installations and the full-size keyboard in the backpack is getting old, I'll lobby to get our hands on some of these asap! 😉</p>","url":"https://merveilles.town/users/s_ol/statuses/116317827660576500","date_published":"2026-03-30T11:13:16+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2026-03-30 11:13","date_timestamp":1774869196,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":true,"is_linkpost":false,"is_mention":true}},{"id":"87216285","content_html":"<p>I put together a project video for this cyber something camera project!</p><p>Slowly becoming better at this video editing stuff too. I wrote a quick list of shots I'd need, then got everything recorded in maybe 2-3h and edited in another ~3h. It's interesting how easy it is to keep a rhythm with this jump-cut style by just confidently trimming everything to bare minimum length</p><p><a href=\"https://vido.social/v/eJFtvPE7dp\"><span class=\"invisible\">https://</span><span class=\"\">vido.social/v/eJFtvPE7dp</span><span class=\"invisible\"></span></a></p><p><a href=\"https://merveilles.town/tags/theCouture\" class=\"mention hashtag\">#<span>theCouture</span></a> 🤝 <a href=\"https://merveilles.town/tags/theWorkshop\" class=\"mention hashtag\">#<span>theWorkshop</span></a></p>","url":"https://merveilles.town/users/s_ol/statuses/116314612543136946","date_published":"2026-03-29T21:35:37+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2026-03-29 21:35","date_timestamp":1774820137,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":true,"is_linkpost":false,"is_mention":true}},{"id":"87215528","content_html":"<p><span class=\"h-card\"><a href=\"https://mastodon.social/@frisch\" class=\"u-url mention\">@<span>frisch</span></a></span> <br>heh, this was exactly my impression and line of thinking 😉</p><p>The MeshCore README opens with \"MeshCore is a lightweight, portable C++ library\", but the way PlatformIO and the arduino Arduino SDK work means it's firmly in \"framework\" territory IMO and I guess \"portable\" here just means \"we support many boards\" rather than the \"this code makes few assumptions about the dev+runtime environment\" I assumed when I first encountered the repo 😅</p>","url":"https://merveilles.town/users/s_ol/statuses/116314497155254348","date_published":"2026-03-29T21:06:17+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2026-03-29 21:06","date_timestamp":1774818377,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":true,"is_linkpost":false,"is_mention":true}},{"id":"87192249","content_html":"<p>paypal checkout glitch</p><p><img src=\"https://cdn.micro.blog/photos/1000x/https%3A%2F%2Fassets.merveilles.town%2Fmedia_attachments%2Ffiles%2F116%2F312%2F592%2F361%2F993%2F314%2Foriginal%2F4610b3e61e9294a4.png\" alt=\"screenshot of a paypal tab showing commented JavaScript code instead of the checkout flow\" loading=\"lazy\"></p>","summary":"","url":"https://merveilles.town/@s_ol/116312592478809772","date_published":"2026-03-29T13:01:53+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2026-03-29 13:01","date_timestamp":1774789313,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":false,"is_linkpost":false,"is_mention":false,"note":"","syndication":[]}},{"id":"87189739","content_html":"<p>Was hanging around a very hackcamp we're having in town this weekend and got excited enough about MeshCore to pick this back up! 😉</p><p><span class=\"h-card\"><a href=\"https://infosec.exchange/@hpux735\" class=\"u-url mention\">@<span>hpux735</span></a></span> made some progress on the  meshcore-rs library so I updated that and got it working no-std with very little (and much cleaner) adjustments. Now the crypto is working too, so I added this text display printing group chat messages :)</p><p><a href=\"https://merveilles.town/tags/theWorkshop\" class=\"mention hashtag\">#<span>theWorkshop</span></a> <a href=\"https://merveilles.town/tags/theFurnace\" class=\"mention hashtag\">#<span>theFurnace</span></a> <a href=\"https://merveilles.town/tags/theFoundry\" class=\"mention hashtag\">#<span>theFoundry</span></a></p><p><video controls=\"controls\" playsinline=\"playsinline\" src=\"https://assets.merveilles.town/media_attachments/files/116/312/268/859/794/300/original/84ac61a3228643c8.mp4\" preload=\"none\"></video></p>","url":"https://merveilles.town/users/s_ol/statuses/116312269933556098","date_published":"2026-03-29T11:39:52+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2026-03-29 11:39","date_timestamp":1774784392,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":true,"is_linkpost":false,"is_mention":true}},{"id":"87147332","content_html":"<p>Thanks GitHub, great work on this update...</p><p><img src=\"https://cdn.micro.blog/photos/1000x/https%3A%2F%2Fassets.merveilles.town%2Fmedia_attachments%2Ffiles%2F116%2F307%2F723%2F363%2F838%2F069%2Foriginal%2Fd7e35bfbb28e28a7.png\" alt=\"screenshot of GitHub with a popup that overflows outside of the viewport, rendering the content mostly unreadable. The visible fragments read:\n\nWelcome to the upgraded … Changed experience\nIt's faster more accessible, and\" loading=\"lazy\"></p>","summary":"","url":"https://merveilles.town/@s_ol/116307732635455534","date_published":"2026-03-28T16:25:58+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2026-03-28 16:25","date_timestamp":1774715158,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":false,"is_linkpost":false,"is_mention":false,"note":"","syndication":[]}},{"id":"86887141","content_html":"<p><span class=\"h-card\"><a href=\"https://social.afront.org/@MLE_online\" class=\"u-url mention\">@<span>MLE_online</span></a></span> <br>\"don't step over spilled milk\"</p>","url":"https://merveilles.town/users/s_ol/statuses/116286248932351528","date_published":"2026-03-24T21:22:23+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2026-03-24 21:22","date_timestamp":1774387343,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":true,"is_linkpost":false,"is_mention":true}},{"id":"86712943","content_html":"<p>fast fascion</p>","summary":"","url":"https://merveilles.town/@s_ol/116271855191712834","date_published":"2026-03-22T08:21:52+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2026-03-22 08:21","date_timestamp":1774167712,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":false,"is_linkpost":false,"is_mention":false,"note":"","syndication":[]}},{"id":"86154673","content_html":"<p>did a lot of rapid prototyping between yesterday night and today to turn all the accessories for the FPV camera gadget I built around this time last year into a fully wearable kit / functional cybergoth-y outfit.</p><p>this has been a lot of learning and playing around with the MOLLE / PALS webbing system. There's a bunch of different ways things can be designed to go together here and I'm still getting my head around how to design for it but it's quite fun.</p><p>The dual 9V battery holder is working great (first time printing ASA as well, seems like an ideal material for these) and although the LED badge holder had a design flaw it turns out just cutting it in half made it perfectly usable and secure 😁</p><p>The FPV display is *okay* as it is right now but requires removing the back panel by removing screws (which requires bending the carrier to access), which is very unelegant. I would've liked to use MOLLE sticks here but I didn't find a nice way to get printable loops in the right spot or attach fabric straps without interfering with the internals for now...</p><p>todo for tomorrow is making two bases (MOLLE loop and wrist strap) for the new camera gadget design, which now features a sliding dovetail attachment to easily move the electronics between different bases.</p><p><a href=\"https://merveilles.town/tags/theCouture\" class=\"mention hashtag\">#<span>theCouture</span></a> <a href=\"https://merveilles.town/tags/theWorkshop\" class=\"mention hashtag\">#<span>theWorkshop</span></a></p><p><video controls=\"controls\" playsinline=\"playsinline\" src=\"https://assets.merveilles.town/media_attachments/files/116/223/947/580/354/648/original/958e17ba7155f179.mp4\" preload=\"none\"></video></p>","summary":"","url":"https://merveilles.town/@s_ol/116223950388268520","date_published":"2026-03-13T21:19:02+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2026-03-13 21:19","date_timestamp":1773436742,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":true,"is_linkpost":false,"is_mention":false,"note":"","syndication":[]}},{"id":"85789292","content_html":"<p>I made a short video loop for an collective exhibition with friends in january, and it's going to be shown again in a different location next month with dedicated headphones for each piece. That means it's time for me to make some sound! (😳)</p><p>I'm trying LMMS and Helm (through Carla, in absence of lv2 gui support) and it's going pretty okay so far!</p><p>The motif of the video is the foot of a giant creature rhythmically stomping down onto the ground (as you can hear, perhaps :P)</p><p><audio src=\"https://assets.merveilles.town/media_attachments/files/116/195/758/265/376/014/original/19b1777832136ca6.mp3\" controls=\"controls\"></audio></p>","summary":"","url":"https://merveilles.town/@s_ol/116195768169931278","date_published":"2026-03-08T21:51:56+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2026-03-08 21:51","date_timestamp":1773006716,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":false,"is_linkpost":false,"is_mention":false,"note":"","syndication":[]}},{"id":"85545649","content_html":"<p>Wtf, I just clicked an unsubscribe link in a big Italian auto replacement parts distributor's newsletter and the confirmation page said \"Your request for unsubscription has been noted and will be processed between 8 and 10 days. We thank you for your understanding\"</p><p>Is there an employee somewhere that walks to a fax machine once a week to pick up a stack of paper unsubscription requests? Does that employee have a way to filter the list of subscriptions on some newsletter tool, do they know about ctrl+f or just scroll the list until they find someone? Or is their job to send an email with the addresses to remove to their tech consultancy firm?</p><p>I really hope that's just really defensive copy written by someone who wasn't sure what system was actually going to be implemented...</p>","summary":"","url":"https://merveilles.town/@s_ol/116175625152583410","date_published":"2026-03-05T08:29:18+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2026-03-05 08:29","date_timestamp":1772699358,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":true,"is_linkpost":false,"is_mention":false,"note":"","syndication":[]}},{"id":"83345511","content_html":"<p>ah, it's \"hibernation is broken on both my Arch machines\", my favorite season!</p>","summary":"","url":"https://merveilles.town/@s_ol/115995645626725198","date_published":"2026-02-01T13:38:08+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2026-02-01 13:38","date_timestamp":1769953088,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":false,"is_linkpost":false,"is_mention":false,"note":"","syndication":[]}},{"id":"81627592","content_html":"<p>I was looking at my list of books to read and thought I really should check out a local library, so I did, and of the seven english language books I tried not one is available anywhere in Milan 🙄</p>","summary":"","url":"https://merveilles.town/@s_ol/115860508559892915","date_published":"2026-01-08T16:51:00+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2026-01-08 16:51","date_timestamp":1767891060,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":false,"is_linkpost":false,"is_mention":false,"note":"","syndication":[]}},{"id":"81155262","content_html":"<p>starting the new year off with some good old rail travel drama. I booked a journey through ÖBB that comprises a regional train and a nightjet. Today I woke up to three emails variously stating that the nightjet was either fully cancelled or not running for part of the course. After a while on the phone I was reassured that I could actually keep the same itinerary, but the train was going to be labelled differently and I'd have to get off and back on a different car at a certain stop in the middle of the night. ok.</p><p>So now I showed up 15min early to the regional train (that was supposed to bring me to the nightjet), only to find it doesn't actually go to the stop where my connection is. I quickly found another regional train that does, but when I reached the platform they wouldn't open the doors for me anymore and it left. hm. So I'm now on an ICE that I had to buy an extra ticket for, racing to get my connection with two extra changes and really hoping the customer service was right about there being a train with a seat for me there...</p>","summary":"","url":"https://merveilles.town/@s_ol/115821545955380346","date_published":"2026-01-01T19:42:18+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2026-01-01 19:42","date_timestamp":1767296538,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":true,"is_linkpost":false,"is_mention":false,"note":"","syndication":[]}},{"id":"81002029","content_html":"<p>I've only been in germany for three days and spent those essentially in a parallel society yet somehow the only dream fragment I have from last night is paying at a restaurant, remembering I have to tip and struggling through the math and manners 🤔</p>","summary":"","url":"https://merveilles.town/@s_ol/115808862346980792","date_published":"2025-12-30T13:56:42+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2025-12-30 13:56","date_timestamp":1767103002,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":false,"is_linkpost":false,"is_mention":false,"note":"","syndication":[]}},{"id":"80909221","content_html":"<p>Discovering <span class=\"h-card\"><a href=\"https://mastodon.social/@socialband\" class=\"u-url mention\">@<span>socialband</span></a></span> by <span class=\"h-card\"><a href=\"https://surlaterre.org/@simon\" class=\"u-url mention\">@<span>simon</span></a></span> with <span class=\"h-card\"><a href=\"https://social.wake.st/@liaizon\" class=\"u-url mention\">@<span>liaizon</span></a></span></p><p><img src=\"https://cdn.micro.blog/photos/1000x/https%3A%2F%2Fassets.merveilles.town%2Fmedia_attachments%2Ffiles%2F115%2F799%2F932%2F569%2F345%2F272%2Foriginal%2Ffce188c6a457ac84.png\" alt=\"screenshot of socialband explaining i can upload music i make with my band and it will be put into a collective webradio \" loading=\"lazy\"></p>","summary":"","url":"https://merveilles.town/@s_ol/115799932672085134","date_published":"2025-12-29T00:05:46+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2025-12-29 00:05","date_timestamp":1766966746,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":false,"is_linkpost":false,"is_mention":false,"note":"","syndication":[]}},{"id":"80786621","content_html":"<p>ok enough christmas, time to get to <a href=\"https://merveilles.town/tags/39c3\" class=\"mention hashtag\">#<span>39c3</span></a>!</p>","summary":"","url":"https://merveilles.town/@s_ol/115787011025258682","date_published":"2025-12-26T17:19:37+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2025-12-26 17:19","date_timestamp":1766769577,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":false,"is_linkpost":false,"is_mention":false,"note":"","syndication":[]}},{"id":"80530791","content_html":"<p>Help! I've talked someone into being curious about (fragment) shader-ing ala shadertoy, but I can't find a decent node-based GUI for shader editing that has decent ergonomics but is also close enough to GLSL structurally to allow shadertoy-like mathy exploration.</p><p>So far everything I've seen fails hard on either of these:<br>- Blender: separate \"Math\" and \"Vector Math\" nodes. \"Math\" node with drop-down instead of granular primitives<br>-  Godot: \"Function\" node with drop-down instead of granular primitives<br>-  Unity: uh ... i just don't want to do this to them i think<br>-  cables.gl: no vector types at all??? setup a bit elaborate<br>-  <a href=\"https://victhorlopez.github.io/editor/\"><span class=\"invisible\">https://</span><span>victhorlopez.github.io/editor/</span><span class=\"invisible\"></span></a> closest so far;  polymorphic functions but doesn't auto-cast values; UX a bit underdone<br> <br>...surely there would be a web tool for this given the popularity of SDFs etc???</p><p class=\"microblog_hashtags\"><a href=\"https://merveilles.town/tags/askfedi\" class=\"mention hashtag\">#<span>askfedi</span></a> <a href=\"https://merveilles.town/tags/glsl\" class=\"mention hashtag\">#<span>glsl</span></a> <a href=\"https://merveilles.town/tags/shader\" class=\"mention hashtag\">#<span>shader</span></a></p>","summary":"","url":"https://merveilles.town/@s_ol/115763143158856502","date_published":"2025-12-22T12:09:42+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2025-12-22 12:09","date_timestamp":1766405382,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":true,"is_linkpost":false,"is_mention":false,"note":"","syndication":[]}},{"id":"79242369","content_html":"<p><span class=\"h-card\"><a href=\"https://mastodon.social/@cheeaun\" class=\"u-url mention\">@<span>cheeaun</span></a></span> just opened the phanpy edit history view for the first time, how cool is that!</p>","summary":"","url":"https://merveilles.town/@s_ol/115656209981460315","date_published":"2025-12-03T14:55:11+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2025-12-03 14:55","date_timestamp":1764773711,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":false,"is_linkpost":false,"is_mention":false,"note":"","syndication":[]}},{"id":"79128210","content_html":"<p>i guess my <a href=\"https://merveilles.town/tags/DecemberAdventure\" class=\"mention hashtag\">#<span>DecemberAdventure</span></a> had already started and is going to be getting some leftover norns shield SSD1322 displays working in Rust on Heltek T114 LoRa modules. Then ideally I'd also get meshcore working with Rust but that seems a little far out still ;)</p>","summary":"","url":"https://merveilles.town/@s_ol/115646867138857238","date_published":"2025-12-01T23:19:11+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2025-12-01 23:19","date_timestamp":1764631151,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":true,"is_linkpost":false,"is_mention":false,"note":"","syndication":[]}},{"id":"78868805","content_html":"<p>been spending a slightly ridiculous amount of time today reading the docs for \"par lang\", a linear logic language:</p><p><a href=\"https://faiface.github.io/par-lang/introduction.html\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">faiface.github.io/par-lang/int</span><span class=\"invisible\">roduction.html</span></a></p>","summary":"","url":"https://merveilles.town/@s_ol/115623324914252450","date_published":"2025-11-27T19:32:05+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2025-11-27 19:32","date_timestamp":1764271925,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":true,"is_linkpost":false,"is_mention":false,"note":"","syndication":[]}},{"id":"78698576","content_html":"<p>When listening to music I often feel inspired to do some visuals for a specific song, and using my livecoding setup is an obvious choice of tools.</p><p>But combining livecoding with produced music is a little tricky: Ideally I'd map out the song with some OSC data in a multimedia sequencer which is a lot of prep work, but then it's still a little awkward to live-code through a performance to the music: it'd be difficult to try and keep up with the song, kind of like a one-take movie shot. That could be interesting in itself but wouldn't be what I'm going for, and there's this mismatch between a highly produced (offline) music track and this realtime video thing.</p><p>So I could also just write a looong program that exposes all the different variables I might want to touch for the whole song and sequence that, but it's not really a fun way to work with the tool because the livecoding toolset is built around *changing* code not just input data.</p><p>And so I had an idea yesterday: what if I use my livecoding tools, but I *sequence the code edits* as well? I could have the file contents as it's own \"track\" in the sequencer, so i can scrub through the program together with the music and timed inputs!</p><p class=\"microblog_hashtags\"><a href=\"https://merveilles.town/tags/theWorkshop\" class=\"mention hashtag\">#<span>theWorkshop</span></a></p>","summary":"","url":"https://merveilles.town/@s_ol/115609848242581628","date_published":"2025-11-25T10:24:47+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2025-11-25 10:24","date_timestamp":1764066287,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":false,"is_linkpost":false,"is_mention":false,"note":"","syndication":[]}},{"id":"78376732","content_html":"<p>the github \"unread notification\" has been stuck on for the last two months or so 😒<br>My best guess is I was tagged in some issue that then got spam-filtered and the notification is now inaccessible but still considered for the badge?</p>","summary":"","url":"https://merveilles.town/@s_ol/115581405376678889","date_published":"2025-11-20T09:51:24+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2025-11-20 09:51","date_timestamp":1763632284,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":true,"is_linkpost":false,"is_mention":false,"note":"","syndication":[]}},{"id":"78198175","content_html":"<p>is there some way/client to search for a hashtag in <a href=\"https://merveilles.town/tags/hometown\" class=\"mention hashtag\">#<span>hometown</span></a> local posts only?</p>","summary":"","url":"https://merveilles.town/@s_ol/115567696600257671","date_published":"2025-11-17T23:45:04+00:00","author":{"name":"s-ol @ 39c3","url":"https://merveilles.town/@s_ol","avatar":"https://cdn.micro.blog/photos/96/https%3A%2F%2Fassets.merveilles.town%2Faccounts%2Favatars%2F000%2F000%2F333%2Foriginal%2F050403707586f8a1.png","_microblog":{"username":"s_ol@merveilles.town"}},"_microblog":{"date_relative":"2025-11-17 23:45","date_timestamp":1763423104,"is_favorite":false,"is_bookmark":false,"is_deletable":false,"is_conversation":false,"is_linkpost":false,"is_mention":false,"note":"","syndication":[]}}]}