IRC channel logs

2016-04-14.log

back to list of logs

***DeeEff_ is now known as DeeEff
***__zxq9__ is now known as _zxq9_
***cojy_ is now known as cojy
***siel_ is now known as siel
***C_Keen is now known as C-Keen
***lloda```` is now known as lloda
<wingo>civodul: do you have any thoughts on the ports stuff?
<wingo>otherwise i'm going forward with hackings
<wingo>not merging quite yet; i want to get to a suspendable read-char before merging i think
<jmd>I have a list of lists, and I want to make sure that the car of each list is unique. What is the easiest way to do that?
<lloda>(delete-duplicates (sort l (lambda (a b) (< (car a) (car b))))) if you can order the cars
<lloda>if not probably a hash
<jmd>lloda: Thanks .
<lloda>you'd need also a predicate cars-are-equal for delete-duplicates, I missed that
<civodul>wingo: no! i've been meaning to read about it :-)
<wingo>:)
<civodul>let me see if i can provide useful feedback today
<wingo>coolio
<wingo>i can push my WIP work today too
<wingo>that moves port-related things to a separate module that is loaded by (guile) after the boot
<wingo>and re-exported of course
<wingo>to provide the same scheme interface
<wingo>but once it's in a module and is out of the boot process it's easier to hack on
<civodul>nice
<civodul>paroneayea: did you eventually merge the elisp branch in Guile?
<civodul>ACTION going through backlog
<civodul>the news you brought from the Emacs hackathon are excellent
<civodul>lazy maintainers shouldn't prevent you from making progress ;-)
<wingo>i think that branch changed some things about the compiler
<wingo>so probably review and round trips are needed
<wingo>i looked at it initially but it wasn't an immediately mergeable thing i didn't think
<wingo>dunno tho
<wingo>i should take another look :)
<paroneayea>civodul: wingo is right, it did change some compiler things, so it's waiting on review :)
<wingo>ACTION tries to remember why the-root-module and the-scm-module are different
<dsmith-work>day Greetings, Guilers
<paroneayea>morning, *
<wingo>ACTION pushed (ice-9 ports) to wip branch
<paroneayea>ACTION fetches
<civodul>wingo: the-scm-module is the interface of the
<civodul>err
<civodul>wingo: the-scm-module is the interface of the-root-module, no?
<wingo>civodul: yeah but they share an obarray
<wingo>so all definitions made by the-root-module are exported to the world
<wingo>so there's no point in them being separate
<wingo>dunno
<civodul>yeah
<civodul>"historical reasons"
<paroneayea>hysterical reasons
<civodul>that too ;-)
<rain1> https://lobste.rs/s/drcdvm/8sync_asynchronous_programming_made_awesome
<rain1>I think people (myself included) will benefit from some explanation about what 8sync is/does
<davexunit>rain1: that jlarocco user has no idea what they're talking about
<rain1>I was trying to put it lightly :P
<wleslie>good idea. how did you go unpacking those structs?
<civodul>paroneayea: awesome web site, both aesthetically and in terms of conciseness/clarity!
<civodul>one sentence, one example, boom
<civodul>the news items are managed by Haunt, right?
<stis>hej guilers!
<rain1>hey
<wleslie>say(stis, "hello").
<davexunit>civodul: yes, Haunt generates the entire site, including news.
<davexunit>which resulted in me receiving some very nice patches from paroneayea
<davexunit>haunt 0.2 coming "real soon now" a.k.a. when I have motivation and time
<stis>:)
<civodul>davexunit: we should probably use it for Guix, no?
<davexunit>we could, with some effort put into porting.
<davexunit>I cannot lead the charge on it at this time, though.
<davexunit>I'm going to try to make the documentation a little less terrible before I release.
<civodul>sure
<davexunit>then maybe someone else could do the work without pulling their hair out.
<paroneayea>civodul: thanks :)
<paroneayea>civodul: and yeah it's all haunt generated
<paroneayea>civodul: haunt + skribe is a joy and half to work with
<paroneayea>civodul: I think guix website port to haunt makes sense... then maybe you can finally host blogposts on the guix site itself :)
<paroneayea>civodul: and even have pictures in them sometimes! :)
<paroneayea>civodul: re: "conciseness" of the 8sync main page, I agree it's nice... though it's partly because its incomplete :)
<paroneayea>the challenge will be fleshing it out without losing the aesthetics derived from the main page's current minimalism :)
<davexunit>paroneayea: http://hjson.org/
<davexunit>ACTION sighs
<civodul>paroneayea: :-)
<civodul>paroneayea: yeah i think we should recruit someone to "port" the site to haunt
<paroneayea>davexunit: irritating
<paroneayea>davexunit: the only thing I "wish for" that that thing provides:
<paroneayea>comments in json files.
<rain1>wow json doesn't allow comments? that's strange
<paroneayea>rain1: no comments in standard json. The general reason given is "well it's just data" but that's clearly bs
<rain1>they should add //
<davexunit>it's not for humans
<paroneayea>because there's plenty of data formats which are much less aimed for human readability than json
<davexunit>yeah there should be comment syntax
<paroneayea>the appealing part of json is that it's in the middle of machine readable and human readable.
<rain1>did you see my link earlier, paroneayea ?
<paroneayea>rain1: I saw that link yesterday, but looking at updated comments now
<paroneayea>ah
<paroneayea>yeah, one person on there doesn't know what they're talking about, but luckily there's a commenter there (mjn) who's very clear
<rain1>i wasn't able to understand him
<paroneayea>rain1: I'm planning on including a tutorial video to go with it, but let me see if I can give an on the fly explaination
<paroneayea>rain1: have you done any event driven programming?
<rain1>yeah
<paroneayea>rain1: so are you familiar with callback hell?
<rain1>no
<rain1>is that just having loads and it becoming spagetti code?
<paroneayea>rain1: it's having to split your functions across a lot of tiny tiny functions in a way that becomes very spaghetti like, yes
<paroneayea>chaining callbacks to callbacks to callbacks
<paroneayea>and suddenly you can't tell how your code flows anymore
<paroneayea>rain1: so for example, the version on the site shows something like this:
<paroneayea>rain1: well, you can see the example there already:
<paroneayea> http://www.gnu.org/software/8sync/
<paroneayea>rain1: so if you were to do that with just callbacks
<paroneayea>it might look something like this
<rain1>oh boy freenode is still getting ddos'd
<rain1>just got all your messages in one block
<paroneayea>rain1: http://pamrel.lu/7538/
<paroneayea>so there's a very contrived example
***Fuuzetsu is now known as Guest51019
<paroneayea>in this case, the fetch-active-users is happening asynchronously, and it needs a place to pass the users once they're ready
<paroneayea>but I had to split it into two functions to pass it back
<paroneayea>not only that but I needed some way of passing along a callback
<paroneayea>for the result even
<paroneayea>instead of just passing it back as the result of the initial function
<paroneayea>much harder to follow
<paroneayea>and this is a *simple* example
<paroneayea>most code with callbacks gets much, much worse
<paroneayea>some people try to mitigate it with closures
<rain1>so it's a new way of event driven programming without any callbacks?
<paroneayea>but then you end up with https://en.wikipedia.org/wiki/Pyramid_of_doom_%28programming%29
<paroneayea>rain1: correct, or rather, the callbacks are hidden
<paroneayea>they're there
<paroneayea>but the function *suspends* at the 8sync part
<paroneayea>and when the data is ready, it wakes back up again,
<paroneayea>but it looks like you were just writing synchronous code.
<cojy>where is the continuation delimited at?
<paroneayea>and it does that because the 8sync event loop has some fancy stuff to handle coroutines via delimited continuations
<paroneayea>cojy: at the event loop itself
<paroneayea>here:
<paroneayea> http://git.savannah.gnu.org/cgit/8sync.git/tree/8sync/agenda.scm#n528
<paroneayea>cojy: but users don't need to be able to read that
<paroneayea>oops
<paroneayea>sorry, wrong section
<paroneayea> http://git.savannah.gnu.org/cgit/8sync.git/tree/8sync/agenda.scm#n818
<paroneayea>right there
<paroneayea>you also don't *have to* use (8sync (foo)) to do callbacks
<paroneayea>you can do normal callbacks, by returning them from a function
<paroneayea>but if you use (8sync (foo)), it aborts to the prompt, sets up the code you've requested to call in a promise
<paroneayea>and when it's done, it calls the suspended function again
<paroneayea>again, that's not a thing users need to know
<paroneayea>in the future, "delimited continuations" might not even be mentioned on the front page of 8sync's site, as knowing how that works is a distraction for most potential users. for many users, it'll be magic, but the documentation will clearly explain how it works for those who are interested.
<paroneayea>magic, with full permission and assistance of peeking behind the curtain :)
<paroneayea>rain1: cojy: did that help a bit?
<rain1>the first bit did! after you went into continuations i got lost :)
<paroneayea>rain1: which might be why technical terms will disappear from the 8sync front page eventually
<paroneayea>for now, since the project is so young
<cojy>paroneayea: well i guess i'd just need a full example, because i dont see how the user is expected to use it from the start, where the toplevel prompt is
<rain1>I was thinking of a simple example: what if you have 2 buttons and a number, one button increments it and one decrements it
<cojy> https://www.refheap.com/117544
<cojy>this is how i would explain how delimited continuations help with async
<rain1>so i can imagine how you'd have a call back for each button to do that
<rain1>is that something that could be written with 8sync in a more compact way or something?
<paroneayea>rain1: probably. We need more demos.
<paroneayea>there are some demos already
<paroneayea>there's an irc bot you can play with
<paroneayea>anyway, I need to get back to work. More examples coming soon.
<rain1>I think I'm starting to get it :D
<rain1>I guess it's a little tricky because to have events happening you need a platform like IRC, webserver, GTK, ..
<rain1>and then a program builds on top of that
<cojy>what's the best way to get a string from the response body of an http request in the web client?
<davexunit>cojy: you're given a port object to read from, right?
<cojy>you have to either make one or a bytevector
<davexunit>cojy: the documentation says the body may be a string, bytevector, or #f
<davexunit>it will be a port if #:streaming? is set to #t
<davexunit>cojy: sounds like the URI you are working with specifies the incorrect MIME type in its response.
<cojy>where in the documentation does it say that?
<davexunit>7.3.8
<cojy>ah i see it now
<cojy>i was in the response page
<davexunit>if you're sure the bytevector is UTF-8 encoded text you can convert it to a string
<davexunit>with utf8->string
<davexunit>or, you could try passing #:streaming? #t and calling read-string on the port
<davexunit>read-string is in (ice-9 rdelim)
<cojy>it's alright ig ot it, didnt realize http-get returned multiple values
***karswell` is now known as karswell
<rain1>does anyone have implementation of shell | pipe in guile?
<rain1>for running two programs
<rain1>I am just wondering if it's already written