freenode/#lisp - IRC Chatlog
Search
21:38:29
aeth
verisimilitude: I also dislike usocket. It's unfortunate that we're going to have two parallel efforts here, although even without licensing issues we probably would have two parallel efforts anyway because of my very different requirements.
21:39:16
jmercouris
here is the "mess" jgkamat is referring to: https://github.com/atlas-engineer/next/blob/master/source/remote.lisp
21:39:25
aeth
jmercouris: it absolutely is a mess because you use symbols instead of keywords in LOOP and that is the tabs-vs-spaces holy war in Common Lisp
21:39:55
aeth
jmercouris: It's weird to see you document a function in comments in the docstring position. I think normally they're documented above with ;;; in comments or in docstrings where you currently have your comments
21:40:40
Ukari
is anyone also get a weird indentation like me when using uiop:define-package, https://plaster.tymoon.eu/view/1259?
21:40:43
jmercouris
oh I know, it was at a time where the aesthetics of the docstring de-denting to the 0th column really annoyed me after one line
21:42:01
verisimilitude
It depends on how much work it is; if I'd licensed SHUT-IT-DOWN, which just abstracts over how to exit the implementation, under the AGPLv3, almost no one would use it, since it's so small, but with CC0 no one has a reasonable objection, really.
21:42:02
aeth
Ukari: I also get that weird indentation and have to manually override it. It's especially weird since it's just &rest clauses so I'm not sure why SLIME wants to indent the first element of a &rest
21:42:03
jmercouris
aeth: I've recently tried to make my comments conforming to the "standard" convention
21:43:57
aeth
verisimilitude: The thing is, no one will use your AGPL library even if it is large and non-trivial. I am writing a very large and very non-trivial framework in Common Lisp and if it wasn't MIT licensed then even fewer people would pay attention to it than the few that currently do so.
21:44:54
aeth
verisimilitude: if you don't write for yourself in the world of CL libraries it can be very demoralizing
21:46:19
jmercouris
I will not lie, I am upset by the fact that you picked this particular point as a mess
21:46:28
aeth
jmercouris: if you're *only* writing for yourself, then there's no reason to even release the source, so (A)GPL is fine
21:46:31
jmercouris
because it is something that took almost a year of effort and a lot of deliberation
21:47:01
jgkamat
fwiw, though, I think almost all code is a mess, almost everything out there is pure garbage
21:47:03
jmercouris
and it was based on the reccomendation of a member of this community who I very much respect as one of the best Lisp developers and researchers of our time
21:47:41
jmercouris
basically the XML RPC abstraction is so that a platform port can be independent of the Lisp Core
21:48:07
aeth
jgkamat: Most code just never reaches a level of polish that I would personally call "quality"
21:48:11
jmercouris
a separate program that controls the GUI effectively listens and communciates back and forth between the Lisp core
21:48:17
verisimilitude
I'll let you know when it's finished or at least given an initial release, jgkamat; you refer to CL-GOPHER, right?
21:48:37
aeth
jgkamat: calling most things a "mess" would probably be going too far, though. You should hang out in #clschool if you want to see what complete novice code looks like
21:48:58
jmercouris
jgkamat: here is the very short explanation; https://github.com/atlas-engineer/next/tree/master/ports
21:49:36
aeth
jmercouris: I suspect that most code issues can be addressed in a matter of days/weeks.
21:49:41
jmercouris
it is in *no* way a mess, I know messes of code that I have written in the past, but remote.lisp, and the logic there, is not one of them
21:52:15
aeth
jmercouris: afaik accessors are *both* "higher level" and more efficient, essentially killing any reason to use slots except if the slot doesn't have a writer, which can be worked around by doing something like (... :accessor %foo :reader foo) and not exporting %foo.
21:52:52
jmercouris
I usually use with-slots to avoid having to write (slot object) over and over again
21:53:21
aeth
with-accessors is more verbose because you can't do (foo bar) and have to do ((foo foo) (bar bar)) but I wrote a with-accessors* macro for that. https://gitlab.com/zombie-raptor/zombie-raptor/blob/1eb5040be02827c65246d515e2764a6ea8ba9ad9/util/util.lisp#L408-424
21:54:02
aeth
So I just do (with-accessors* (foo bar (baz quux)) foobar ...) and it gets turned into (with-accessors ((foo foo) (bar bar) (baz quux)) foobar ...)
21:54:38
verisimilitude
Note that CL-GOPHER would be distinct from a client written with it, which I'd pull in ACUTE-TERMINAL-CONTROL for, jgkamat. So, the code that understands Gopher would be distnict from the mass that combines it, an interface, and network code.
21:55:46
aeth
jmercouris: I do need to spin off the general purpose utils from my game engine, though. They're mostly complete, unlike the engine, and they really are general purpose.
21:55:52
jgkamat
jmercouris: https://github.com/atlas-engineer/next/blob/master/source/remote.lisp#L43 is this binding to 0.0.0.0 ?
21:56:59
verisimilitude
Also, here's something amusing: It was easier in my light testing to use SB-EXT:RUN-PROGRAM to call netcat than it was to use SB-BSD-SOCKETS or USOCKET, which I find pitiful.
21:57:14
aeth
verisimilitude: It's actually an issue. There are absolutely users who cannot use my MIT-licensed code because it is not public domain, such as the SBCL team if they wanted to use one of my utility macros internally to the implementation.
21:57:52
jmercouris
but if it were public domain, someone could modify it, put a lot of work into it and even make a profitable lisp business!
21:58:08
verisimilitude
Well, I agree that BSD or MIT is too restrictive for my tastes as well, but I wasn't aware you were serious.
21:58:09
aeth
verisimilitude: So I wasn't mocking you, I was just correcting jmercouris, who might have been.
21:58:14
jmercouris
I'm sorry that was a bit uncalled for, this is a political topic, and we know how it goes...
21:59:42
jmercouris
It was however not meant to be an attack against you, but rather the GPL, which I have grown so strongly to distate, I will not talk anymore about this though as it is both off-topic, and a conversation without resolution
21:59:56
jgkamat
jmercouris: have you seen http://web.archive.org/web/20181130174629/https://bouk.co/blog/hacking-developers/
22:00:22
jmercouris
jgkamat: I am already aware yes, hence the desire to move to unix domain sockets
22:00:59
jmercouris
jgkamat: it is something wasamasa pointed out months ago as a potential vector, and since he made a very good case, I took him quite seriously
22:01:29
jgkamat
I think you could migitate it by just specifying localhost instead of binding to 0.0.0.0
22:01:36
aeth
Anyway, as far as I'm concerned, with-accessors* itself is too trivial to be copyrighted. The only non-trivial thing it does is check the types if it's a bindings list instead of a binding symbol, e.g. the (baz quux) in (foo bar (baz quux))
22:03:19
jmercouris
if you think that is enough to solve the issue, test it and submit a PR, they are welcome..
22:04:51
jgkamat
it won't solve the issue, but it will at least make people on your subnet not be able to do RCE on you
22:05:19
jmercouris
then it is pointless, usocket must support unix domain sockets, that is the only fix
22:06:01
jmercouris
I also refuse to use SBCL specific unix domain sockets, I want cross implementation compatibility
22:08:42
jmercouris
yes, but please, rephrain from calling it a mess, it isn't a very nice thing to say
22:46:17
jackdaniel
each time I think about projects I work on I see an endless ocean of mess. I think it is something inherent to lisp.
22:48:07
jackdaniel
otoh usually it is a constructive mess (i.e when I spend a reasonable amount of time to grok things I see that doing it this paticular way makes a lot of sense), so the perceived mess-ness is just ignorance. but sometimes it is just a mess which needs to be fixed.
22:48:55
jmercouris
jackdaniel: since you are here, I can ask you, this McClim TUI that you developed, would you suggest it for usage?
22:49:56
jackdaniel
I've just shown a proof of concept that a reasonable CLIM backend could be written for CLIM
22:50:58
jackdaniel
that said I have a semi-working backend for McCLIM which renders to a console - it is not published nor workable yet though
22:52:51
jmercouris
my memory is usually pretty good, so when you said that you had not worked on a TUI backend for McCLIM I was very confused
22:55:26
jackdaniel
gilberth: I'm really tired right now, but if you don't mind I'll bother you with some ideas in a few days (CLIM related) - is that fine?
23:23:33
gilberth
Perhaps Tipsy_2 was the most offensive person I could find at that time [something like ten years ago] to demonstate incremental redisplay upon?
23:25:13
Xach
gilberth: I don't think so. I think it was a one-time visit to check on and disparage the CL array indexing decision.
23:27:35
gilberth
And then my wife complains all the time about me, that I would remember everything. Seems like Xach is worse. :) But then I am olde.
23:27:38
Xach
gilberth: No, but the nick is not familiar, so if they visited more than once, it did not make much of an impression.
23:29:56
Fare
(my understanding is that CMUCL's CLOS has experienced breakage but nobody's there to fix it anymore)
23:30:34
Fare
but when I code some Lisp, these days it's Gerbil for new code, or Common Lisp for my legacy code.
23:31:32
Xach
"A Lisper has gone / Uninterned from this mortal package / Yet not GC'd / While we retain pointers to his memory"
23:33:21
Fare
At least nikodemus, stassats and Xach are pissed at me. At least Xach for good reasons.
23:33:50
Fare
(Not sure about Nikodemus, I discovered only 10 years later that he was pissed at me, he never told me why exactly.)
23:34:47
Fare
The biggest item that would justify a modicum of backward-incompatibility would be cross compilation.
23:35:26
Fare
Totally non-deterministic: everything is done via side-effects to the current image state.
23:36:00
Fare
more as a necessary consequence of the architecture: you can never protect against someone or something side-effecting the environment.
23:36:32
Fare
if anyone dynamically calls ASDF while some of the reader variables are bound to non-standard values, the result can be "interesting".
23:38:02
jmercouris
and for all of those that have complaints, valid they may be, but it is easily top 3 most meaningful contributions to the Lisp Ecosystem, so thank you for that
23:38:04
Fare
well, most people most of the time have the discipline and decency not to do anything too bad with the lisp image while they build. But that's not a guarantee.
23:38:43
jmercouris
whatever, you are frequently credited with UIOP/ASDF, and I think those are of great value, so thank you
23:38:55
aeth
as far as being indexed at 0 instead of 1... that is the worst reason to not use CL... just write a macro or inline function to do the (1- index) translation if it's too hard to translate the elaborate 1-based algorithm (e.g. a matrix one).
23:41:00
aeth
Yes. I actually use a matref macro (has to be a macro because of the inline expansion limit) for matrix code because all of that (well, the raw math and algorithms as opposed to concrete implementations) is 1-based and I don't want to make a logic error translating it.
23:41:38
jmercouris
(defun cool-aref (array &rest subscripts) (aref array (mapcar (lambda (i) (+ i 1)) subscripts))) :D
23:42:35
aeth
As far as problems with ASDF, the (nitpick) problem I have with it is that it's not at all easy to add support for other languages, even though it seems to be theoretically possible.
23:49:01
Fare
though if I were still maintainer, I'd consider moving this support from a cffi gadget to asdf itself. Maybe. Or then again maybe not.
23:50:03
aeth
Well, my main complaint is that it seems to require adding a lot of different things in many different places, which requires a decent understanding of ASDF internals, at least when I was looking into it. There isn't just one or two places to add methods.
23:51:18
Fare
the ASDF internals are still underdocumented. But at least there are documents that explain them nowadays. That used not to be the case.
23:52:57
Fare
I would recommend my 25-page ASDF 3 essay if you want to grok ASDF internals. At least the parts that discuss the object model.
23:53:44
Fare
it's weird, but it was a very interesting invention by danb (as inspired by Kent Pitman).
23:57:46
jasom
aeth: I've settled for just adding a dummy lisp file that invokes a native build system (such as make) when loaded.
23:58:45
Fare
Retrospectively, one thing that surprised me most was that in the old MIT Lisper vs Unix hacker debate, the Lisper claimed to be seeking the "Right Thing" when the hacker was looking for "good enough", but ASDF 1 and most Lisp libraries I've seen were much more "good enough" than "the Right Thing". Maybe it's a generational thing, too. I became a Lisper in the 2000s, when that debate was from the 1980s.
23:59:39
jasom
Fare: though it should be said that nearly all build systems are more "good enough" than the "Right Thing"
0:00:03
jasom
at least partly because it's very hard to be both very general while still doing the "Right Thing"
0:01:11
Fare
and as far as ASDF goes, there was a clear mission creep as to what makes it "good enough" from danb's ASDF 1.85 to Gary King's 1.369 to my 2.000 to my 2.26 to my 3.0.1 to my 3.1.2 to my 3.2.0 to my 3.3.0.
0:03:18
aeth
jasom: adding a dummy lisp file doesn't work for my purposes because this is a language that's compiled to CL so there is a two step foo.bar -> foo.lisp -> foo.fasl process.
0:04:18
jasom
aeth: that should still work just fine, as dependencies are loaded before a given file is compiled, right?
0:05:54
Fare
I remember doing that. Maybe it was for the Python to CL implementation, maybe for the FORTRAN to CL compiler. Or maybe some FFI that compiled to C.
0:09:38
Fare
aeth, if generated, the foo.lisp will typically be redirected by the OUTPUT-TRANSLATIONS.
0:27:40
aeth
jasom: The problem is that to transparently use ASDF to have foreign-to-CL dependencies you need to be able to have a simple foo.bar -> foo.lisp -> foo.fasl and have ASDF treat those FASLs as if they were CL
0:29:21
aeth
Fare: output-translations doesn't sound familiar so I think I might have been missing that.
0:30:42
aeth
Fare: Another problem I was getting a lot iirc is that I couldn't modify ASDF and use those modifications in the same place iirc. The issue was adding support for .scm files in general in cl-scheme while also having some of the implementation of cl-scheme be in .scm files
0:31:28
aeth
(cl-scheme is not my intended final name but if I say the intended final name that I have in mind, the likelihood of the domain names being grabbed greatly increases)
0:32:01
aeth
(I say intended because I can't even search for the domain name without increasing the chance of it being camped by expressing interest in the domain name so it could already be taken...)
1:10:36
verisimilitude
You haven't matured much from what I see, Xach, with my experiences with you.
1:15:25
no-defun-allowed
Immaturity isn't a problem, but to not seem unfriendly you have to hide it behind a lot of wit at least.
1:41:41
Fare
aeth, I sorry was not on IRC. I don't know what you're trying to do, but whatever it is, I will gladly help with telling you what to do and not to do with ASDF.
1:42:39
Fare
I also have suggestions of names for a Scheme implementation. Such as "Agley" (because "The best laid schemes o' mice an' men / Gang aft a-gley.").
2:00:35
aeth
Fare: One reason why I want to do proper ASDF integration is that then you could run any library in Quicklisp that doesn't use elaborate (especially tree-walking) macros with a few wrapper files that could probably even be semi-automated.
2:03:49
aeth
One of the reasons it's incomplete is because I need to solve the integration and performance issues before finishing it.
2:05:58
aeth
Fare: it looks like what I was trying to do last time I attempted anything was a perform compile-op and perform load-op for a new scheme-source-file class. I was also looking into output-files. I wasn't aware of output-translations.
2:07:10
aeth
Iirc, what made me stop experimenting is that I didn't know where to put the method definitions. These have to somehow run *before* the defsystem afaik, but I can't just put them above the defsystem in the .asd file.
2:08:40
aeth
The real challenge is that probably half of the code implementing the Scheme will eventually be in Scheme .scm files, but the scm-to-lisp compilation function will be done in a .lisp file as part of the implementation details.
2:08:54
aeth
I guess I'll have to break it into at least two systems, possibly with two separate .asd files.
2:20:45
Fare
aeth, do you want to discuss it on a video call? It might be faster to get information through.
2:22:26
Fare
And yes, often separating your code in multiple .asd files can help, especially if you need to use defsystem-depends-on.
2:26:04
aeth
hmm... I don't think I have a functional web cam on my desktop. I purchased a microphone for gaming, but not a camera. Years ago, I plugged in a bunch of old webcams from probably pre-2005 and none of them had functional Linux drivers.
5:50:39
beach
Hey gilberth. I am preparing my ELS talks, so I spend more time in #sicl than here in #lisp.
6:51:44
dtw
There are several command-line parser packages in Quicklisp distribution but I have been unhappy with all of them: too fancy object system which I don't want to use, too much automatic messages or return value is unnecessarily complicated to parse. So I have used my own parsers which I have now generalized and published as a package: https://github.com/tlikonen/cl-just-getopt-parser Maybe someone wil find that useful.
7:08:28
verisimilitude
This only affects those who live in countries that don't recognize public domain.
7:21:52
flip214
Is there a YAML parser that records line numbers on the input, so that meaningful error messages on _semantically_ invalid data can be thrown?