freenode/#lisp - IRC Chatlog
Search
19:00:25
makomo
beach: found a typo in http://metamodular.com/environments.pdf, "that the extension* incurs"
20:59:10
dxtr
Hmm, when I try to inspect an object in slime with C-c I I get: illegal sharp macro character: #\<
21:00:35
Xach
dxtr: When I want to inspect such an object, I make sure it's the most recent repl result and then inspect "*"
21:01:15
dxtr
I actually had a brain fart because it didn't dawn on me that I'm inserting expressions
21:02:42
Xach
ealfonso: not by itself. you would need something to parallelize it. i like lparallel but raw threads would work too.
21:04:30
dxtr
Xach: Speaking of parallelization; my company (Well.. I. I'm the only one coding lisp here) used your s3 library for quite a while and it was pretty heavily parallelized!
21:05:23
Xach
dxtr: so glad to hear it! i wish i had time to add to it but things have been pretty busy
21:07:59
dxtr
It's quite funny because it was actually intended to be a one-off thing - which is why I made it in lisp in the first place (Because no one else would be able to maintain it otherwise) - but it ended up being run quite heavily and it worked really well
21:09:11
dxtr
It has served its purpose now, though, so we're not using it anymore. It involved synchronizing around 150k images downloaded via HTTP, normalizing file names and stuff and uploading it to our s3 bucket. Saved us quite a bit of labor.
21:18:55
ealfonso
is there something like (nthcdr n ...) that I can combine with loop's "by" without creating a function?
21:20:21
phoe
you could theoretically (alexandria:compose #'cddddr #'cddddr #'cddddr) but that might not be the way
21:36:46
pjb
(loop for start on big-list by (lambda (x) (nthcdr n x)) while start collect (subseq start 0 (min (length start) n)))
21:39:09
pjb
you could add a variable: (loop for l = (length big-list) :then (- l n) for start on big-list by (lambda (x) (nthcdr n x)) while start collect (subseq start 0 (min l n))) ; but it would still read the big-list twice.
21:42:05
pjb
personnally, I just write: (com.informatimago.common-lisp.cesarum.sequence:group-by big-sequence n)
21:43:51
pjb
But if I tell you that you will come again, "and where does group-by come from?" etc…
21:53:05
pjb
dxtr: it uses a global namespace. In the Internet age, were you get systems from anywhere, you can easily have package name collisions.
21:54:05
pjb
Local package name systems have been defined and implemented, but there are variants, and it's not integrated in all implementations yet.
21:54:44
aeth
There are several issues with the package system. (1) No portable local package nicknames and it's very easy for nicknames to conflict. (2) You will wind up with a million exports for any decently sized program, and the verbosity of it seems very unlispy. (3) There's no easy way to check for unused imports or nonexistent exports because of the dynamic nature of it.
21:55:10
aeth
(2b) That verbose million exports thing could easily also apply to imports, which is why most imports are just used with :USE instead of :IMPORT-FROM
21:56:06
aeth
pjb: I do one package per file to keep the exports down and I *still* sometimes wind up with dozens of exports for a moderately sized (400-800ish) file
21:57:05
aeth
https://gitlab.com/zombie-raptor/zombie-raptor/blob/161143c74c456393a28ccb8618d86dd42444eaf7/math/matrix.lisp#L16-61
21:57:44
dxtr
I buy the package nickname/alias argument and the unused checking. The rest is like.. If you need that many imports and exports you need that many imports and exports
21:59:28
aeth
Actually, you don't. Most of the time when you get tons of exports it's because of struct or CLOS object accessors. If you're okay with forcing the user to use with-foo-accessors (a specific version of with-accessors) you can do something like this: https://gitlab.com/zombie-raptor/zombie-raptor/blob/161143c74c456393a28ccb8618d86dd42444eaf7/util/util.lisp#L263-292
22:00:06
aeth
The only imperfection there is that it doesn't check that it's a valid accessor first. I went for simplicity of definition/implementation, at least for now
22:00:41
copec
shka_ I assume you know more than I and I would like to compare/contrast package systems
22:01:13
aeth
(with-foobar-accessors ((foo foo) (bar bar) (baz baz)) foobar ...) ; 1 export instead of 3. adds up if you have tons of structs and CLOS objects all over the place
22:01:36
aeth
Except it's really 2 exports because I also have (with-foobar-accessors* (foo (bar* bar) baz) foobar ...)
22:02:14
shka_
aeth: https://github.com/sirherrbatka/cl-data-structures/blob/e5b8bf35f906790be83b3ca99f3de1a60ce5fa3f/src/utils/macros.lisp#L299
22:02:36
aeth
Oh and my macro system supports prefixes, too. If you want safety, use one prefix for public accessors. The prefix is implicity added.
22:04:02
aeth
In case I was unclear, the accessors could be foobar-foo, foobar-bar, and foobar-baz, and the syntax would be identical in my examples above.
22:04:27
aeth
So it's not just for simpler imports/exports. I also use it internally within the same package to eliminate prefixes.
22:05:07
aeth
So I'm not sure I need to support some kind of safety to prevent people from using accessors they're not supposed to when the prefix system could work perfectly fine for that.
22:18:41
ealfonso
for the chunking issue, I used my own macro, even though sub-chunk elements are reversed https://pastebin.com/gpduRSqD
22:19:35
ealfonso
(loop-do-chunked chunk '(1 2 3 4 5 6 7) 3 (format t "chunk is ~A~%" chunk)) => chunk is (3 2 1) chunk is (6 5 4) chunk is (7)
22:20:43
dxtr
Possibly. I just want to remove a function because I accidentally made it a defun when I wanted it as a defmethod
23:10:35
dxtr
And when I try to prepare a statement it says my table doesn't exist - although I can select from it from the cli
23:26:50
pjb
Notice how you can thus define as many packages as you want, as different interfaces for different clients.
23:49:38
dxtr
Well, what I'm making a sort-of wrapper around some cl-dbi functions and I've defined my execute like (defun execute (conn query &rest parameters)) - but that fails with prepared statements that is supposed to have zero parameters
23:50:26
dxtr
But I can't just do (if parameters (dbi:execute ... parameters) (dbi:execute ...)) because I don't know if parameters actually is nil
3:13:38
ealfonso
I heard that hunchentoot sessions are not really secure... "Hunchentoot makes some reasonable effort to prevent eavesdroppers from hijacking sessions (see below), but this should not be considered really secure. Don't store sensitive data in sessions and rely solely on the session mechanism as a safeguard against malicious users who want to get at this data!" is there an easy way to make them secure?
4:29:54
pillton
Probably not, mainly because communities write language run-times that don't compose.
4:44:12
vtomole
Is there a "duplicatesp" that checks if a list contains duplicates. I only see remove-duplicates and delete-duplicates from clhs so far.
4:47:06
vtomole
Aha! I finally found a procedure that "Makes sense" to be in cl-user but it's not ;)