freenode/#lisp - IRC Chatlog
Search
10:41:01
void_pointer
Out of SBCL, CCL, and ECL; which implementation is generally the strictest with requiring code to conform to the ANSI spec?
10:55:56
jackdaniel
I think that both CLISP and SBCL have a "strict ansi mode", but you'd have to verify that
10:56:57
Shinmera
Even if your code conforms to the ANSI spec doesn't mean it'll be portable for instance
10:57:52
Shinmera
Unless you eschew all parts that are defined as implementation dependant (pathnames, etc)
10:59:55
jackdaniel
it is a one tailed test, which may bring to your attention parts of code which could be improved (not always of course)
11:02:09
void_pointer
Well, my code won't be completely portable, but it tells me a bit of where to focus my testing activities since that would be where I would run into more of my ameteurish mistakes in writing valid common lisp code (things like assigning an incorrectly typed value to a slot)
11:04:14
void_pointer
I've caught quite a few mistakes by making (safety 3) in all my code, but I suspect I have a lot more just basic mistakes in writing common lisp, let alone all the bugs from just misuing things, misdone algorithms, and other sorts of bugs that of course would not be caught by such means
11:12:51
void_pointer
jackdaniel: just checked. Clisp does have such mode it looks like. SBCL doesn't appear to in the current version, though
11:13:26
void_pointer
sadly, I can't do testing in clisp due to issue with CFFI (same goes for abcl)
11:13:37
Shinmera
Clisp's mode is not really about checking your code as far as I understand, but rather about the implementation being ANSI compliant rather than doing its own (historical) divergences
11:27:19
void_pointer
I'm still rather new to common lisp. Only been doing it seriously since December or January (the little bit I did back in 2012 or 2013 doesn't really count)
11:29:43
LdBeth
void_pointer: do you intends to use CL on specific problems or as a general programming language?
11:30:53
void_pointer
Currently working on a project in one domain but hope to use CL for more general stuff later. But have ended up having to do more general stuff than originally planned hacking one of my project's dependencies as well as quicklisp itself
11:32:21
void_pointer
I will admit that CL isn't the ideal choice for the domain due to not having the widest range of library choices, but that is something I am OK with (have to spend more time writing various missing pieces or working around a choice that while possibly good isn't quite a perfect fit)
11:35:44
void_pointer
though mostly, my questions so far are not game programming specific for the most part (only had the one question with respect to SDL2 that one time)
11:41:00
LdBeth
how's the computer players' logic usually implemented? My specific interests is on how to make decisions in a typical game like "go fish". No needs to be detailed but plz give a general idea.
11:42:00
void_pointer
yes, though one has to be careful for some games or you can easily make in invincible AI
11:42:26
void_pointer
and for others, one has to think of a reasonable depth and use some heuristics like with chess
11:42:39
no-defun-allowed
If the amount of moves into some amount of time is relatively small (can fit into memory), minimax should work.
11:43:16
void_pointer
and for a weak AI, one can make one that just randomly chooses one of the available moves
11:43:54
jackdaniel
sjl had a very good presentation at ELS about heuristics used in games for AI (it was based on monte carlo I think)
11:43:55
void_pointer
I don't know them. My guess is that they probably reduce the parameter space considerably by primarily focusing only on tiles bordering a piece already
11:45:53
jackdaniel
here is a presentation: https://www.european-lisp-symposium.org/static/2017/losh.pdf
11:45:58
no-defun-allowed
beach: it's 9:45pm and my melatonin pills should be working now. My English gets increasingly horrid as t increases.
12:08:42
void_pointer
Oh, interesting thing that people might be interested in. I modified my version of quicklisp to actually check the md5sums of the package tarballs it downloads and well, if there is anyone between me and the quicklisp server that is diverting tarball requests, they are at least bothering to tamper them in a way that preserves both the filesize and the md5sum despite the latter not being checked yet.
12:12:48
void_pointer
Unfortunately, I realize that my modifications are really ugly and I haven't been able to get a SHA1 check in there yet
12:20:58
void_pointer
I remember hearing about that. Fundamentally for base level, the PGP signing and verification primarily has to be done for the client and dist updates as long as the dists themselves has sufficient hash information to verify the integrity of the downloads
12:21:35
void_pointer
Right now, the dists have file size, md5sum, and sha1 sum of the contents (it isn't the sha1sum of the tgz or the uncompressed tar but something else)
12:22:46
void_pointer
which, if checked, would be safe enough for now. Making a file with a desired sha1sum isn't yet known to be doable, but it isn't that far away. md5sum is trivial. But all three combined is a bit harder than any one of them individually
12:24:14
void_pointer
it is possible to generate two files with the same sha1 when one can modify both files as one sees fit
12:25:27
void_pointer
right now, I just go through quicklisp-projects and find the original source for each package I want and git clone (or download if they use something else) into local-packages
12:28:30
void_pointer
if the dists added sha3 of the tgz file, it would be pretty set (especially since there is some CL sha3 code with few dependencies out there)
12:29:36
Shinmera
cloning into local packages is not a very smart ideas since the projects might depend on specific versions between each other.
12:31:34
void_pointer
haven't run into that too much yet (it will get really ugly as soon as I need something that incidentally needs one xml package)
12:32:12
void_pointer
another alternative is just to just take the http links that quicklisp would download and then use wget or curl to download the https version
12:35:09
void_pointer
other reason I download the source code is to make it easier to tinker and be able to unwind changes if I screw up or submit PRs
13:05:34
Demosthenex
jackdaniel: you see that POC code to make a webserver return one script for a browser, and a malicious one for curl?
13:06:26
Demosthenex
apparently the pipe to bash causes blocking and timing that is readable by the remote
13:07:44
Demosthenex
jackdaniel: https://www.idontplaydarts.com/2016/04/detecting-curl-pipe-bash-server-side/
13:11:56
Demosthenex
oh, you had that cl-charms mcclim writeup. nice! i'm looking forward to your mcclim charms backend ;]
13:17:41
Demosthenex
i've been looking for a TUI library for simple things... i recall using turbovision ages ago and can't seem to find anything like it
13:18:10
Demosthenex
but something you said in that article about "making 1/10th of clim in text" rings true...
13:19:23
jackdaniel
" Any sufficiently complicated C or Fortran program contains an ad-hoc, informally-specified, bug-ridden, slow implementation of half of Common Lisp. "
13:19:46
Demosthenex
that's true, but it also highlights the different between having curses level control (ala charms), vs a real UI library with event loops, widgets, and screen controls.
13:20:51
Demosthenex
i find it uniquely weird that something as simple as an AS/400 style full screen form should have zero open libraries nowadays
13:21:25
jackdaniel
from other fun useless things I want to do is adding libcaca extension to that charming-clim backend
14:09:36
void_pointer
if for no other reason that to implement the second oldest language family in the oldest
14:14:39
void_pointer
Should be fairly easy to implement lisp 1.5 in fortran 95 or newer with no limitations other than available RAM. Fortran 77 would, if completely conformant, have a fixed at compile time limit on the number of conses
14:21:42
beach
void_pointer: Yes, in fact, the first Lisp system I used was an implementation of Interlisp in Fortran.
17:05:13
trocado
hi! i think my quicklisp configuration is broken... anything other than quickloading a specific dist gives an error.
17:05:30
trocado
for example: (ql:update-dist "alexandria") -> There is no applicable method for the generic function
17:14:52
pjb
before, you may collect the list of installed packages, if you want to re-install them.
18:38:21
manumanumanu
Anyone here familiar with the iter macro? I want to get the fibonacci numbers getting it, but all I am getting is powers of two :)
18:39:06
manumanumanu
which is because I don't know how to work around it's let*-style variable bindings
18:41:33
pjb
(loop :repeat 10 for a := 1 :then b :and b := 1 :then (+ a b) :do (prin1 a) (princ " ")) #| 1 1 2 3 5 8 13 21 34 55 --> nil |#
18:41:41
pjb
(loop :repeat 10 for a := 1 :then b :for b := 1 :then (+ a b) :do (prin1 a) (princ " ")) #| 1 1 2 4 8 16 32 64 128 256 --> nil |#
18:42:44
manumanumanu
I am just curious to see how they compare, and I got stuck implementing my first test
18:44:35
manumanumanu
they suggest working around the non-parallel bindings using iter's support for "previous x"
18:45:01
Bike
https://common-lisp.net/project/iterate/doc/Parallel-Binding-and-Stepping.html#Parallel-Binding-and-Stepping is what the manual says.
18:45:31
manumanumanu
(for (repeat 10) (for a previous b initially 0) (for b initially 1 then (+ a b)) (collect b)) still produces 0 1 2 4 8 16 ...
18:49:18
pjb
(iter (repeat 10) (for a previous b initially 0) (for a_-1 previous a) (for b initially 1 then (+ a_-1 b)) (collect b)) #| --> (1 1 2 3 5 8 13 21 34 55) |#
18:53:33
asarch
"Good" in the sense of SQLAlchemy and not just "an ORM" in the sense of SQLObject (both for Python)
18:55:26
manumanumanu
pjb: I am implementing something similar myself, but I'll probably go with something more let and let* styled. Like for and for*
19:06:50
dim
asarch: also Postmodern offers some high-level APIs to talk to PostgreSQL, that might be all you need here really