freenode/#lisp - IRC Chatlog
Search
11:44:44
pagnol
I usually add a line like `find -name '*.lisp' | entr run-the-tests` to my makefiles
11:59:02
shka
i want to use auth module to have signing up, logging in, nothing out of ordinary i think
12:00:36
Colleen
shka: Function user:check https://shirakumo.github.io/radiance#FUNCTION%20USER%3ACHECK
12:02:01
shka
so i depend on auth now, those this mean that somehow this should already work in basic form?
12:05:04
Shinmera
For localhost, which does not have subdomains, you can reach it through a routing like so: http://localhost:8080/!/auth/login, which is translated to http://auth.localhost:8080/login internally.
12:05:40
Shinmera
On your deployed system you would either set up a proper auth subdomain, or set up a route to translate it.
12:06:19
Shinmera
The gist is, each module gets its own subdomain so that it can use the full path space for itself.
12:07:35
Shinmera
You can set it up so that the login page is reachable through /auth/login, or /userlogin, or whatever you want, but that's a step for later.
12:16:55
Shinmera
So if you define a page on the uri "foo/bar" that'd be (uri-to-url "foo/bar" :representation :external)
12:19:31
Shinmera
Right, if you do it from the REPL that's what you'll get. Radiance has a list of top-level domains it knows about. By default that's "radiance" and "localhost". When you're running a translation from the REPL it doesn't really know which one you mean, so it just picks the first one.
12:19:43
Shinmera
When you do a translation within the context of a request, it knows which domain to pick based on the request.
12:20:15
Shinmera
It also might know additional information, such as that you used some other translation route like the /!/ prefix, and uses that to translate back.
12:26:28
shrdlu68
varjag: I fixed yesterday's issue: https://github.com/shrdlu68/cl-tls/commit/2155de591134834184dcc1d19321da65a52eb254
12:29:08
shrdlu68
varjag: The OCSP issue still persists, because I've not yet implemented OCSP stapling for cl-tls. Most implementations fall back to "old-style" OCSP only when the server does not support OCSP stapling. I'll do that soon as I get some time.
12:51:18
makomo
beach: i re-read your essay yesterday for fun and found a little typo -- ctrl+f ",," :-)
13:07:40
phoe
this sounds strangely correct - by the time you're using double unquote, you're most likely already wrong somewhere
13:08:33
makomo
i was thinking how i should have said "you probably meant to only single-unquote this space" :-)
13:54:06
makomo
oh, regarding backquote, i have a question. i've been studying/inspecting the once-only macro (again) recently, and it uses ,,@
13:55:20
makomo
at first i was confused because what is the leftmost unquote supposed to do? i confirmed experimentally that it unquotes every single element of the spliced-in list, but i can't exactly see where this behavior is specified in http://www.lispworks.com/documentation/HyperSpec/Body/02_df.htm
13:58:10
makomo
i should also probably link the source of ONCE-ONLY, here's one: https://stackoverflow.com/questions/9808928/understanding-how-to-implement-once-only-lisp-macro
13:59:55
pfdietz
I've always found it easier to unpack macro code using nested backquotes into a series of functions.
14:01:35
makomo
and also, i feel like the page doesn't do a good job of explaining nested backquotes/unquotes. there's only a single line at the end and it's not clear to me what "should be *expanded* first" and "occur in a *row*" mean
14:02:32
makomo
(1) "expanded" because what does "expansion" even mean in this context and (2) commas can appear in a "row" but with ' and @ interspersed inbetween
14:26:13
beach
makomo: Unfortunately, the only way to understand backquote that I know of is to apply the algorithm they show. The Common Lisp HyperSpec is meant for people who implement Common Lisp, so it is kind of understandable that it is not very pedagogical in this respect.
14:27:40
makomo
beach: yeah, i agree with that, but i'm having trouble following their definition since the backquote is nested. i have no problem following the formalities for a single level of quotation
14:28:46
makomo
am i supposed to treat ``(...) as `<basic>, where <basic> is then the rest, i.e. `(...)?
14:29:30
makomo
but then again this is also confusing because of that "expanded" thing at the bottom :^(
14:31:47
makomo
so in the case of ``(...), that would be equal to `<form> where <form> is the result of processing `(...)?
14:34:53
Xach
I share this not to mock, but because it is to me a novel (if novice) use of some functions I rarely use
14:36:48
Shinmera
I'm confused as to when you'd even have a list of characters spelling out undefined.
14:40:05
phoe
https://github.com/ZykeDev/CLispJSONParser/blob/master/json-parsing.lisp#L326 - looks like CL:BUTLAST
14:45:45
Xach
I think it's a pretty good example of "I have a set of tools and I'm going to use them to get what I want no matter what". The kind of determination that will improve with access to more tools and tricks.
14:46:38
phoe
So they likely don't know CL in-depth, but they nonetheless used enough of it to implement something that works.
14:49:06
Xach
on the other hand, it can really help to have at the back of your mind that curiosity of "is there a better way?" but sometimes constraints prevent listening too much to that.
14:53:00
Xach
https://github.com/borodust/claw had a nice description ("Autowrapping FFI") but the readme says "don't use"
14:53:13
|3b|
ACTION doesn't know prolog, does the prolog version just give up halfway through parsing undefined?
14:53:46
Xach
i was also bummed that https://github.com/mak08/cl-map is "just" ffi. i have part of a lisp shapefile parser in progress.
14:56:38
dmiles
|3b| well the good part of that file is it is prolgo for very simplistic prolog impls
14:57:24
dmiles
(that is it doe4st use DCGs) nornmally to parse json you'd use about code 1/2 that size
14:57:36
Xach
schweers: I know it isn't practical all the time, but I do really like a "pure" lisp solution because it is likely to be easier to set up that managing foreign libraries (and foreign memory, code, etc)
14:58:06
flip214
makomo: don't despair, I've had a major leap in backquote understanding a few months ago (after several years of using Lisp), but I'm still not sure about all the implications
14:59:24
Xach
Sometimes it is too much work to make it fast enough for the task at hand. Or it's too much work to recreate some very useful library.
14:59:35
makomo
flip214: i have this "intuitive" and "experimental" knowledge of backquote, but find that i can't read out some of the things i know about backquote from that formal definition because it's too vague about the nested syntax
14:59:58
Shinmera
On that note, I'd love it if someone translated stb_truetype to Lisp and added SDF
14:59:59
mfiano
As do I. The only place I use cffi is only indirectly, and pretty much required: Interfacing with GPU drivers (OpenGL) and creating a window/context (sdl).
15:01:18
Shinmera
Signed Distance Fields. A technique to get much sharper characters at differing resolutions to the natively rendered atlas.
15:01:20
makomo
flip214: i know what the thing in ONCE-ONLY will produce (just produce though, i'm not claiming to completely understand ONCE-ONLY yet :-)), but i don't see how i would apply the formal definition from the spec to get to the same thing
15:01:25
mfiano
Better yet would be a Lisp implementation of MSDF or PSDF, as SDF is pretty horrible with certain input.
15:02:35
Shinmera
Rendering each character from font descriptions is too expensive, so you cache the characters you need in an atlas that is tightly packed.
15:04:31
Shinmera
Could use that to render the atlas, I suppose, but that still leaves implementing the packing algorithm and SDF.
15:12:50
schweers
Xach: sorry, was afk for a moment. I understand where you’re coming from. I was just trying to say that I never found another FFI which was as pleasant as CFFI (and I guess other FFIs for lisp are similarly pleasant).
15:13:05
shka
Shinmera: do you perhaps have any idea, why my pages won't load if I load file with pages, but it works if i compile individual pages definitions?
15:13:40
schweers
so using an FFI for lisp seems to me to be much less of a hassle than using an FFI for lesser languages.
15:14:54
Shinmera
shka: Beyond what's written down here I don't know. https://github.com/Shirakumo/radiance-tutorial/blob/master/Part%208.md#my-page-is-not-being-called-when-i-open-it-in-the-browser-what-is-going-on
15:15:17
Shinmera
shka: I run Radiance in production, so it'd be odd if I had to manually C-c all the pages :)
15:16:06
shka
Shinmera: it may be the case that I am doing things in peculiar way, I will let you know once i figure this out
15:16:34
Xach
schweers: I have perhaps an irrational fear of foreign code and memory crashing my session entirely.
15:18:17
borodust
mfiano: well, to be fair, that's a fork of my fork ;p since yesterday i can actually remove bodge-autowrap (and would do exactly that today) because i moved all of bodge projects onto :claw
15:19:06
borodust
Xach: while we are at it, what are the policies for accepting wrappers with compiled libraries into quicklisp?
15:20:01
Xach
borodust: no special policy. it should work on multiple lisps and must absolutely work on linux/sbcl
15:20:20
borodust
Shinmera Xach: with qt, i know, but are there any specific requirements, like it should load somewhere on some specific implementations and whatnot
15:22:01
borodust
i'm planning to request adding claw and bodge-chipmunk, bodge-nuklear, bodge-nanovg and other complete wrappers into quicklisp
15:22:32
borodust
but like Shinmera's libraries, some of those are using customized c wrappers (autogenerated) to prevent any struct-by-value issues
15:23:29
borodust
like this: https://github.com/borodust/bodge-chipmunk/blob/master/lib/main.c which is autogenerated by claw tool
15:29:13
borodust
and here is the only required library descriptor to generate lisp interface and aforementioned c wrapper: https://github.com/borodust/bodge-chipmunk/blob/master/claw.lisp
15:36:20
attila_lendvai
there's also cffi/c2ffi for autogenerated FFI's. here's a simple example using it: https://github.com/attila-lendvai/hu.dwim.bluez
15:36:51
Shinmera
shka: This is so that Radiance can know what to change when you make a redefintion.
15:38:56
samla
Fucking he'll, why didn't I bring with me my copy of coders at work for him to sign. I'm a failure
15:41:52
makomo
Shinmera: i have to say, i'm always surprised by the amount of stuff you have produced :-)
15:42:25
makomo
for example, seeing some of your projects and then a line like "it uses X, Y and Z under the hood". following the links you discover that all of X, Y and Z are also made by you :-)
15:43:43
makomo
i would like to ask, is there a general description of the problems web frameworks in general are supposed to solve
15:43:43
shka
Shinmera: i wonder how i should handle redirecting from account creation to my main page
15:44:02
makomo
or rather, the individual components of web frameworks maybe. for example, "routing"
15:44:29
makomo
i have a vague understanding of what routing is supposed to do/does, but is there an actual book/article explaining in detail the abstract notion of such stuff
15:44:34
Shinmera
makomo: People have different ideas about what a framework is or should be, so, not really.
15:46:32
Shinmera
I don't think there's currently a way for registration. There is one for logging in, at least.
15:46:52
makomo
Shinmera: nice work though! i like when the documentation is prose, rather than just a huge reference. imo, the first thing in the documentation should always be the definition of the problem the library is trying to solve, or a concept/motivation of some sort
15:47:07
Shinmera
Which is to simply put the URL to redirect to as a get/post parameter called "landing-page"
15:51:16
Xach
borodust, Shinmera - you are two folks who provide custom dists. Are you up for starting to sign your dists with opengpgpgpg?
15:51:55
Xach
There is no procedure yet, but I am wondering: do you have a key, are you willing to use it, etc.
16:01:09
borodust
Xach: yes, if that would be fairly easy to do (sign a dist) i'm certainly up to it
16:02:04
sjl
Xach: is there any way library authors can subscribe to QL's build/test process so we get notified when our projects break?
16:02:20
sjl
right now my strategy is basically "happen to see the quicklisp account post something on twitter"
16:02:57
sjl
Shinmera: that's a start... per-project feeds would be great, because I really only care about a few particular ones (mainly my own)
16:09:53
Xach
They are always all posted to http://report.quicklisp.org/ also, but that's a view that maximizes my convenience, not anyone else's
16:12:03
Xach
sjl: I've sometimes thought about auto-posting github issues, but I can think of so many failure modes that I hesitate.
16:12:31
Shinmera
There is that thing with github where you can be an "application" like travis that shows build success on commits and PRs
16:12:56
Shinmera
It won't notify you about it, but when you look at a commit it'll show you whether it passed a check or not.
16:34:18
malice
Hi! Is there a Common Lisp standard available on ANSI page? I tried looking for it but I couldn't find it. I want to reference it, I don't want to buy it and I'm aware of its low quality.
16:35:15
beach
malice: ANSI is a for-profit company, so they would not give their standard for free.
16:35:23
Xach
malice: https://webstore.ansi.org/RecordDetail.aspx?sku=INCITS+226-1994%5BS2008%5D perhaps
16:36:17
malice
Xach: I'm writing my Bachelor thesis and wanted to provide a reference to Ansi standard when I'm mentioning that CL has one
16:37:00
shka
https://stackoverflow.com/questions/44389464/align-the-form-to-the-center-in-bootstrap-4
16:37:52
sjl
malice: there's a bibtex hunk for it at http://ftp.math.utah.edu/pub/tex/bib/ansistd.html
16:38:46
shka
Xach: because I am at the point that I want to pull the middle finger, and quit this farse
16:38:52
sjl
Assuming you just want to reference the standard as a whole and not some particular page/section.
16:40:29
shka
Xach: that to, but this thing I can do calmly, believe it or not I am trying to get my bachelor degree as well
16:41:03
Xach
shka: I don't really care what you personally use but please don't recommend it as a primary reference to someone who might not know better.
16:41:09
beach
malice: Did you get what you needed. Otherwise, look in SICL/Papers/Type-inference/type-inference.bib
16:43:12
shka
Xach: but why? cltl2 is a good book IMHO. It's only drawback is that it was written before standard was finalized.
16:44:11
Xach
shka: it has good prose, and is good to supplement or augment the reference material, but there are areas where it describes non-standard behavior as standard. It should not be encouraged as someone's first primary reference.
16:44:43
Xach
I really liked reading it cover to cover. It has some warmth and humor and fills in some historical details with sloppy but enjoyable writing.
16:45:30
Xach
And I mean "sloppy" in the sense of being a little convoluted and human, rather than the dry and precise stuff in the final spec.
16:45:36
jackdaniel
last time I've checked CSS doesn't look like sexprs, so if LASS is still CSS – it doesn't neither ;)
16:46:04
Shinmera
jackdaniel: What makes CSS painful is all the options and values and how they model the UI. That does not change with LASS.
16:46:08
loke
ACTION agress with Xach. I don't think I would have appreciated CL as much if it wasn't for the fact that my boos gave me a copy of the book back in... hmm... late 90's?
17:33:23
shka
Shinmera: so i was wondering, how I should handle submit if i don't want to use templates?
17:39:04
Shinmera
Typically form submission should happen to API endpoints so that they can be used programmatically as well
17:42:05
Shinmera
The page will output whatever you return from it, or whatever you explicitly store in the response object's data
17:55:29
shka
Shinmera: anyway, whole gist of define-api is that code is launched on :submit, is that correct?
17:56:52
Shinmera
When you have a form and the user clicks submit, the browser opens another page with the form data as parameters.
17:57:29
Shinmera
API endpoints are pages that do argument parsing for you to some extent and have a stricter scheme about how they can be reached.
18:22:36
Shinmera
(define-api foo ()) will be reachable at /api/foo, (define-api foo/bar/baz ()) will be reachable at /api/foo/bar/baz
18:30:58
shka
Shinmera: well, that would be it for today, I must say that you were of great assistance to me today, thank you
18:32:24
osune
while we are talking webframeworks on CL: Currently I run my Telegram Bot in long poll mode, but I can use a single webhok too. Assuming I'm a embedded C programmer (no significant server side expirience) , should I even look at radiance or is something barebones like lack a better start for me to provide a single uri which gets POST requests with json data ?
18:34:41
Shinmera
One of the core points of Radiance is to allow you to run multiple web applications in a shared environment. So if what you're developing is a component that could be reused by other people, then Radiance is a good fit.
18:37:34
osune
So if I would want create a full blown REST api Radiance would be a good fit? I assume I need to know how the server under the framework works to use/understand any framework?
18:38:06
Shinmera
Well if you create an API or web thingy that might be useful to other people then sure.
18:40:50
Shinmera
osune: The server is basically just responsible for listening on a port and translating the HTTP structure to some internal format. Typically an object.
18:42:08
Shinmera
So all you need to understand is on which URL your functionality will be reachable, how to access request data, and how to return response data.
18:43:46
osune
For the telegram bot I need to provide a customized URL ( https://www.example.com/<bot-token> ). So far I understand that the server does no routing and I would need a Framework which can dispatch on a URL. Did I got this right?
18:44:15
Shinmera
Well you can do the routing yourself. Which is trivial especially if you only have one thing to reach :)
18:45:13
Shinmera
Routing in Radiance is a bit more complicated, but in most frameworks all it is is a list of "pages" and some regex that the current request is compared against.
18:47:14
Shinmera
Anyway, just have a look at Hunchentoot's documentation. It's good and shows a simple example that should get you started in no time.
18:50:00
osune
If I would using python , probably would take flask ( I dabbled a bit with cherry-py a few years ago ) for this task. So I wondered where to start with CL. Thanks for the starters
18:54:22
osune
jackdaniel: I took a look at the ecl cffi backend. They use quite excessive the uffi compatible interface, which is somewhat marked as "depricated". I feel conflicted if I should use it or not (the uffi interface would staisfy my needs). Can you give me absolution?
19:00:09
osune
I must have over estimized the meaning of "New code shouldn’t use this interface preferring CFFI." , because the SFFI interface is said "to be only used if ECL is your deployment platform". I understood it as you should use CFFI if possible , and SFFI as fallback.
19:00:47
jackdaniel
UFFI is ECL's exported interface for FFI (which is interface-compatible with original UFFI)
19:01:05
jackdaniel
CFFI is portability layer between implementations which makes a portable interface for FFI
19:01:46
jackdaniel
in case of ECL, it uses UFFI-compatible interface, because that's what ECL provides. In case of SBCL it will use sb-alien package interfaces etc. If you use sb-alien package, you can't expect it will work on other lisps
19:01:53
osune
but one can use UFFI in a static context too, at least that is what I got out of the ecl backend in cffi?
19:03:45
jackdaniel
CFFI can use static ffi of ECL as well, that's just the way how calls are compiled
19:06:23
osune
ok so all this is a understanding on my side regarding the manual which I had prior to taking a look at the ecl backend in cffi as you suggested. Thanks for the confirmation :)
19:24:04
osune
jackdaniel: another question still bugs me since yesterday: where is cl_load defined? in c/load.d is LOAD defined and it uses cl_load, so it is already in available in ecl_min. When searching for cl_load (https://gitlab.com/search?utf8=%E2%9C%93&search=cl_load&group_id=&project_id=178692&search_code=true&repository_ref=develop) I can see the mapping of LOAD and cl_load and the external declaration. But if LOAD uses cl_load, how or where
19:26:29
Devon
Any package out there to write files with Emacs-style safety, e.g., to update foo write to #foo# then rename #foo# to foo while holding a lock as a symlink .#foo -> HOST.PID
19:27:00
Xach
Devon: I haven't heard of such a thing. I do that manually when I care (but without the locking part)
19:28:35
Xach
I would be interesting in seeing just what each implementation actually does for each of those open options.
19:28:42
Shinmera
The :rename-and-delete option is pretty weird: "The existing file is renamed to some other name, then it is deleted but not expunged, and then a new file is created."
19:29:10
Devon
open [Function] ... :supersede ... If possible, the implementation should not destroy the old file until the new stream is closed.
19:36:34
pjb
eg. emacs renames the current file foo as foo.~1~ and then deletes (at a later time) the older backup files.
19:38:29
Devon
Emacs first checks for */.bzr/checkout/format, */.git, */.hg, */_MTN/format\0, .src/*, .src/*,v, RCS/*, RCS/*,v, s.*, SCCS/s.* and who knows what else, before saving *.~1~
19:39:27
pjb
Devon: of course, and it doesn't even save it necessarily in the same directory or file system.
20:00:01
fe[nl]ix
Devon: one recent Linux kernels it is possible to supersede atomically, but I know of no language library that exposes it
20:01:46
fe[nl]ix
there's a syscall for creating an unreferenced inode (temporary file), and a new way to atomically replace the inode pointed by a path
21:34:19
rpg
oh, dear. I *really* don't want to try to figure out darcs. It could be arbitrarily better than git without being worth my learning it.
21:50:59
rpg
jasom: The problem with that is that the remote, authoritative repo will still be darcs when I have my git repo! :-/
21:53:09
rpg
jasom: I'm sorry -- you are right. When I first skimmed this page I got stuck at "migrating ... from darcs to git..." and missed the "can be used to create git mirrors of active darcs repositories."
21:54:56
Shinmera
Could also try to convince Xach that your git repo will be the new authoritative source
21:55:28
rpg
Shinmera: The last thing either the CL community or I need is for me to own another authoritative repo!
21:58:15
Shinmera
You could also try to convince Xach to move it to sharplispers to make it more accessible to contributions.
22:01:19
rpg
That would really be up to Attila. If he prefers to keep it in darcs, I will not (or at least try not to) complain.
22:38:39
pjb
rpg: indeed, darcs is better than git, but when git appeared, it was suffering from a few bugs, which let git take over. Now it's essentially finished.