freenode/#lisp - IRC Chatlog
Search
10:04:16
White_Flame
aeth: needing human involvement in a communications crossbar doesn't seem like the greatest idea...
10:04:54
White_Flame
"oh, I need to wait for the admin to notice the server's sldb window before my response gets returned"
10:07:25
lthms
i was wondering, has anyone here tried to write some async database code in common lisp? do you have anything to advice?
10:07:59
phoe
beach: I'm alive, I just did things that I didn't really enjoy doing. The stuff that's required to function and such, but nothing really enjoyable.
10:08:37
phoe
lthms: that's a pretty big question when it comes to choosing databases though; what are your needs? what kind of data will you store? what functionality for modifying and retrieving it will you need? how is your data modeled and structured?
10:08:51
White_Flame
lthms: threads, messages, just the same as any other language. Just make sure your DB connector library is threadsafe
10:09:16
phoe
because there are object stores in pure Lisp, there are bindings to various SQL and NoSQL databases out there.
10:09:47
White_Flame
lthms: depending on your workload, maybe put your requests into a job queue and have some fixed number of DB connections pulling from it
10:10:45
phoe
well, yeah, I've been using postgres recently and it's just a matter of making ten connections to the database, and suddenly you can have ten DB queries running at once.
11:20:34
ebrasca
#<SB-SYS:FD-STREAM for "file /dev/sdc1" {10052C9813}> is not a binary input stream.
12:12:18
jmercouris
I'm trying to take a long string, and split it into stringths of a max length, but only at word boundaries
12:17:32
jmercouris
Interestingly enough, I am asking because I want to make "pargraphs" of text in Vecto
12:18:18
Xach
The general strategy I use is to categorize characters as breakable, then add words, and when a threshold is reached, go back to the last breakable character.
12:18:19
TMA
jmercouris: if it is meant for human consumption, I recomend you to look up the algorithm used in TeX.
12:18:56
jmercouris
TMA: it is meant for humans, but not really, it is just a legal requirement, nobody reads it
12:23:55
jmercouris
because I see these defgenerics, and I assume I have to implement methods for them
12:24:20
Xach
jmercouris: You could specialize them on characters, and use other context to give meaning to "width".
12:24:55
Xach
jmercouris: https://www.xach.com/tmp/glyphlayout.lisp shows how i used it for http://wigflip.com/minifesto/
13:07:45
dlowe
I managed to work that out for a tiny irc client I wrote. I needed something to break long titles in a tooltip
13:11:19
dlowe
The main work is done by .{0,79}(?=\s+|$) which says, basically, any number of characters up to 79 which is followed by a space or end of line.
13:29:49
dlowe
\S{0,79} captures the case where there wasn't any space, so it just breaks it at the boundary
14:36:52
jmercouris
how can I do (loop for item in list do ...) and also have an index? e.g. a count of how many elements I've iterated?
14:40:47
TMA
jmercouris: add another for clause: (loop for i in '(a b c) for j from 1 collect (cons i j))
14:44:06
jmercouris
that's from this line: variable-clause::= with-clause | initial-final | for-as-clause
14:46:45
jmercouris
and you know this because of this line: [name-clause] {variable-clause}* {main-clause}*?
14:47:53
jmercouris
and then a main clause can be composed of: main-clause::= unconditional | accumulation | conditional | termination-test | initial-final ?
14:52:52
jmercouris
gotcha, it is good at least that there is a chat log to persist some domain knowledge
14:54:13
beach
I guess so. In this case, though, there is no additional information compared to the Common Lisp HyperSpec.
15:05:31
beach
YAY! My Common Lisp implementation of Doug Lea's allocator algorithm just passed the test consisting of 10 million randomly generated ALLOCATE and FREE operations.
15:06:37
beach
I use two basic operations, one for reading a memory location and one for writing a memory location. In the test, I am simulating those operations by reading and writing to a Common Lisp vector.
15:07:32
beach
In a real system, those would be replaced by special operators that actually read and write memory.
15:09:17
beach
So much for the idea that it is impossible to write memory allocators, garbage collectors, etc., in Common Lisp.
15:12:35
beach
I am guessing in a similar way. They must have had Lisp function able to access raw memory.
15:14:33
beach
There has been considerable progress in garbage collection since, mainly thanks to Java.
17:52:45
PJ_
I am considering learning common lisp, as I really like the lisp paradigm. However, I am starting to do a lot more high-level GPU work, what are the recommended GPU options for common lisp that are readily maintained? Also is openacc a possibility?
17:57:26
PJ_
not really rendering, ie not gaming/images etc. More compute on the GPU, linear algebra and other big compute
17:59:26
TMA
PJ_: you need to use GPU driver libraries that have C (or C++) in mind. anything else is an uphill battle -- and that includes the popular python bindings for the machine learning on GPU
18:02:07
PJ_
@TMA thanks, that seems to be my main barrier to entry. Currently doing a lot of deeplearning, machine learning and general data analysis in python. This is great, but I would like to
18:02:53
TMA
PJ_: it can be done in common lisp, the interactive development is certainly great, but it has its cost too
18:03:36
PJ_
use the expressiveness of lisp in some cases. Dabbled in clojure and I liked the lisp way :), but GPUs are becoming more and more prevalent.
18:08:37
TMA
PJ_: nowadays it is similar to the driver support early this century: if you wanted to use the hardware, you had to use microsoft windows or write your own. today the gpu support for non-c/c++ languages is the same: write your own;; it has been done already, but do not expect mainstream-level support available
18:30:18
pjb
(logior #b0111 #b1110) #| --> 15 |# and (bit-ior #*0111 #*1110) #| --> #*1111 |# are basically O(1).
18:31:22
PJ_
@pjb cl-cuda looks great, it does seem more lower level though, if there isn't a higher level alternative, then it seems that may be the way to go. Just more stuff to learn :)
18:42:06
phoe
I have a graph described by a list of edges. Which library-and-function should I use to check if the graph contains cycles?
18:47:36
jasom
PJ_: you may also consider looking at clasp, which was specifically designed for allowing lisp to drive C++ libraries (I've not used it myself though)
18:51:20
kaun
Yeah, is there a CL function to detect the presence of a cycle? Maybe whatever *print-circle* nil would use?
18:58:50
pjb
(cl:list-length '(a b . #1=(c d e))) #| --> 5 |# (com.informatimago.common-lisp.cesarum.list:list-lengths '(a b . #1=(c d e))) #| --> 5 ; 0 |#
18:59:33
pjb
(cl:list-length '(a b . #1=(c d e . #1#))) #| --> nil |# (com.informatimago.common-lisp.cesarum.list:list-lengths '(a b . #1=(c d e . #1#))) #| --> 2 ; 3 |#
18:59:54
pjb
so you may prefer list-lengths, if you need to know where the cycle begins, and how long it is.
19:00:50
pjb
phoe: it will depend on whether you want to find the cycles, or just to know if there are some.
19:04:21
slyrus_
man, reading PEP 572 I'm glad I use a language that doesn't distinguish between expressions and statements.
19:04:58
pjb
(defun has-cycles-p (nodes lessp) (/= (length (topological-sort nodes lessp)) (length nodes)))
19:06:51
pjb
slyrus: keep reading and try: (if (let ((match (match-re …))) (report-match match) (setf match (find-next match)) match) (do-it)) ;-)
19:13:26
jeosol
is anyone here running a cl-web application with multiple users (requiring management of user permissions, control access, etc)? there is a preference for django but I will prefer CL is possible. This is will be production use.
19:35:00
sukaeto
since it's easy to use different backends with clack, it makes development convenient
19:35:24
sukaeto
you can just start a background thread using hunchentoot in your REPL, but set up workers using fcgi in prod
20:19:39
aeth
White_Flame: Not human involvement at runtime, human involvement at programmer time. I meant the user of the library, not the user of the program.