8sync.git
15 months agoDRAFT doc: Update `NEWS'.
Janneke Nieuwenhuizen [Thu, 17 Aug 2023 09:42:18 +0000 (11:42 +0200)]
DRAFT doc: Update `NEWS'.

* NEWS (8sync 0.5.0): New section.

15 months agoirc: Make irc-bot-init, irc-bot-cleanup methods.
Janneke Nieuwenhuizen [Tue, 15 Aug 2023 08:16:58 +0000 (10:16 +0200)]
irc: Make irc-bot-init, irc-bot-cleanup methods.

A bot likely needs to override these.

* 8sync/systems/irc.scm (irc-bot-init, irc-bot-cleanup): Change
procedures to methods.

15 months agodemos: irc-bot: Refactor message handling using new handle-message.
Janneke Nieuwenhuizen [Thu, 17 Aug 2023 07:49:22 +0000 (09:49 +0200)]
demos: irc-bot: Refactor message handling using new handle-message.

* demos/ircbot.scm (handle-line): Rename to...
(handle-message): ...this, and refactor.
* doc/8sync.texi (An intermission on live hacking): Update
accordingly.

15 months agoirc: Refactor using (8sync contrib irc) library from Snuik.
Janneke Nieuwenhuizen [Sun, 13 Aug 2023 09:18:12 +0000 (11:18 +0200)]
irc: Refactor using (8sync contrib irc) library from Snuik.

Switch to new IRC library while retaining 0.4.2 api compatibility.

* 8sync/systems/irc.scm: Rewrite using low level irc functions
from (8sync contrib irc).
(irc-socket-setup): Remove,
(<irc-bot>): Update to use %irc:default-port.  Add dispatch-message
handler.
(irc-bot-init): Refactor using irc:listen, irc:user, irc:nick.
(irc-bot-main-loop): Dispatch to...
(dispatch-message): ...this new message handler.
(handle-message): New overridable handler.  Invoke legacy
handle-misc-input and handle-line handlers for PRIVMSG.

15 months agodemos: ircbot: Do not assume /usr/bin/guile.
Janneke Nieuwenhuizen [Thu, 17 Aug 2023 08:26:46 +0000 (10:26 +0200)]
demos: ircbot: Do not assume /usr/bin/guile.

* demos/ircbot.scm: Use /usr/bin/env shebang.

15 months agoImport (8sync contrib irc) library from Snuik.
Janneke Nieuwenhuizen [Sat, 12 Aug 2023 20:40:05 +0000 (22:40 +0200)]
Import (8sync contrib irc) library from Snuik.

Snuik was created using 8sync, imported (8sync contrib irc) to
override it locally for Snuik, refactored parsing, moved irc
procedures out to this library.

* 8sync/contrib/irc.scm: New file.
* Makefile.am (SOURCES): Add it.

15 months agoirc: Avoid connecting to #f socket, attempt reconnect.
Janneke Nieuwenhuizen [Fri, 11 Aug 2023 11:37:55 +0000 (13:37 +0200)]
irc: Avoid connecting to #f socket, attempt reconnect.

* 8sync/systems/irc.scm (irc-socket-setup): Only connect to a valid
socket.  Retry if connecting fails.

15 months agoirc: Log to standard error.
Janneke Nieuwenhuizen [Sun, 13 Aug 2023 08:39:25 +0000 (10:39 +0200)]
irc: Log to standard error.

* 8sync/systems/irc.scm (echo-message): Add #:port parameter.
(handle-line): Use it to echo to stderr.

15 months agoguix: Update instructions with guix shell.
Janneke Nieuwenhuizen [Thu, 17 Aug 2023 08:24:10 +0000 (10:24 +0200)]
guix: Update instructions with guix shell.

* guix.scm: Replace guix environment comment with guix shell.

3 years agowebsocket: Queue fragmented frames to avoid interleaving. wip-websocket
Rutger van Beusekom [Wed, 18 Nov 2020 15:12:28 +0000 (16:12 +0100)]
websocket: Queue fragmented frames to avoid interleaving.

* 8sync/systems/websocket/client.scm (<websocket>)[frames]: New slot.
(websocket-send): Use it to queue fragmented frames.

Acked-by: Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
3 years agowebsocket: Gracefully handle read errors and socket close.
Jan (janneke) Nieuwenhuizen [Sun, 8 Nov 2020 07:30:39 +0000 (08:30 +0100)]
websocket: Gracefully handle read errors and socket close.

* 8sync/systems/websocket/client.scm (websocket-socket-open?): New
method.
(websocket-loop): Use it to gracefully handle errors socket close.

3 years agomingw: Hack for missing /dev/urandom.
Jan (janneke) Nieuwenhuizen [Fri, 30 Oct 2020 14:01:30 +0000 (15:01 +0100)]
mingw: Hack for missing /dev/urandom.

* 8sync/systems/websocket/client.scm (open-entropy-port): Add hack for
missing /dev/urandom.

3 years agomingw: Avoid SIGPIPE.
Jan (janneke) Nieuwenhuizen [Fri, 30 Oct 2020 14:00:39 +0000 (15:00 +0100)]
mingw: Avoid SIGPIPE.

* 8sync/systems/web.scm (initialize): Only set SIGPIPE if it is
available.

3 years agoagenda: Handle wrong-type-arg in select.
Jan (janneke) Nieuwenhuizen [Sat, 7 Nov 2020 09:45:32 +0000 (10:45 +0100)]
agenda: Handle wrong-type-arg in select.

This fixes

Backtrace:
          10 (apply-smob/1 #<catch-closure 7fca5dcad920>)
In ice-9/boot-9.scm:
    705:2  9 (call-with-prompt _ _ #<procedure default-prompt-handler (k proc)>)
In ice-9/eval.scm:
    619:8  8 (_ #(#(#<directory (guile-user) 7fca5d93f140>)))
In ice-9/boot-9.scm:
   2312:4  7 (save-module-excursion _)
  3832:12  6 (_)
In 8sync/actors.scm:
    812:6  5 (run-hive #<<hive> 7fca5d977190> _ #:cleanup _ #:handle-signals _)
In ice-9/control.scm:
    91:24  4 (call-with-escape-continuation _)
In 8sync/agenda.scm:
    569:6  3 (run-agenda #<<agenda> queue: (() . #f) prompt-tag: ("prompt") read-port-map: #<hash-table 7fca5…> …)
    470:7  2 (update-agenda-from-select! #<<agenda> queue: (() . #f) prompt-tag: ("prompt") read-port-map: #<h…>)
In ice-9/boot-9.scm:
    829:9  1 (catch system-error #<procedure 7fca5bf1ab70 at 8sync/agenda.scm:471:9 ()> #<procedure 7fca5cd09…> …)
In unknown file:
           0 (select (#<closed: file 7fca5b077380> #<input-output: socket 11>) (#<closed: file 7fca5b077380>) # …)

ERROR: In procedure select:
In procedure select: Wrong type argument in position 1: #<closed: file 7fca5b077380>

* 8sync/agenda.scm (update-agenda-from-select!): Catch everything.

3 years agowebsocket: Support for sending fragmented frames.
Jan (janneke) Nieuwenhuizen [Mon, 22 Apr 2019 17:30:22 +0000 (19:30 +0200)]
websocket: Support for sending fragmented frames.

* 8sync/systems/websocket/frame.scm (make-text-frame): Add keyword
parameters final and continuation.
(make-binary-frame): Likewise.
* 8sync/systems/websocket/client.scm (make-fragmented-frames): New
function.
(websocket-send): Use it to send fragmented frames.

3 years agowebsocket: Initial <websocket> client actor support.
Jan (janneke) Nieuwenhuizen [Mon, 22 Apr 2019 17:03:37 +0000 (19:03 +0200)]
websocket: Initial <websocket> client actor support.

* 8sync/systems/websocket/client.scm (no-op): New procedure.
(<websocket>): Change from record to actor and use it.
(websocket-init): New method.
(set-nonblocking!): New procedure.
(make-client-socket): Use it.
(make-websocket): Rename to...
(websocket-open): ...this new method and change accordingly.
(close-websocket): Rename to ...
(websocket-close): ...this new method and change accordingly.
(handshake, websocket-send, websocket-connecting, websocket-open?,
websocket-closing?, websocket-closed?): Change to method and update
accordingly.
(display-websocket): Move to...
(write)[<websocket]: ...this new specialization.
(set-record-type-printer!): Remove.
(websocket-loop): Renamed from...
* 8sync/systems/websocket/server.scm (websocket-client-loop): ...here.
(make-websocket-actor): New procedure.
(<websocket-server>): Call it for websocket upgrade, create new
<websocket> actor.
* demos/websocket/8s-client.scm,
demos/websocket/8s-server.scm,
demos/websocket/ws-client.js,
demos/websocket/ws-server.js: New files.
* Makefile.am (EXTRA_DIST): Add them.

3 years agoguix: Use guile-3.0. master
Jan (janneke) Nieuwenhuizen [Thu, 18 Mar 2021 13:21:28 +0000 (14:21 +0100)]
guix: Use guile-3.0.

* guix.scm (name)[native-inputs]: Remove guile.
[inputs]: New field, add guile-3.0.

3 years agowebsocket: server: Remove .upgrade-paths accessor.
Jan (janneke) Nieuwenhuizen [Thu, 18 Mar 2021 13:20:02 +0000 (14:20 +0100)]
websocket: server: Remove .upgrade-paths accessor.

* 8sync/systems/websocket/server.scm (<websocket-server>): Remove
.upgrade-paths accessor.  There's a method for doing this.

3 years agoSupport for guile-3.0.5: Move test-exit inside srfi-64 test.
Jan (janneke) Nieuwenhuizen [Thu, 18 Mar 2021 08:47:24 +0000 (09:47 +0100)]
Support for guile-3.0.5: Move test-exit inside srfi-64 test.

* tests/test-actors.scm,
tests/test-agenda.scm,
tests/test-rmeta-slot.scm (test-exit): Move inside test, where
'test-runner-current' is still set.

4 years agowebsocket: Oops, avoid looping.
Jan Nieuwenhuizen [Tue, 28 Jan 2020 13:08:29 +0000 (14:08 +0100)]
websocket: Oops, avoid looping.

* 8sync/systems/websocket/server.scm (websocket-client-loop): Oops,
avoid looping.

4 years agobuild: Support cross building.
Jan Nieuwenhuizen [Wed, 6 Nov 2019 11:06:45 +0000 (12:06 +0100)]
build: Support cross building.

* configure.ac: Add AC_CANONICAL_HOST to get host.
* Makefile.am (.scm.go): Set it as target.

4 years agobuild: Prepare for guile 3.
Jan Nieuwenhuizen [Thu, 31 Oct 2019 14:39:40 +0000 (15:39 +0100)]
build: Prepare for guile 3.

* configure.ac: Check for guile 3.0 too.
* Makefile.am: Install in site-ccache.

4 years agoDo not read a frame past EOF.
Rutger van Beusekom [Fri, 22 Nov 2019 21:36:08 +0000 (22:36 +0100)]
Do not read a frame past EOF.

* 8sync/systems/websocket/frame.scm (read-frame): Handle EOF.

4 years agowebsocket: Also concatenate last fragmented frame.
Jan Nieuwenhuizen [Mon, 27 Jan 2020 17:35:12 +0000 (18:35 +0100)]
websocket: Also concatenate last fragmented frame.

* 8sync/systems/websocket/server.scm (websocket-client-loop): Also add
final fragmented frame.

5 years agoweb server: Treat upgrade requests as case-insensitive.
Jan Nieuwenhuizen [Mon, 22 Apr 2019 15:03:45 +0000 (17:03 +0200)]
web server: Treat upgrade requests as case-insensitive.

* 8sync/systems/web.scm (maybe-upgrade-request): Compare using
string-ci=?  Fixes upgrade request for "WebSocket".

5 years agodoc: Fix initial sleeper.
Jan Nieuwenhuizen [Thu, 18 Apr 2019 05:10:41 +0000 (07:10 +0200)]
doc: Fix initial sleeper.

* doc/8sync.texi (Writing our own actors): Add missing slot to initial
sleeper example.

5 years agoguix: Bump to guile-2.2
Jan Nieuwenhuizen [Mon, 22 Apr 2019 16:49:48 +0000 (18:49 +0200)]
guix: Bump to guile-2.2

* guix.scm (name): Bump to 2.2.

7 years ago8sync 0.4.2 v0.4.2
Christopher Allan Webber [Sat, 18 Mar 2017 05:54:27 +0000 (00:54 -0500)]
8sync 0.4.2

7 years agoAdd NEWS for 8sync 0.4.2
Christopher Allan Webber [Sat, 18 Mar 2017 05:07:58 +0000 (00:07 -0500)]
Add NEWS for 8sync 0.4.2

7 years agobuild: guix.scm: Use git-predicate procedure from Guix proper.
Christopher Allan Webber [Tue, 14 Feb 2017 20:16:37 +0000 (14:16 -0600)]
build: guix.scm: Use git-predicate procedure from Guix proper.

* guix.scm: Use git-predicate procedure from Guix to define source.

7 years agoweb: Remove web-deprecated.scm.
Christopher Allan Webber [Thu, 9 Feb 2017 21:28:22 +0000 (15:28 -0600)]
web: Remove web-deprecated.scm.

* 8sync/systems/web-deprecated.scm: Removed file.

7 years agowebsocket: Preventing some eof-object related errors.
Christopher Allan Webber [Thu, 9 Feb 2017 20:44:05 +0000 (14:44 -0600)]
websocket: Preventing some eof-object related errors.

* 8sync/systems/websocket/server.scm (websocket-client-loop):
Prevent some errors where eof-objects appear as the frame by
the time we hit the cond.

7 years agoactors: Avoid building up stack of error handlers when resuming coroutines.
Christopher Allan Webber [Mon, 30 Jan 2017 05:10:13 +0000 (23:10 -0600)]
actors: Avoid building up stack of error handlers when resuming coroutines.

However it's not clear that we're not still building up a stack of
prompts. :\

* 8sync/actors.scm (hive-process-message): Avoid building up stack of
error handlers when resuming coroutines.

7 years agoagenda: Always set sec/usec to exact time.
Christopher Allan Webber [Mon, 30 Jan 2017 05:08:22 +0000 (23:08 -0600)]
agenda: Always set sec/usec to exact time.

* 8sync/agenda.scm (delayed-time): Always set sec/usec to exact time.

7 years agormeta-slot: Rename wrap-rmeta-slot to build-rmeta-slot.
Christopher Allan Webber [Sun, 29 Jan 2017 22:14:56 +0000 (16:14 -0600)]
rmeta-slot: Rename wrap-rmeta-slot to build-rmeta-slot.

* 8sync/rmeta-slot.scm (build-rmeta-slot): Renamed from wrap-rmeta-slot.
(make-rmeta-slot): Removed.
* 8sync/actors.scm (build-actions): Update caller to build-rmeta-slot.
* tests/test-rmeta-slot.scm: Update tests.

7 years agoactors: Switch over to using wrap-rmeta-slot for build-actions.
Christopher Allan Webber [Wed, 25 Jan 2017 17:42:20 +0000 (11:42 -0600)]
actors: Switch over to using wrap-rmeta-slot for build-actions.

* 8sync/rmeta-slot.scm (wrap-rmeta-slot): New variable.

* 8sync/actors.scm (build-actions): Switch from using make-rmeta-slot
to using wrap-rmeta-slot.

* doc/8sync.texi (Writing our own actors): Update documentation
to use #:init-thunk.

* 8sync/actors.scm (<actor>, define-actor, <hive>):
* 8sync/systems/irc.scm (<irc-bot>):
* demos/actors/robotscanner.scm (<warehouse-room>, <droid>):
* tests/test-actors.scm (<hi-on-init>):
* tests/test-rmeta-slot.scm (<kah-lassy>, <sub-lassy>): Update to
use #:init-thunk instead of #:init-value on actions slot.

7 years agoactors: Use rmeta-slot for actions dispatch.
Christopher Allan Webber [Wed, 25 Jan 2017 00:06:58 +0000 (18:06 -0600)]
actors: Use rmeta-slot for actions dispatch.

* 8sync/actors.scm (actor-inheritable-message-handler, build-actions):
Use rmeta-slot tooling for action dispatch.

7 years agormeta-slot: Make equal? type hash table access the default.
Christopher Allan Webber [Tue, 24 Jan 2017 23:41:16 +0000 (17:41 -0600)]
rmeta-slot: Make equal? type hash table access the default.

This is the more general case, so we may as well.

* 8sync/rmeta-slot.scm (class-rmeta-ref): Set #:equals?, #:cache-set!,
and #:cache-ref all to equal? type access rather than eq? by default.

7 years agormeta-slot: New module for recursive meta-slot access.
Christopher Allan Webber [Tue, 24 Jan 2017 23:27:14 +0000 (17:27 -0600)]
rmeta-slot: New module for recursive meta-slot access.

This is an abstraction around the core idea driving the actor actions
system.  It turns out I need this abstraction for mudsync as well, so
I'm breaking it out.  Pleasantly, it should be much faster now, since
a cache is built for each class regarding what key should resolve to
what value.

* 8sync/rmeta-slot.scm:
* tests/test-rmeta-slot.scm: New modules.
* Makefile.am: Add them.

7 years agowebsocket: Adding myself to server copyright lines.
Christopher Allan Webber [Tue, 24 Jan 2017 17:19:57 +0000 (11:19 -0600)]
websocket: Adding myself to server copyright lines.

* 8sync/systems/websocket/server.scm: Adjust copyright lines.

7 years agowebsockets: Initial websocket support.
Christopher Allan Webber [Sun, 15 Jan 2017 00:24:34 +0000 (18:24 -0600)]
websockets: Initial websocket support.

* 8sync/contrib/base64.scm:
* 8sync/contrib/sha-1.scm:
* 8sync/ports.scm:
* 8sync/systems/websocket.scm:
* 8sync/systems/websocket/client.scm:
* 8sync/systems/websocket/frame.scm:
* 8sync/systems/websocket/server.scm:
* 8sync/systems/websocket/utils.scm: New files.

* Makefile.am (SOURCES): Add them.

* 8sync/systems/web.scm (<web-server>): Rename upgrade slot to
upgrade-paths and use it.
(.upgrade-paths, maybe-upgrade-request): New variables.
(web-server-client-loop): Upgrade protocol if appropriate.

7 years agoactors: Allow actors to specify whether to handle an *init* action.
Christopher Allan Webber [Sat, 21 Jan 2017 06:53:48 +0000 (00:53 -0600)]
actors: Allow actors to specify whether to handle an *init* action.

* 8sync/actors.scm (<actor>): New should-init slot.
(hive-handle-init-all, %hive-create-actor): Respect 'should-init slot.

7 years agoactors: Don't reply to a message when the messsage doesn't need a reply.
Christopher Allan Webber [Fri, 20 Jan 2017 23:58:20 +0000 (17:58 -0600)]
actors: Don't reply to a message when the messsage doesn't need a reply.

* 8sync/actors.scm (<-reply, <-reply*, <-reply-wait, <-reply-wait*):
Only reply to messages if they're waiting on a reply still.
This avoids the challenges of actors never having requested a
reply in the first place resulting in trying to resume a waiting
coroutine that doesn't exist, as well as maybe the bonus one of not
replying multiple times to a message.

7 years agorepl: Publish notification about repl updates to subscribers.
Christopher Allan Webber [Thu, 19 Jan 2017 17:10:08 +0000 (11:10 -0600)]
repl: Publish notification about repl updates to subscribers.

* 8sync/repl.scm (<repl-manager>): Convert to use define-class.
Switch all getters accessors from `repl-manager-' prefix to
dot-prefix.
Add subscribers slot.
Add action handlers for add-subscriber and remove-subscriber.
(repl-manager-cleanup, repl-manager-init): Use dot-prefix
getters/accessors.
(repl-manager-init): Update to inform subscribers after every time
we poll the REPL.
(repl-manager-add-subscriber, repl-manager-remove-subscriber): New
procedures.

7 years agoweb: Rename getters / accessors to use dot prefix.
Christopher Allan Webber [Sun, 15 Jan 2017 15:29:16 +0000 (09:29 -0600)]
web: Rename getters / accessors to use dot prefix.

* 8sync/systems/web.scm (<web-server>, .host, .family, .port-num)
(.addr, .socket, .http-handler): Rename getters/accessors from
web-server- prefix to dot prefix.
(web-server-socket-loop, web-server-handle-request, web-server-cleanup):
Update callers.

7 years agoweb: Rename handler slot to http-handler.
Christopher Allan Webber [Sun, 15 Jan 2017 15:26:27 +0000 (09:26 -0600)]
web: Rename handler slot to http-handler.

* 8sync/systems/web.scm (<web-server>, web-server-handle-request):
Rename handler slot to http-handler.

7 years agoAdd define-method-star.
Christopher Allan Webber [Wed, 11 Jan 2017 17:09:01 +0000 (11:09 -0600)]
Add define-method-star.

* 8sync/systems/define-method-star.scm: New file.

7 years agoUpdate copyrights.
Christopher Allan Webber [Wed, 11 Jan 2017 17:02:34 +0000 (11:02 -0600)]
Update copyrights.

* 8sync/actors.scm:
* 8sync/agenda.scm:
* 8sync/debug.scm:
* 8sync/repl.scm:
* 8sync/systems/irc.scm:
* 8sync/systems/web.scm:
* Makefile.am:
* demos/actors/botherbotherbother.scm:
* demos/actors/robotscanner.scm:
* demos/actors/simplest-possible.scm:
* demos/ircbot.scm: Update copyright lines.

7 years agoweb: New actorified version of the web server.
Christopher Allan Webber [Wed, 11 Jan 2017 16:54:14 +0000 (10:54 -0600)]
web: New actorified version of the web server.

* 8sync/systems/web.scm: New file.

7 years agoactors: Update comments on addresses.
Christopher Allan Webber [Mon, 9 Jan 2017 17:17:38 +0000 (11:17 -0600)]
actors: Update comments on addresses.

* 8sync/actors.scm: Updated comments on addresses.

7 years agobuild: Releasing 8sync 0.4.1. v0.4.1
Christopher Allan Webber [Sun, 8 Jan 2017 21:27:32 +0000 (15:27 -0600)]
build: Releasing 8sync 0.4.1.

* configure.ac: Bumping verison number to 0.4.1.

7 years agobuild: Fix install targets to point to Guile 2.2 instead of 2.0.
Christopher Allan Webber [Sun, 8 Jan 2017 21:26:43 +0000 (15:26 -0600)]
build: Fix install targets to point to Guile 2.2 instead of 2.0.

* Makefile.am (modir, godir): Fix install targets to point to Guile 2.2
instead of 2.0.

7 years agopackaging: Updating guix.scm to GPLv3+, setting source to checkout.
Christopher Allan Webber [Sun, 8 Jan 2017 20:08:17 +0000 (14:08 -0600)]
packaging: Updating guix.scm to GPLv3+, setting source to checkout.

I talked to Jan Nieuwenhuizen, who agreed to license their
contributions to this file under GPLv3+, simplifying the licensing.
The rest of 8sync is still LGPLv3+... this just applies to the Guix
packaging.  We also borrow some code from guile-sdl2 to set our source
to be from the package itself, making testing the package from
guix.scm easier.

* guix.scm: Switch license to GPLv3+.
Switch source to be from the local directory, borrowed from
guile-sdl2.

7 years agobuild: Releasing version 0.4.0. v0.4.0
Christopher Allan Webber [Sun, 8 Jan 2017 00:53:57 +0000 (18:53 -0600)]
build: Releasing version 0.4.0.

* configure.ac: Update version number to 0.4.0.

7 years agobuild: Update and comment on hash in guix.scm.
Christopher Allan Webber [Sun, 8 Jan 2017 00:57:15 +0000 (18:57 -0600)]
build: Update and comment on hash in guix.scm.

* guix.scm: Update hash, but also acknowledge that updating the hash
here is futile since releasing will have a different hash!  In the
future we'll have nicer code here that can use the code from the git
checkout.

7 years agobuild: Add guix.scm to tarball.
Christopher Allan Webber [Sun, 8 Jan 2017 00:56:08 +0000 (18:56 -0600)]
build: Add guix.scm to tarball.

Makefile.am (EXTRA_DIST): Add guix.scm.

7 years agobuild: Rename package.scm to guix.scm and update.
Christopher Allan Webber [Sun, 8 Jan 2017 00:52:34 +0000 (18:52 -0600)]
build: Rename package.scm to guix.scm and update.

* guix.scm: Renamed from package.scm and updated for v0.4.0.

7 years agobuild: Include bootstrap.sh in tarball.
Christopher Allan Webber [Sun, 8 Jan 2017 00:50:50 +0000 (18:50 -0600)]
build: Include bootstrap.sh in tarball.

* Makefile.am (EXTRA_DIST): Add bootstrap.sh.

7 years agoNEWS: Updating news for v0.4.0.
Christopher Allan Webber [Sun, 8 Jan 2017 00:18:37 +0000 (18:18 -0600)]
NEWS: Updating news for v0.4.0.

* NEWS: New 8sync 0.4 section.

7 years agobuild: Add gendocs.
Christopher Allan Webber [Sat, 7 Jan 2017 23:13:27 +0000 (17:13 -0600)]
build: Add gendocs.

* doc/gendocs.sh:
* doc/gendocs_template: New files.

* .gitignore: Update to ignore files built by gendocs.sh.

7 years agodoc: Move content from doc/8sync-new-manual.org to doc/8sync.texi.
Christopher Allan Webber [Sat, 7 Jan 2017 17:58:29 +0000 (11:58 -0600)]
doc: Move content from doc/8sync-new-manual.org to doc/8sync.texi.

* doc/8sync-new-manual.org: Deleted.
* doc/8sync.texi: Move content exported from doc/8sync-new-manual.org to
here.

7 years agodoc: Delete trailing whitespace.
Christopher Allan Webber [Fri, 6 Jan 2017 23:17:55 +0000 (17:17 -0600)]
doc: Delete trailing whitespace.

* doc/8sync-new-manual.org: Delete trailing whitespace.

7 years agodoc: Last minute cleanups to the tutorial before we move to texinfo.
Christopher Allan Webber [Fri, 6 Jan 2017 23:15:52 +0000 (17:15 -0600)]
doc: Last minute cleanups to the tutorial before we move to texinfo.

* doc/8sync-new-manual.org: Last minute cleanups to the tutorial before
we move to texinfo.

7 years agodoc: Add a note about actor-alive? being likely to be deprecated.
Christopher Allan Webber [Fri, 6 Jan 2017 22:23:50 +0000 (16:23 -0600)]
doc: Add a note about actor-alive? being likely to be deprecated.

* doc/8sync-new-manual.org: Add footnote about future deprecation of
actor-alive?.

7 years agodoc: Have telcmd tutorial example send itself a message for line handling.
Christopher Allan Webber [Fri, 6 Jan 2017 22:19:42 +0000 (16:19 -0600)]
doc: Have telcmd tutorial example send itself a message for line handling.

* doc/8sync-new-manual.org: Have telcmd tutorial example send itself a
message for line handling.

7 years agoirc: Convert handle-line to a message handler.
Christopher Allan Webber [Fri, 6 Jan 2017 21:58:16 +0000 (15:58 -0600)]
irc: Convert handle-line to a message handler.

* 8sync/systems/irc.scm (<irc-bot>): Add 'handle-line action handler,
which points to handle-line generic.
(dispatch-raw-line): Send message to our own actor to call handle-line.
(handle-line): Convert to be an action handler.

* demos/ircbot.scm:
* doc/8sync-new-manual.org: Update implementers of handle-line generic
method.

7 years agodoc: Reordering some paragraphs in the tutorial.
Christopher Allan Webber [Fri, 6 Jan 2017 18:21:44 +0000 (12:21 -0600)]
doc: Reordering some paragraphs in the tutorial.

* doc/8sync-new-manual.org: Reordering some paragraphs in the tutorial.

7 years agodoc: Remove stray #+END_SRC.
Christopher Allan Webber [Fri, 6 Jan 2017 18:19:00 +0000 (12:19 -0600)]
doc: Remove stray #+END_SRC.

* doc/8sync-new-manual.org: Remove stray #+END_SRC.

7 years agoagenda: Remove deprecated comment.
Christopher Allan Webber [Fri, 6 Jan 2017 17:29:27 +0000 (11:29 -0600)]
agenda: Remove deprecated comment.

* 8sync/agenda.scm (run-agenda): Remove comment, since we did the thing
it suggested doing in the future.

7 years agodoc: Some tutorial tweaks.
Christopher Allan Webber [Fri, 6 Jan 2017 16:11:54 +0000 (10:11 -0600)]
doc: Some tutorial tweaks.

* doc/8sync-new-manual.org: Small tutorial tweaks.

7 years agodoc: Move the "live hacking intermission" to the bottom.
Christopher Allan Webber [Thu, 5 Jan 2017 03:38:23 +0000 (21:38 -0600)]
doc: Move the "live hacking intermission" to the bottom.

* doc/8sync-new-manual.org: Move the "live hacking intermission" to
the bottom of the tutorial.

7 years agodoc: Tutorial additions.
Christopher Allan Webber [Thu, 5 Jan 2017 03:36:31 +0000 (21:36 -0600)]
doc: Tutorial additions.

* doc/8sync-new-manual.org: Add "Writing our own network-enabled
actor" section.  Clean up other sections, including moving the intro
to the tutorial blathering about IRC systems to a footnote.

7 years agoUse *init* and *cleanup* in existing actors.
Christopher Allan Webber [Thu, 5 Jan 2017 02:02:13 +0000 (20:02 -0600)]
Use *init* and *cleanup* in existing actors.

* 8sync/repl.scm (<repl-manager>):
* 8sync/systems/irc.scm (<irc-bot>): Switch from an 'init action to the
implicit '*init* action.

* 8sync/systems/irc.scm (<irc-bot>, irc-bot-cleanup): Add *cleanup*
handler.

* demos/ircbot.scm:
* doc/8sync-new-manual.org: Drop some calls to 'init when
bootstrapping-messages since we now use '*init*.

7 years agodemos: Switch botherbotherbother demo over to use define-actor.
Christopher Allan Webber [Wed, 4 Jan 2017 22:53:55 +0000 (16:53 -0600)]
demos: Switch botherbotherbother demo over to use define-actor.

* demos/actors/botherbotherbother.scm: Switch to use define-actor.

7 years agoactors: Cleanup on signals.
Christopher Allan Webber [Wed, 4 Jan 2017 20:12:15 +0000 (14:12 -0600)]
actors: Cleanup on signals.

* 8sync/actors.scm (run-hive): Handle signals, currently SIGINT and
SIGTERM, in a friendly way.  Will still run cleanup on actors.

7 years agoactors: Remove define-simple-actor, add define-actor.
Christopher Allan Webber [Wed, 4 Jan 2017 17:41:30 +0000 (11:41 -0600)]
actors: Remove define-simple-actor, add define-actor.

define-simple-actor wasn't very useful, whereas define-actor is
moderately helpful.

* 8sync/actors.scm (define-simple-actor): Remove.
(define-actor): New macro.

* demos/actors/robotscanner.scm:
* demos/actors/simplest-possible.scm:
* tests/test-actors.scm: Convert to use define-simple-actor instead of
define-actor.

7 years agodoc: Add a note about the calls to display.
Christopher Allan Webber [Wed, 4 Jan 2017 17:41:22 +0000 (11:41 -0600)]
doc: Add a note about the calls to display.

* doc/8sync-new-manual.org: Add paragraph.

7 years agodoc: Tweak and fix the "Writing our own actors" section.
Christopher Allan Webber [Wed, 4 Jan 2017 17:31:57 +0000 (11:31 -0600)]
doc: Tweak and fix the "Writing our own actors" section.

* doc/8sync-new-manual.org: Fixed some errors and made things a bit
clearer.

7 years agoactors: Rename msg-receive, msg-val to mbody-receive, mbody-val.
Christopher Allan Webber [Wed, 4 Jan 2017 16:28:18 +0000 (10:28 -0600)]
actors: Rename msg-receive, msg-val to mbody-receive, mbody-val.

* 8sync/actors.scm (mbody-receive, mbody-val): Rename from msg-receive,
msg-val.  Update all callers.

7 years agoactors: Add auto-init feature to actors.
Christopher Allan Webber [Wed, 4 Jan 2017 01:57:50 +0000 (19:57 -0600)]
actors: Add auto-init feature to actors.

* 8sync/actors.scm (<actor>): Add '*init* action to actions slot.
(<hive>, hive-handle-init-all): Add '*init-all* action.
(hive-handle-cleanup-all): Adjust comment.
(%hive-create-actor): Add send-init? argument, and when supplied
call <-wait on the actor's '*init* method.
(bootstrap-actor, bootstrap-actor*): Rename from hive-create-actor,
hive-create-actor*.  Switch init argument to init-args and pass in #f to
%hive-create-actor's send-init? argument.
(create-actor, create-actor*): Switch init argument to init-args
and pass in #t to %hive-create-actor's send-init? argument.
(run-hive): Add '*init-all* action call to the hive on the initial
queue.

* 8sync/debug.scm (bootstrap-actor-gimmie, bootstrap-actor-gimmie*):
Rename from hive-create-actor-gimmie, hive-create-actor-gimmie*.

* demos/actors/botherbotherbother.scm:
* demos/actors/robotscanner.scm:
* demos/actors/simplest-possible.scm:
* demos/ircbot.scm:
* doc/8sync-new-manual.org:
* tests/test-actors.scm: Change calls from hive-create-actor to
bootstrap-actor.

* tests/test-actors.scm: Add actor *init*'ing tests.

7 years agodoc: Add addendum section on relationship between 8sync and Fibers.
Christopher Allan Webber [Tue, 3 Jan 2017 17:48:28 +0000 (11:48 -0600)]
doc: Add addendum section on relationship between 8sync and Fibers.

* doc/8sync-new-manual.org: Add "8sync and Fibers" section.

7 years agoactors: Implicit from-actor argument <-foo methods, and add rest of <-foo*.
Christopher Allan Webber [Tue, 3 Jan 2017 01:20:58 +0000 (19:20 -0600)]
actors: Implicit from-actor argument <-foo methods, and add rest of <-foo*.

* 8sync/actors.scm (<-, <-wait, <-reply, <-reply-wait): from-actor is
now implicitly supplied via %current-actor parameter.
(<-*, <-reply*): New procedures.
(<-wait*, <-reply-wait*): Now pull from-actor from #:actor.

* 8sync/actors.scm:
* 8sync/systems/irc.scm:
* demos/actors/botherbotherbother.scm:
* demos/actors/robotscanner.scm:
* demos/actors/simplest-possible.scm:
* demos/ircbot.scm:
* tests/test-actors.scm: Update all callers of <-foo procedures to drop
from-actor argument.

* doc/8sync-new-manual.org: Update documentation of <-foo procedures to
drop from-actor argument.

7 years agoagenda: Rename start-agenda to run-agenda.
Christopher Allan Webber [Mon, 2 Jan 2017 22:33:10 +0000 (16:33 -0600)]
agenda: Rename start-agenda to run-agenda.

* 8sync/agenda.scm (run-agenda): Renamed from start-agenda.
* 8sync/actors.scm:
* tests/test-agenda.scm: Update all callers.

7 years agoactors: Rename *clean-up* back to *cleanup.
Christopher Allan Webber [Mon, 2 Jan 2017 21:38:23 +0000 (15:38 -0600)]
actors: Rename *clean-up* back to *cleanup.

By popular intarwebs opinion.

* 8sync/actors.scm (<actor>, <hive>, hive-handle-cleanup-all)
(self-destruct, run-hive): Rename all references of clean-up to cleanup.
(hive-handle-cleanup-all, run-hive-cleanup): Rename name from clean-up
version.
* tests/test-actors.scm: Likewise.

7 years agoactors: Rename actor-am-i-alive? to actor-alive?.
Christopher Allan Webber [Mon, 2 Jan 2017 21:15:59 +0000 (15:15 -0600)]
actors: Rename actor-am-i-alive? to actor-alive?.

* 8sync/actors.scm (actor-alive?): Rename from actor-am-i-alive?.
* 8sync/actors.scm:
* 8sync/repl.scm:
* doc/8sync-new-manual.org: Update all references to actor-alive?.

7 years agoactors: Automatically add cookie by default in hive-create-actor.
Christopher Allan Webber [Mon, 2 Jan 2017 21:15:29 +0000 (15:15 -0600)]
actors: Automatically add cookie by default in hive-create-actor.

Also switch separator in cookie from "-" to ":".

* 8sync/actors.scm (hive-gen-actor-id): Switch separator from "-" to ":".
(hive-create-actor): Automatically add a cookie based on the class name.
(hive-create-actor*): Tweak docstring.

7 years agotests: Fix broken test in test-actors.
Christopher Allan Webber [Mon, 2 Jan 2017 18:23:52 +0000 (12:23 -0600)]
tests: Fix broken test in test-actors.

* tests/test-actors.scm: Fix broken test, forgot to update expected output.

7 years agotests: Oops, forgot to add <exploder> to test-actors.
Christopher Allan Webber [Mon, 2 Jan 2017 18:21:23 +0000 (12:21 -0600)]
tests: Oops, forgot to add <exploder> to test-actors.

* tests/test-actors.scm: Add <exploder>.

7 years agoactors: Update self-destruct to run *clean-up* message handler.
Christopher Allan Webber [Mon, 2 Jan 2017 18:17:15 +0000 (12:17 -0600)]
actors: Update self-destruct to run *clean-up* message handler.

* 8sync/actors.scm (self-destruct): Wait on *clean-up* action before
self-destructing by default.
(run-hive): Add parameter to specify whether or not to clean-up after
the hive finishes its tasks.
* tests/test-actors.scm: Add tests for disabling #:clean-up on run-tasks
and ensuring that *clean-up* runs on self-destruct.

7 years agoactors: Rename *cleanup* action to *clean-up*.
Christopher Allan Webber [Mon, 2 Jan 2017 17:54:03 +0000 (11:54 -0600)]
actors: Rename *cleanup* action to *clean-up*.

* 8sync/actors.scm (<actor>, <hive>, hive-handle-clean-up-all, run-hive):
Rename *cleanup* to *clean-up* and *cleanup-all* to *clean-up-all*.
* tests/test-actors.scm: Likewise.

7 years agoactors: Add cleanup facility to run-hive.
Christopher Allan Webber [Mon, 2 Jan 2017 17:40:42 +0000 (11:40 -0600)]
actors: Add cleanup facility to run-hive.

* 8sync/actors.scm (build-actions): Moved location to be before <actor>
for compiler reasons.
(<actor>): Add *cleanup* default action to all actors, which does
nothing by default.
(<hive>, hive-handle-cleanup-all): New cleanup method, which gives
all actors still in the registry a chance to clean up.
(make-hive): Have the hive register itself to itself.
(run-hive): Now run in a dynamic-wind, and call run-hive-cleanup when
we're done.
(run-hive-cleanup): New variable.

* tests/test-actors.scm: New test to make sure cleanup is run.

7 years agotests: Add "speaker" utility.
Christopher Allan Webber [Mon, 2 Jan 2017 17:34:13 +0000 (11:34 -0600)]
tests: Add "speaker" utility.

* tests/utils.scm (speak-it, %speaker, speak, get-spoken, with-fresh-speaker):
New variables.
* tests/test-agenda.scm (speak-it): Remove in favor of new speaker from
utils.scm.  Update to use new speaker.

7 years agodoc: Rename calls to ez-run-hive to run-hive and adjust titles.
Christopher Allan Webber [Mon, 2 Jan 2017 00:46:08 +0000 (18:46 -0600)]
doc: Rename calls to ez-run-hive to run-hive and adjust titles.

* doc/8sync-new-manual.org: Rename calls to ez-run-hive to run-hive and
adjust titles.

7 years agoactors: Rename ez-run-hive to run-hive.
Christopher Allan Webber [Mon, 2 Jan 2017 00:45:50 +0000 (18:45 -0600)]
actors: Rename ez-run-hive to run-hive.

* 8sync/actors.scm (run-hive): Renamed from ez-run-hive.
All callers changed.

7 years agodocs: Added "Writing our own actors" section
Christopher Allan Webber [Sun, 1 Jan 2017 14:57:01 +0000 (08:57 -0600)]
docs: Added "Writing our own actors" section

* doc/8sync-new-manual.org: New "Writing our own actors and sending
messages between them" section.

7 years agodoc: Add pk debugging section.
Christopher Allan Webber [Sat, 31 Dec 2016 15:48:36 +0000 (09:48 -0600)]
doc: Add pk debugging section.

* doc/8sync-new-manual.org: Add pk debugging section.
Simplify some handle-line examples.

7 years agodoc: Finish "About live hacking" section.
Christopher Allan Webber [Fri, 30 Dec 2016 15:22:41 +0000 (09:22 -0600)]
doc: Finish "About live hacking" section.

* doc/8sync-new-manual.org: "An intermission: about live hacking" section
finished, at least for now.

7 years agoagenda: When re-invoking a continuation at the agenda, don't wrap in a catch.
Christopher Allan Webber [Wed, 28 Dec 2016 17:49:05 +0000 (11:49 -0600)]
agenda: When re-invoking a continuation at the agenda, don't wrap in a catch.

* 8sync/agenda.scm (<kontinue>): Add new record type which just wraps a
delimited continuation.
(8sync, 8sleep, 8yield): Wrap continuations in kontinue.
(agenda-run-once!): If "kontinue?", just resume the continuation without
catching errors (it already has an error handler!).

7 years agoagenda: Fix prompt buildup in agenda.
Christopher Allan Webber [Wed, 28 Dec 2016 16:33:19 +0000 (10:33 -0600)]
agenda: Fix prompt buildup in agenda.

Every time a delimited continuation was resumed, we were re-parameterizing.

* 8sync/agenda.scm (current-agenda-prompt): Remove.
(8sync-abort-to-prompt): Use (%current-agenda-prompt) parameter.
(%current-agenda-prompt): New prompt, deprecating %current-agenda.  This
is a slight optimization; we were only using the agenda for the prompt,
so we can remove the indirection of looking up the agenda prompt tag
every time.
(%current-agenda): Removed, see above.
(start-agenda): Move parameterization of %current-agenda-prompt,
current-read-waiter, and current-write-waiter here.
(agenda-run-once!): Remove parameterization.
Also remove comment which is irrelevant now that we're no longer using
an immutable-record-type on the agenda.

7 years agoagenda: Switch "yield" to "8yield" and export.
Christopher Allan Webber [Wed, 28 Dec 2016 16:29:58 +0000 (10:29 -0600)]
agenda: Switch "yield" to "8yield" and export.

This avoids a name collision with an existing procedure.  Plus yield was
never exported, apparently.

* 8sync/agenda.scm (8yield): Renamed from yield.