Advertisement · 728 × 90
#
Hashtag
#Spritely
Advertisement · 728 × 90
Christine Lemmer-Webber (@cwebber@social.coop) Wanted to see me speak at #FOSDEM but couldn't make it? Here's the two talks I gave! How to Level Up the Fediverse (co-presented with ActivityPub co-author @tsyesika@mastodon.nu !) https://fosdem.org...

Couldn't make it to #FOSDEM? Here's a list of talks by #spritely folks, including me, plus a list of talks I just recommend! social.coop/@cwebber/116...

10 5 0 0
Preview
Spritely @ FOSDEM Christine, Jessica, and myself will be presenting several talks at the FOSDEM conference in Brussels this weekend on 1/31 and 2/1. Click on links to individual talks to stream them live or watch afte...

Coming to #FOSDEM? Come see the #Spritely crew speak! We've got a whole bunch of exciting talks lined up this year! community.spritely.institute/t/spritely-f...

2 2 0 0
*Browser again: clientside wasm.* @@html:<a id="deploy-hoot-wasm" name="deploy-hoot-wasm"></a>@@
To run clientside, you can package your project with [[https://spritely.institute/hoot/][Hoot]]: build an interface and compile to wasm:

#+begin_src wisp :results output :tangle hoot.w
;; file: hoot.w
use-modules : hoot ffi ;; guile specific import

;; the interface
define-foreign document-body "document" "body"
  . -> (ref null extern)
define-foreign make-text-node "document" "createTextNode"
  . (ref string) -> (ref null extern)
define-foreign append-child! "element" "appendChild"
  . (ref null extern) (ref null extern) 
  . -> (ref null extern)

;; your code
append-child! : document-body
  make-text-node "Hello, world!"
#+end_src

Transpile with =wisp2lisp= and =guild compile-wasm=. If you run Guix:

#+begin_src bash
guix shell guile guile-wisp -- \
  wisp2lisp hoot.w > hoot.scm && \
    guix shell guile-hoot guile-next -- \
      guild compile-wasm -o hoot.wasm hoot.scm
#+end_src

Get reflection tools from Guile Hoot (licensed Apache 2.0) with Guix:
#+latex: \ThisLLCornerWallPaper{0.26}{programming-scheme-hoot}%

#+begin_src bash
guix shell guile-hoot guile-next --  bash -c \
 'cp $GUIX_ENVIRONMENT/share/*hoot/*/re*/{*.js,*.wasm} ./'
#+end_src

*Browser again: clientside wasm.* @@html:<a id="deploy-hoot-wasm" name="deploy-hoot-wasm"></a>@@ To run clientside, you can package your project with [[https://spritely.institute/hoot/][Hoot]]: build an interface and compile to wasm: #+begin_src wisp :results output :tangle hoot.w ;; file: hoot.w use-modules : hoot ffi ;; guile specific import ;; the interface define-foreign document-body "document" "body" . -> (ref null extern) define-foreign make-text-node "document" "createTextNode" . (ref string) -> (ref null extern) define-foreign append-child! "element" "appendChild" . (ref null extern) (ref null extern) . -> (ref null extern) ;; your code append-child! : document-body make-text-node "Hello, world!" #+end_src Transpile with =wisp2lisp= and =guild compile-wasm=. If you run Guix: #+begin_src bash guix shell guile guile-wisp -- \ wisp2lisp hoot.w > hoot.scm && \ guix shell guile-hoot guile-next -- \ guild compile-wasm -o hoot.wasm hoot.scm #+end_src Get reflection tools from Guile Hoot (licensed Apache 2.0) with Guix: #+latex: \ThisLLCornerWallPaper{0.26}{programming-scheme-hoot}% #+begin_src bash guix shell guile-hoot guile-next -- bash -c \ 'cp $GUIX_ENVIRONMENT/share/*hoot/*/re*/{*.js,*.wasm} ./' #+end_src

Load your interface (includes startup time optimizations):
#+begin_src js :tangle hoot.js
/* file: hoot.js */
var f = window.fetch; window.fetch = (inp, ini) => f(inp, 
  {credentials: 'include', mode: 'no-cors', ...ini});
window.addEventListener("load", () =>
  fetch("hoot.wasm")
    .then(r => r.arrayBuffer())
    .then(bytes => Scheme.load_main(bytes, {
      user_imports: { // mapped via define-foreign
        document: {
          body() { return document.body; },
          createTextNode: Document.prototype
            .createTextNode.bind(document)
        }, 
        element: {
          appendChild(parent, child) { 
            return parent.appendChild(child);}}}})));
#+end_src

Include =reflect.js= and =hoot.js= from a HTML page:

#+begin_src html :tangle hoot.html
<!DOCTYPE html> <!-- file: hoot.html -->
<html><head><title>Hello Hoot</title>
<script type="text/javascript" src="reflect.js"></script>
<script type="text/javascript" src="hoot.js"></script>
<link rel="preload" as="fetch" href="hoot.wasm"></link>
<link rel="preload" as="fetch" href="wtf8.wasm"></link>
<link rel="preload" as="fetch" href="reflect.wasm"></link>
</head><body><h1>Hoot Test</h1></body></html>
#+end_src

For local testing, hoot provides a minimal webserver:

#+begin_src bash
guix shell guile-hoot guile-next -- \
  guile -c '((@ (hoot web-server) serve))'
#+end_src

Load your interface (includes startup time optimizations): #+begin_src js :tangle hoot.js /* file: hoot.js */ var f = window.fetch; window.fetch = (inp, ini) => f(inp, {credentials: 'include', mode: 'no-cors', ...ini}); window.addEventListener("load", () => fetch("hoot.wasm") .then(r => r.arrayBuffer()) .then(bytes => Scheme.load_main(bytes, { user_imports: { // mapped via define-foreign document: { body() { return document.body; }, createTextNode: Document.prototype .createTextNode.bind(document) }, element: { appendChild(parent, child) { return parent.appendChild(child);}}}}))); #+end_src Include =reflect.js= and =hoot.js= from a HTML page: #+begin_src html :tangle hoot.html <!DOCTYPE html> <!-- file: hoot.html --> <html><head><title>Hello Hoot</title> <script type="text/javascript" src="reflect.js"></script> <script type="text/javascript" src="hoot.js"></script> <link rel="preload" as="fetch" href="hoot.wasm"></link> <link rel="preload" as="fetch" href="wtf8.wasm"></link> <link rel="preload" as="fetch" href="reflect.wasm"></link> </head><body><h1>Hoot Test</h1></body></html> #+end_src For local testing, hoot provides a minimal webserver: #+begin_src bash guix shell guile-hoot guile-next -- \ guile -c '((@ (hoot web-server) serve))' #+end_src

#spritely #hoot in a toot: how to deploy #Guile #Scheme as static website via #webassembly (complete example).

The code from the two attached images, as written, runs on
https://www.draketo.de/software/hoot.html

Try it out!

It’s two pages from Naming & […]

[Original post on rollenspiel.social]

2 1 0 0
Preview
Next office hours on 27th of August We’re going to be holding our next office hours on Wednesday the 27th of August 2025 2 PM EDT (6 PM UTC). Please feel free to come along to chat or ask questions about all things Spritely. There’ll be...

Spritely office hours! At 4pm ET! community.spritely.institute/t/next-offic...

Learn what #spritely folks are up to! Talk about your own projects! Hang out with us!

1 0 0 0
Original post on mastodontti.fi

I have heard discussion about upcoming Fediverse technology. Is there a new protocol coming in the future, and will the current fediverse platforms adapt it? Is the ActivityPub protocol being improved as well?

My main concern is that some fediverse platforms are not compatible. For example […]

0 0 0 0

With all the confusion this week about Mastodon, #ATproto, #ActivityPub, #FreeOurFeeds and #SocialWebFoundation, I think #Spritely is doing the best work in creating a new way forward with social media.

3 2 0 0
Preview
spritely / spritely-guix · GitLab GitLab.com

Somewhat of a niche interest post maybe, but if you're into #guix and #spritely BOTH, maybe you'll be excited to hear that we now have a Guix channel for bleeding edge versions of Goblins and Hoot! gitlab.com/spritely/spr...

3 2 0 0

Just learned a lot by reading @cwebber’s essay on “How decentralised is BlueSky?”.

dustycloud.org/blog/how-decentralized-i...

#fediverse #bluesky #activitypub #atproto #spritely

6 0 0 0
How decentralized is Bluesky really? -- Dustycloud Brainstorms

The above thread is excerpt from
dustycloud.org/blog/how-dec...
by @dustyweb.bsky.social

Hashtags apply to the whole thread:

#Fediverse #federated #Bluesky #Mastodon #ATProto #ActivityPub #centralization #distributed #Twitter #decentralized #DID #CredibleExit #trust #VentureCapitalists #Spritely

1 0 1 0