<Alfr>
aeth, I suspect it's hand rolled, just mentally replace tag pairs by parens and <x /> tags by (), and it looks like well indented lisp code.
<aeth>
The only thing that makes it look not automated is the apparent inconsistency in the indentation, although that might just be because of different rules because there's not much of a sample to go off of.
markong has quit [Ping timeout: 260 seconds]
mindCrime has quit [Excess Flood]
mindCrime has joined #lisp
shifty has quit [Ping timeout: 240 seconds]
holycow has quit [Quit: Lost terminal]
orivej has quit [Ping timeout: 256 seconds]
orivej has joined #lisp
karlosz has joined #lisp
shrysr-test has joined #lisp
shrysr-test has left #lisp [#lisp]
orivej has quit [Ping timeout: 260 seconds]
orivej has joined #lisp
seok has joined #lisp
<seok>
fron On Lisp If you’re writing a CAD program, for example, the best results will sometimes come from writing it in two layers: a language (or if you prefer a more modest term, a toolkit) for CAD programs, and in the layer above, your particular application.
<seok>
Do you sometimes ship a package without (:use #:cl)?
<fwoaroof[m]>
seok: occasionally, although it's rare
<fwoaroof[m]>
One use-case is code machine-generated from a spec, where you don't want to worry about name collisions
<seok>
yeah
<fwoaroof[m]>
Although, to be conforming, you need (defpackage :foo (:use)) not (defpackage :foo)
<seok>
if emacs or autocad was written in CL, the emacs lisp or cadlisp layer won't export :cl eh?
<fwoaroof[m]>
it wouldn't (:use) :cl
<seok>
yeah
<fwoaroof[m]>
Because the :elisp package has different semantics
<fwoaroof[m]>
Although, honestly, if you're implementing emacs in CL, you probably just use common lisp + a package of emacs-specific code for configuration
<seok>
This could be used to implement security features for applications accepting more dynamic user inputs?
<fwoaroof[m]>
Maybe, you have to be careful since READ is able to execute arbitrary code
<seok>
but the final layer won't ship read
<seok>
so it cannot be called
<fwoaroof[m]>
But, if you fix that and force all function calls and variable access to come from one package, you're ok
<fwoaroof[m]>
seok: yeah, but you also can't call READ on untrusted user input
ldb has joined #lisp
<seok>
Is this used this way often? feels like I found a nice hack to worry less about security
<fwoaroof[m]>
No
<Alfr>
fwoaroof[m], why would (defpackage :foo) be non-conforming?
<fwoaroof[m]>
Well, it's non-conforming to expect that that package doesn't :USE any other packages
<fwoaroof[m]>
Without a (:use) clause there, the implementation is free to inject any packages it wants
<fwoaroof[m]>
And, I believe CCL and LispWorks take advantage of this
<fwoaroof[m]>
Yeah, "If :use is not supplied, it defaults to the same implementation-dependent value as the :use argument to make-package"
<fwoaroof[m]>
Which basically means that any DEFUN or DEFPARAMETER potentially overrides something important
ldb has quit [Ping timeout: 260 seconds]
<Alfr>
ccl certainly does, nice thing is that such a package seems to mimic a cl-user on startup.
bilegeek has joined #lisp
<fwoaroof[m]>
This is one reason to test your code on at least two implementations :)
<fwoaroof[m]>
sbcl's compatibility policy is "inwards-compatibility", afaik: they interpret a spec to maximize the likelihood that code that works on other implementations works in sbcl
<fwoaroof[m]>
ccl/LispWorks don't take this approach
karlosz has quit [Quit: karlosz]
ldb has joined #lisp
ldb has quit [Ping timeout: 265 seconds]
bocaneri has quit [Ping timeout: 240 seconds]
<Alfr>
fwoaroof[m], make-package says it's implementation-defined, thus it should be documented, were we to read the docs. :D
XachX has quit [Ping timeout: 240 seconds]
mpontillo has quit [Ping timeout: 240 seconds]
mpontillo has joined #lisp
XachX has joined #lisp
cg505_ has joined #lisp
cg505 has quit [Ping timeout: 240 seconds]
<aeth>
yeah, CCL's interpretation of the spec is to break your code that works everywhere else :-p
<aeth>
definitely test under CCL
<fwoaroof[m]>
I'm happy about that, honestly, it makes it easier for me to use OSS lisp from lispworks :)
<Alfr>
I think that's worth having, if only I use it for testing. But accidentally I already test for sbcl, ccl and when I have noting better to do also for ecl, the last one's rare.
<fwoaroof[m]>
I wish more people tested on abcl
<fwoaroof[m]>
It mostly just works, but when you're in a Java shop, it'd be nice to have some way to write tooling in lisp
<fwoaroof[m]>
* It mostly just works, but when you're in a Java shop, it'd be nice to have some way to write tooling in a real lisp
<fwoaroof[m]>
* It mostly just works, but when you're in a Java shop, it'd be nice to have some way to write tooling in lisp
<fwoaroof[m]>
(sorry about the spam, still getting used to IRC via matrix)
Oladon has joined #lisp
cjb has quit [Ping timeout: 245 seconds]
theseb has quit [Quit: Leaving]
ldb has joined #lisp
orivej has quit [Quit: No Ping reply in 180 seconds.]
<White_Flame>
did you try it? macroexpansion is your friend
<seok>
I like the way macroexpand looks
<seok>
but it still gets error
<seok>
says nil is not a hashtable
<White_Flame>
I don't get an error, and I get a list 0 to 10
karlosz has quit [Quit: karlosz]
refpga has joined #lisp
<White_Flame>
restart your image to clear out any old cruft that might be lurking
<White_Flame>
and maybe convert defvars to defparameters to reinitialize them during development
<seok>
Hm. running it on a new instance works
<seok>
Ahh
<seok>
yes my x was different
<seok>
you are right. sorry
<White_Flame>
restarting is very useful when modifying macros & defvars
<White_Flame>
or renaming things
<seok>
for macros too?
igemnace has joined #lisp
<White_Flame>
sure, any code that was built before was built with an older version of the macro, so you need to force everything to be rebuilt
gioyik has joined #lisp
<seok>
Indeed
<White_Flame>
asdf normally takes care of that for you regarding file write times
<White_Flame>
if your dependencies are correct
<White_Flame>
but still, restarting is good to ensure that what's in your image accurately reflects your source code
vornth has quit [Ping timeout: 256 seconds]
<fwoaroof[m]>
I usually use DELETE-PACKAGE for this
<White_Flame>
for some threshold of change
<fwoaroof[m]>
90% of the time it works really well
<White_Flame>
until you start having multiple packages you're editing across files :)
tanners has quit [Remote host closed the connection]
bocaneri has joined #lisp
<seok>
Ohhhh
CrazyEddy has quit [Ping timeout: 246 seconds]
<seok>
I was getting undefined function error because I didn't export deck
<seok>
-_-
<seok>
really sorry
<seok>
ugh, I can't use macros defined in macrolet in a macro from another package without exporting?
<White_Flame>
yeah, that's why macros often accept a varaible to use, instead of hardcoding their own. For API stuff like that, though, it would be weird
wxie has quit [Ping timeout: 240 seconds]
<White_Flame>
(other:macro .... (other:macro-provided-utility a b c))
<fwoaroof[m]>
White_Flame: yeah, what I really want is some way to diff the list of packages before and after loading a system
<Alfr>
seok, did you unintern the wrong deck symbol?
<White_Flame>
as an example of passing in a variable, some people extend COND to bind a variable to the value of the test
<fwoaroof[m]>
It's trivial to implement, I guess
<White_Flame>
so (cond ((foo) ... here the var IT would be bound to the non-NIL return value of FOO))
<seok>
Alfr, no I defined a macro deck in a macro from another package
<White_Flame>
or cond* etc
<White_Flame>
but that means you need the same variable IT, meaning importing it
<seok>
it turns out when I macro expand it, it expands to pkg:deck
<White_Flame>
if you had (my-cond x ((foo) ....))) and the my-cond bound the var you passed in, then that X will always be in the current package of your source code by default
<fwoaroof[m]>
Another way to handle this is to define your macros as global macros that just throw errors
<fwoaroof[m]>
But, yeah, you have to export the symbol, otherwise the user won't be able to access them
<White_Flame>
yep
<Alfr>
seok, you could export the deck symbol.
<seok>
yeah
<seok>
this kinda breaks my intention of using macrolet tho
<seok>
I didn't want to clog up a symbol
Kaisyu7 has joined #lisp
<fwoaroof[m]>
You can't help that: symbols aren't really strings, they're unique objects that have a name
<fwoaroof[m]>
but, like (= t (not (= '#:a '#:a)))
<fwoaroof[m]>
oops, that's clojure...
<aeth>
eq
<fwoaroof[m]>
(eq t (not (eq '#:a '#:a)))
<aeth>
well, there are two schools of thought, one is always eql as the lowest level equality, the other is that eq is OK for symbols
<seok>
ughh
<fwoaroof[m]>
I'm using eq for object identity aeth
<fwoaroof[m]>
If you can't use the package to lookup the symbol naming a macro, you can't refer to the macro, by design
<seok>
Does reader macro do what I want? I don't want to touch reader macros atm tho
<fwoaroof[m]>
Not really, the only way to do what you want is to generate the symbols dynamically
<fwoaroof[m]>
or to pass them in
<fwoaroof[m]>
dynamic symbol generation is a bit tricky to get right, though
<seok>
I want to (deck y) => (gethash "deck" y) inside the body
<seok>
from another package
<seok>
without exporting deck
<seok>
but its not possible?
EvW1 has quit [Ping timeout: 272 seconds]
ralt has quit [Quit: Connection closed for inactivity]
<Alfr>
whatever you do for this to work, you're shadowing the meaning of (deck foo) in the package using yours.
torbo has quit [Remote host closed the connection]
bsd4me has joined #lisp
aurelius has joined #lisp
asarch has quit [Quit: Leaving]
mindCrime has quit [Ping timeout: 260 seconds]
jgodbou has quit [Ping timeout: 245 seconds]
zigpaw has quit [Ping timeout: 265 seconds]
sjl_ has quit [Ping timeout: 240 seconds]
zigpaw has joined #lisp
lucasb has quit [Quit: Connection closed for inactivity]
sjl has quit [Quit: WeeChat 2.2-dev]
<seok>
Hm, the downside of this https://pastebin.com/9Dgcbx3e is that I can only use defmacro instead of functions using let-game which uses macros (hand ..) or (deck ..)
orivej has quit [Ping timeout: 256 seconds]
quazimodo has joined #lisp
sjl has joined #lisp
orivej has joined #lisp
tristero has quit [Ping timeout: 256 seconds]
<beach>
Good morning everyone!
<seok>
morning!
akoana has left #lisp ["Leaving"]
yonkunas has quit [Quit: Connection closed for inactivity]
vutral has joined #lisp
orivej has quit [Quit: No Ping reply in 180 seconds.]
abhixec has quit [Quit: leaving]
orivej has joined #lisp
bilegeek has quit [Quit: Leaving]
orivej has quit [Ping timeout: 264 seconds]
orivej_ has joined #lisp
vornth has joined #lisp
rippa has quit [Quit: {#`%${%&`+'${`%&NO CARRIER]
karlosz has quit [Ping timeout: 260 seconds]
edgar-rft has joined #lisp
refpga has quit [Read error: Connection reset by peer]
refpga has joined #lisp
refpga has quit [Read error: Connection reset by peer]
refpga has joined #lisp
<seok>
How do I highlight which line of function is causing a type error?
<beach>
Hit `e' in the SLIME "debugger" in the appropriate stack frame.
<beach>
`e'?
<beach>
My fingers know it, but I don't.
<beach>
Maybe it is `s'.
<seok>
e?
<seok>
e goes to eval in frame
<beach>
I think `e' is eval-in-frame maybe.
<beach>
Yeah, so `s'.
<seok>
yeah
<beach>
Like I said, my fingers know it, but I don't.
<beach>
It happens to me a lot.
<seok>
something unbound my function TT
refpga has quit [Ping timeout: 240 seconds]
refpga has joined #lisp
<seok>
Not currently single-stepping? and no continue restart available
<seok>
is this what I y
<seok>
want?
<seok>
s took me here
<beach>
If you hit an error, you can't really continue or step. What would that even mean?
<seok>
I'm at a dead end
<beach>
"Fix this error using DWIM, and continue as if it never happened, please!"?
aeth has quit [Read error: Connection reset by peer]
<seok>
s took me there, not to the line of error
<seok>
: O
aeth has joined #lisp
<beach>
Are you using SBCL? Do you have a high value of your DEBUG OPTIMIZE quality?
<seok>
yes, and I don't know what that means
<seok>
I use portacle as shipped
vornth has quit [Ping timeout: 240 seconds]
borei has quit [Ping timeout: 244 seconds]
<stylewarning>
seok: beach: it’s ‘v’
<seok>
ah tyvm
<beach>
stylewarning: Thanks.
<stylewarning>
‘v’ on the stack frame of your choice
<beach>
Like I said, my fingers know it.
<seok>
How do I ask your fingers xD
<beach>
There is only one way, try it out and observe what the fingers do.
<beach>
I can't possibly be the only person experiencing this phenomenon.
orivej_ has quit [Ping timeout: 240 seconds]
<seok>
yeah, passwords for me
isaac` has joined #lisp
isaac` is now known as iissaacc
<beach>
I don't even know my password(s). So if the keyboard layout is different, I can't log in.
<seok>
remembering passwords is a 21st century dilema. password managers scream at you for have duplicate passwords on different sites
<beach>
seok: Anyway, this should teach you to go read the manual before asking.
refpga has quit [Ping timeout: 256 seconds]
<beach>
It is SOOO much more efficient for one person to read the manual, than for a few hundred people to read your question in order to determine whether they might be concerned.
refpga has joined #lisp
<seok>
I don't even know which manual I should be reading tho, nor which part of it to read
<seok>
lisp has so much jargons that are hard to access without asking
<philweb>
(unless/until I know it's implementation-specific... then I'd look at the implementation docs)
<beach>
Except in this case, it is the SLIME manual.
<philweb>
sorry... I thought the frustration was referring to optimization from earlier in the thread
<beach>
Ah, yes, that one too.
karlosz has joined #lisp
refpga has quit [Read error: Connection reset by peer]
karlosz has quit [Client Quit]
dominic34 has quit [Ping timeout: 256 seconds]
refpga has joined #lisp
karlosz has joined #lisp
<stylewarning>
seok: you can always PM me jargon and I’ll answer
<seok>
ty! appreciate it stylewarning
<seok>
are questions not welcome in this channel?
<stylewarning>
They are of course
karlosz has quit [Client Quit]
<seok>
cool, just wondering if I missed a community trend
karlosz has joined #lisp
narimiran has joined #lisp
diamondbond has joined #lisp
gravicappa has joined #lisp
_whitelogger has joined #lisp
quazimodo has quit [Ping timeout: 260 seconds]
<ahungry>
I see where the statement is coming from, as there was a barrage of questions for simple things, but I disagree with the statement that its more efficient to read the manual than to ask - even if it takes 100 potential answerers 5 seconds to skim over and ignore the question or squelch the asker, 500 seconds is still going to be less than 10 minutes, and no one is reading an entire manual in 10 minutes (unless the manual is a readme.md
<ahungry>
file or something)
<ahungry>
I think tutorial/walk throughs tend to be the peak of efficiency for that (manuals are often very dry and better suited to look up information, not read straight through)
<beach>
seok: Questions are welcome, of course. But your questions have been of such elementary nature that they don't necessarily belong here. And I for one am now spacing out when you ask a question, because I don't even know where to start answering it, and the answer would be so long and contain so much off-topic stuff, that I might get kicked if I try.
<seok>
So how do I figure out whether a question is too elementary for this channel or not?
<beach>
Well, that's the problem isn't it. Your background knowledge is not sufficient to determine that.
_whitelogger has joined #lisp
philweb has joined #lisp
<seok>
That's not one of the questions I asked, but that is an application written in lisp
<beach>
It works the same in C, C++, Python, C#, Java, etc.
<stylewarning>
This channel is about SICL and SICL accessories.
<seok>
it doesn't, because those languages don't work with cons
<seok>
python does not have (push
<seok>
there is .append, which is destructive
<seok>
Clearly, that example is lisp-specific, albeit I agree it is quite basic
gioyik has quit [Quit: WeeChat 2.9]
<stylewarning>
seok: beach doesn’t mean the exact names or exact semantics exist elsewhere, but the general means for describing what’s happening is not necessarily a Lisp thing. (I don’t find it objectionable to ask such a question though.)
<ahungry>
actually I think that example is not good, mutating literals can be dangerous and have unexpected side effects - mutating the quoted list is not the same as mutating the unquoted (list a b c) variant
<beach>
stylewarning: Not sure why you uttered that. I keep most of my SICL-related stuff to #sicl.
<stylewarning>
push doesn’t mutate anything but the value of a variable
<beach>
ahungry: I didn't mutate anything.
<stylewarning>
beach: it was a joke paying homage to an American cartoon
<ahungry>
and your bindings are bubbling up to a literal list
<ahungry>
and modifying a literal lits is undefined behavior in common lisp
<ahungry>
list*
<beach>
*sigh*
<stylewarning>
ahungry: what literal list is being modified?
<beach>
ahungry: The place here is the variable.
<beach>
ahungry: The value of the variable is modified, but not the list.
<seok>
Ah it is destructive
<ahungry>
(list a b c) is a freshly consed list, '(a b c) as in the sample pseudocode is a literal list
<ahungry>
you should never modify '(a b c)a
<beach>
ahungry: The value of the variable is modified, but not the list.
<stylewarning>
Is (a b c) being modified ahungry?
<stylewarning>
If it’s being modified then somewhere in the chain a (setf car) or (setf cdr) must be happening.
<seok>
no.. it's not destructive
<seok>
ok
<stylewarning>
Whose car or cdr is being set in (a b c)?
<seok>
beach so it is defined that the list is never mutated?
<ahungry>
Janet (a lisp-like) had a bad "non error" with their compiler with a similar scenario where unexpected behavior was observed when mutating top level literals
<ahungry>
because the compiler has the choice in undefined behavior there and in CL, to use the same pointer under the hood
<beach>
seok: I am not going to answer that, because you can't reduce the semantics to a yes/no.
<ahungry>
for the underlying literal list data structure
<stylewarning>
ahungry: if I do (defparameter x 1) then (setf x 2), am I modifying the integer literal 1?
<seok>
ok
<beach>
seok: If you do (push <something> <something-else>) and <something-else> is a simple variable, then the object contained in <something> is not going to be destructively modified.
<beach>
stylewarning: Nice example.
<ahungry>
This was what happened on janet: https://github.com/janet-lang/janet/issues/404 - I would be interested what happens with a similar CL setup using the initial sample, and a top level literal like a scalar or something else a parser reads as a single token is different than a data structure
<stylewarning>
ahungry: What do you think about my question?
<beach>
seok: Because, as stylewarning pointed out, then (push <something> <something-else) is the same as (setq <something-else> (cons <something> <something-else>)) and SETQ just modified the value of the variable, and CONS is not destructive.
<beach>
GAH! I should have said: SETQ changes the association between the variable and its value. It does not in any way alter the object currently being the value of the variable.
<seok>
Right
vutral has quit [Quit: Connection closed for inactivity]
Oladon has quit [Quit: Leaving.]
diamondbond has quit [Ping timeout: 260 seconds]
<beach>
Now, if we ever get around to creating that online lecture series about Common Lisp that we have been talking about, this question would be the subject of one of the 5 minute "nodes" that I would like to see.
<seok>
Who's working on it?
<seok>
I'll be sure to watch all of it : )
<beach>
Nobody yet, but several people "signed up". It's a huge project though. The CACM article that inspired me estimated the cost of such a thing in the millions of USD.
<beach>
... if it were to be done commercially, I mean.
froggey has quit [Ping timeout: 240 seconds]
froggey has joined #lisp
<seok>
How big of a volume are we looking at?
join_parkjam has joined #lisp
join_parkjam has left #lisp [#lisp]
join_subline has joined #lisp
diamondbond has joined #lisp
<beach>
Well, edgar-rft estimated 30 hours of work for a minute of video, so if we think that this will be a 30 hour lecture series, then you can get an estimate.
space_otter has joined #lisp
_whitelogger has joined #lisp
diamondbond has quit [Quit: Leaving]
ahungry has quit [Remote host closed the connection]
ggole has joined #lisp
<edgar-rft>
Well I think we should just simply try to get the first video done somehow, after that we *know* how much work it will take, and most often also howto do it *better* in the second video :-) But please expect it to need *more* than 5 minutes work.
<beach>
Well put.
<edgar-rft>
Good morning, btw :-)
<seok>
We could always make a rough one first, and version-update that topic if needed
<phoe>
good morniiiiing
<seok>
hello phoe
mankaev has quit [Read error: Connection reset by peer]
mankaev has joined #lisp
heisig has joined #lisp
ilshad has joined #lisp
zigpaw has quit [Ping timeout: 240 seconds]
zigpaw has joined #lisp
mrcom has quit [Read error: Connection reset by peer]
philweb has quit [Ping timeout: 245 seconds]
quazimodo has joined #lisp
ljavorsk has joined #lisp
zmyrgel has joined #lisp
vaporatorius__ has joined #lisp
mrcom has joined #lisp
vaporatorius has quit [Ping timeout: 246 seconds]
lxbarbosa has joined #lisp
lxbarbosa has quit [Remote host closed the connection]
lxbarbosa has joined #lisp
lxbarbosa has quit [Remote host closed the connection]
lxbarbosa has joined #lisp
edgar-rft has quit [Quit: Leaving]
lxbarbosa has quit [Quit: ERC (IRC client for Emacs 28.0.50)]
lxbarbosa has joined #lisp
lxbarbosa has quit [Remote host closed the connection]
lxbarbosa has joined #lisp
rogersm has joined #lisp
lxbarbosa has quit [Client Quit]
lxbarbosa has joined #lisp
cjb has quit [Quit: ERC (IRC client for Emacs 26.3)]
liberliver has joined #lisp
pve has joined #lisp
gravicappa has quit [Remote host closed the connection]
jonatack has quit [Ping timeout: 246 seconds]
ralt has joined #lisp
msk has quit [Quit: Leaving]
Harag has left #lisp ["ERC (IRC client for Emacs 26.3)"]
shifty has joined #lisp
vaporatorius__ has quit [Quit: Leaving]
vaporatorius has joined #lisp
vaporatorius has quit [Changing host]
vaporatorius has joined #lisp
darkstar314 has joined #lisp
darkstar314 has left #lisp [#lisp]
space_otter has quit [Remote host closed the connection]
aurelius has quit [Remote host closed the connection]
aurelius has joined #lisp
vutral has joined #lisp
X-Scale` has joined #lisp
X-Scale has quit [Ping timeout: 240 seconds]
X-Scale` is now known as X-Scale
<coltkirk>
watching youtube common lisp videos
<coltkirk>
@ 2x the speed!!
lxbarbosa is now known as elxbarbosa
elxbarbosa has quit [Quit: ERC (IRC client for Emacs 28.0.50)]
<ioa>
coltkirk, why in 2x the speed?
<coltkirk>
youtube people speak----so---------um-----uhh----slowly
elxbarbosa has joined #lisp
elxbarbosa has quit [Client Quit]
<ioa>
link please :) I usually pause youtube videos to digest each sentence. XD
<coltkirk>
its insufferable at 1x
<eta>
coltkirk: I've been using 1.5x and now I can't go back
<ioa>
If I was watching that when I learned common-lisp I probably wouldn't pause it.
<coltkirk>
do you have any cool videos for learners? I like to supplement books + videos just to get a broader view
<coltkirk>
i used emacs for years and years but i decided to get with lisp about a month ago
<ioa>
I would have to look, I was lucky to have had a friend helping me in-person to get started.
mokulus has quit [Ping timeout: 256 seconds]
<ioa>
coltkirk, elisp and common-lisp have a lot of things in common, I think you could watch more advanced videos than what you posted.
<phoe>
coltkirk: Baggers' series
<phoe>
Little Bits of Lisp
q3d has joined #lisp
EvW has joined #lisp
<coltkirk>
using paredit for the first time, takes some getting used to
msk has joined #lisp
random-nick has joined #lisp
gxt has joined #lisp
ilshad has quit [Ping timeout: 240 seconds]
heisig has quit [Quit: Leaving]
gravicappa has joined #lisp
contrapunctus has left #lisp ["Disconnected: closed"]
contrapunctus has joined #lisp
aurelius has quit [Remote host closed the connection]
ljavorsk has quit [Ping timeout: 240 seconds]
kaftejiman has joined #lisp
ayuce has joined #lisp
EvW has quit [Ping timeout: 260 seconds]
aurelius has joined #lisp
ilshad has joined #lisp
ilshad has quit [Ping timeout: 265 seconds]
refpga has quit [Ping timeout: 240 seconds]
Lord_of_Life_ has joined #lisp
Lord_of_Life has quit [Ping timeout: 240 seconds]
Lord_of_Life_ is now known as Lord_of_Life
vutral has quit [Quit: Connection closed for inactivity]
FreeBirdLjj has joined #lisp
EvW1 has joined #lisp
q3d has quit [Ping timeout: 245 seconds]
refpga has joined #lisp
orivej has joined #lisp
FreeBirdLjj has quit [Remote host closed the connection]
<coltkirk>
whew yea baggers knows what he's talking about, good videos
Bourne has joined #lisp
terpri has quit [Remote host closed the connection]
terpri has joined #lisp
EvW1 has quit [Ping timeout: 256 seconds]
orivej has quit [Ping timeout: 246 seconds]
orivej has joined #lisp
EvW has joined #lisp
nmg_ has joined #lisp
nmg has quit [Ping timeout: 246 seconds]
elxbarbosa has quit [Ping timeout: 240 seconds]
orivej has quit [Ping timeout: 240 seconds]
orivej has joined #lisp
v3ga has joined #lisp
vutral has joined #lisp
orivej has quit [Ping timeout: 256 seconds]
orivej has joined #lisp
v88m has quit [Ping timeout: 246 seconds]
minerjoe has quit [Ping timeout: 256 seconds]
edgar-rft has joined #lisp
vornth has joined #lisp
shangul has joined #lisp
jeosol has joined #lisp
orivej has quit [Ping timeout: 240 seconds]
orivej has joined #lisp
luna_is_here_ has joined #lisp
luna_is_here has quit [Ping timeout: 256 seconds]
wsinatra has joined #lisp
vornth has quit []
orivej has quit [Ping timeout: 246 seconds]
orivej has joined #lisp
X-Scale` has joined #lisp
X-Scale has quit [Ping timeout: 260 seconds]
X-Scale` is now known as X-Scale
toorevitimirp has joined #lisp
<lukego>
coltkirk: man I really want to get into paredit but haven't been able to take the initial hit yet. just discovered Redshank and need to learn that now too.
frgo has joined #lisp
Fare has joined #lisp
<Xach>
paredit solved way more problems than it caused for me, so it didn't take me long to get used to it.
EvW has quit [Ping timeout: 265 seconds]
<scymtym>
Xach: i made good progress with CFF support and the type 2 interpreter. would such things be in scope of zpb-ttf or should they go into a separate project?
diamondbond has joined #lisp
<Xach>
scymtym: i suspect a separate project - maybe a third, overarching project could unify a font interface, but i think zpb-ttf is very specific to the data/format truetype presents
shifty has quit [Ping timeout: 264 seconds]
<Xach>
something to support full OTF perhaps
<scymtym>
Xach: i see, thanks. i will start by making a project for cff and the type 2 interpreter. those are somewhat self-contained and should be useful in any case
<jackdaniel>
when fonts were bitmaps of fixed size life was much simpler
markong has quit [Ping timeout: 256 seconds]
<scymtym>
less fun though. cff and the type 2 interpreter are like advent of code on steroids :)
<jackdaniel>
and even if you do a very decent job with kerning and stuff, there is always few people who are not satisfied because typography is oh-so-much that it can't be clearly defined
<jackdaniel>
i.e shaping: - how fonts shoudl be shaped? - beats me, whatever harfbuzz does is correct! ,)
<jackdaniel>
s/shoudl/should/
diamondbond has quit [Quit: Leaving]
aurelius has quit []
jackdani1l has joined #lisp
mankaev has quit [Ping timeout: 260 seconds]
jackdaniel has quit [Disconnected by services]
jackdani1l is now known as jackdaniel
Inline has joined #lisp
mankaev has joined #lisp
<TMA>
typography is akin to the axiom of choice -- it is quite simple to define it clearly (good typography is aesthetically pleasing to persons skilled in the trade, while being not irksome to the laypersons), however it is nigh impossible to define it concisely and constructively
<jackdaniel>
fact that some people tend to it religiously doesn't help either
<TMA>
which in turn suggests the method for implementation -- put some deep neural networks to work and capture the intuition there
<jackdaniel>
i.e: this font (which looks basically like any other font over there), is "refreshing" or whatever bs. but I've started offtopic, sorry about that :)
EvW1 has joined #lisp
orivej has quit [Ping timeout: 246 seconds]
orivej has joined #lisp
jw4 has quit [Read error: Connection reset by peer]
<TMA>
which brings another question: is there an established ANN framework for CL?
seok has quit [Remote host closed the connection]
jw4 has joined #lisp
<Fare>
can you guys login to gitlab.common-lisp.net ?
<Fare>
It looks like they tried to update it recently, and I can't login anymore
jeosol has quit [Remote host closed the connection]
<phoe>
Fare: what's the issue?
<phoe>
I had something with an unexpected HTTP 404 being thrown my way, and I had to re-click the "validate my email" link to make it work.
FreeBirdLjj has joined #lisp
jeosol has joined #lisp
toorevitimirp has quit [Quit: Konversation terminated!]
<ralt>
phoe: it's a known bug with gitlab... wait for the page to be fully loaded before clicking on the SSO buttons.
<phoe>
ralt: I already managed to log in, poke Fare if anything.
<ralt>
I was talking about the unexpected 404
<phoe>
oh, okay
orivej has quit [Ping timeout: 260 seconds]
orivej has joined #lisp
RedMallet has joined #lisp
RedMallet has quit [Client Quit]
zmyrgel has quit [Remote host closed the connection]
<ralt>
Gitlab is very good with progressive enhancement. When the JavaScript hasn't finished loading, the SSO buttons will do a GET. But the backend only supports POST. So you get a 404 if you click too fast.
EvW1 has quit [Ping timeout: 244 seconds]
karlosz has quit [Remote host closed the connection]
jeosol has quit [Remote host closed the connection]
orivej has quit [Ping timeout: 240 seconds]
orivej has joined #lisp
<shangul>
ralt, lol
cosimone has joined #lisp
terpri_ has joined #lisp
terpri has quit [Ping timeout: 244 seconds]
<Fare>
phoe: I can't push code with ssh, and can't login on the web interface
<Fare>
using git with ssh, it tells me "remote: Your account has been blocked."
lucasb has joined #lisp
toorevitimirp has joined #lisp
<phoe>
#common-lisp.net should be able to help
terpri_ has quit [Remote host closed the connection]
terpri_ has joined #lisp
toorevitimirp has quit [Remote host closed the connection]
vutral has quit [Quit: Connection closed for inactivity]
karlosz has joined #lisp
EvW has joined #lisp
cosimone has quit [Read error: Connection reset by peer]
cosimone has joined #lisp
diamondbond has joined #lisp
jonatack has joined #lisp
sjl_ has joined #lisp
cosimone has quit [Read error: Connection reset by peer]
cosimone has joined #lisp
gxt has quit [Remote host closed the connection]
dominic34 has joined #lisp
vutral has joined #lisp
Harag has joined #lisp
ahungry has joined #lisp
Inline has quit [Ping timeout: 240 seconds]
bhartrihari has left #lisp ["Disconnected: Replaced by new connection"]
refpga has quit [Read error: Connection reset by peer]
refpga has joined #lisp
bhartrihari has joined #lisp
bsd4me has quit [Remote host closed the connection]
minerjoe has joined #lisp
sjl_ has quit [Quit: WeeChat 2.3-dev]
sjl_ has joined #lisp
cosimone has quit [Ping timeout: 244 seconds]
cosimone has joined #lisp
jonatack has quit [Read error: Connection reset by peer]
jeosol has joined #lisp
rumbler31 has joined #lisp
tristero has joined #lisp
bsd4me has joined #lisp
contrapunctus has left #lisp ["Disconnected: Replaced by new connection"]
contrapunctus has joined #lisp
rippa has joined #lisp
vaporatorius__ has joined #lisp
sympt has joined #lisp
vaporatorius has quit [Ping timeout: 240 seconds]
orivej has quit [Ping timeout: 256 seconds]
Lord_of_Life_ has joined #lisp
orivej has joined #lisp
Lord_of_Life has quit [Ping timeout: 260 seconds]
Lord_of_Life_ is now known as Lord_of_Life
refpga has quit [Remote host closed the connection]
jonatack has joined #lisp
EvW has quit [Ping timeout: 260 seconds]
orivej has quit [Ping timeout: 240 seconds]
orivej has joined #lisp
pve_ has joined #lisp
terpri_ is now known as terpri
pve has quit [Ping timeout: 265 seconds]
theseb has joined #lisp
rogersm_ has joined #lisp
rogersm has quit [Ping timeout: 244 seconds]
bsd4me has quit [Remote host closed the connection]
hiroaki has quit [Ping timeout: 240 seconds]
diamondbond has quit [Ping timeout: 260 seconds]
cosimone has quit [Quit: Quit.]
bhartrihari has left #lisp ["Disconnected: Replaced by new connection"]
bsd4me has joined #lisp
bhartrihari has joined #lisp
Lycurgus has joined #lisp
epony has quit [Remote host closed the connection]
toorevitimirp has joined #lisp
toorevitimirp has quit [Client Quit]
orivej has quit [Ping timeout: 256 seconds]
orivej has joined #lisp
shifty has joined #lisp
vutral has quit [Quit: Connection closed for inactivity]
FreeBirdLjj has quit [Remote host closed the connection]
jeosol has quit [Remote host closed the connection]
tristero has quit [Ping timeout: 265 seconds]
gaqwas has joined #lisp
gaqwas has quit [Changing host]
gaqwas has joined #lisp
<lukego>
Just running around in my head... I think if you wanted to do CLIM like presentations in Emacs you'd use Vecto. Each discrete object would be rendered separately to create a mask for (X,Y) positions where it can be clicked (imagemap) and then the composite image would be displayed inline by Emacs.
<lukego>
Emacs has SVG support built-in but that's actually just converting to a bitmap as the first step so no real upside to letting Emacs do the rasterization
<lukego>
Emacs doesn't seem to have mouse-over events so that would have to be added
<lukego>
(it does have mouse click events on images though)
bsd4me has quit [Quit: Leaving]
bsd4me has joined #lisp
shangul has quit [Read error: Connection reset by peer]
Lycurgus has quit [Remote host closed the connection]
epony has joined #lisp
shangul has joined #lisp
rogersm_ has quit [Ping timeout: 244 seconds]
rogersm has joined #lisp
cosimone has joined #lisp
v88m has joined #lisp
orivej has quit [Ping timeout: 246 seconds]
orivej has joined #lisp
satousan has joined #lisp
theseb has quit [Quit: Leaving]
theseb has joined #lisp
rogersm has quit [Quit: Leaving...]
yonkunas_ has joined #lisp
gaqwas has quit [Remote host closed the connection]
yonkunas_ has quit [Client Quit]
yonkunas has joined #lisp
terpri_ has joined #lisp
Bike has joined #lisp
terpri has quit [Ping timeout: 260 seconds]
shangul has quit [Ping timeout: 256 seconds]
Ven`` has joined #lisp
solrize_ has quit [Changing host]
solrize_ has joined #lisp
Jesin has quit [Quit: Leaving]
satousan has quit [Quit: WeeChat 2.3]
<markasoftware>
I noticed a library on Github that "added" a superclass to all instances of a metaclass by specializing `compute-class-precedence-list` as `(cons the-extra-superclass (call-next-method))`
<markasoftware>
Is this the right way? I thought compute-class-precedence-list was just supposed to sort the superclasses.
philadendrite has quit [Ping timeout: 240 seconds]
<Bike>
"All methods on this generic function must compute the class precedence list as a function of the ordered direct superclasses of the superclasses of class. The results are undefined if the rules used to compute the class precedence list depend on any other factors. "
<Bike>
I guess that could be read either way, though
<fwoaroof[m]>
(defun (l) (cons 'foo l)) is a function of l
FreeBirdLjj has quit [Ping timeout: 246 seconds]
<Bike>
that particular definition sounds wrong cos the next method will have the class itself as the first element, though, i think
<markasoftware>
well, the-extra-superclass is not a direct or indirect superclass -- it is arbitrarily added by the compute-class-precedence-list. I'm quite sure this author is going against the spec
<markasoftware>
where did you get that quote by the way, Bike?
<Bike>
mop page on compute-c-p-l
<fwoaroof[m]>
Doesn't MOP have an example of forcing a superclass?
<fwoaroof[m]>
e.g. when it talks about standard-object being the superclass of every class of type standard-class or something like that?
<sjl_>
page 19, they do it in initialize-instance :around on the class
<sjl_>
(search for "sneak" to find the relevant paragraph)
<fwoaroof[m]>
sbcl's standard-class has thi in DEFAULT-INITARGS: :direct-superclasses (list the-class-standard-object)))
<fwoaroof[m]>
It's basically the same as what sjl_ describes, without the extra DEFMETHOD
<sjl_>
This paper goes to extra pains to not include the special class in the superclass list if a superclass already does, but I'm not sure why. Just general cleanliness?
<fwoaroof[m]>
I wonder if there's precedence issues too?
<fwoaroof[m]>
if STANDARD-OBJECT is a direct superclass of every class, it'd probably make DEFMETHODS behave unexpectedly in some edge cases
<sjl_>
I'm not sure about standard-object, but in the example they're adding a different class they've defined... I don't think it would really make a difference one way or the other in their example.
cosimone has quit [Quit: Quit.]
<fwoaroof[m]>
I'm thinking of diamond-inheritance like issues
<fwoaroof[m]>
I forget the class precedence rules, but in (defclass a (foo)) (defclass b (a)), you might run into issues if they both have C as an implicit direct superclass
<fwoaroof[m]>
because you probably want a DEFMETHOD to prefer a method on A to one on C when called with an instance of B
<sjl_>
Maybe that's what they're worried about. I haven't though it through all the way (and can't at the moment). Would be interesting to have a concrete example where it would cause an obvious problem.
<markasoftware>
they are making a json serialization metaclass, and they want a method that is only applicable to objects from classes that are json-serializable
cosimone has joined #lisp
<markasoftware>
also fwoaroof[m], I do see the default-initargs :direct-superclasses on standard-class now that I look at it, but SBCL additionally checks this in shared-initialize
<markasoftware>
there's what amounts to a (when (null direct-superclasses) (setf direct-superclasses (list the-class-standard-object))
gareppa has joined #lisp
FreeBirdLjj has joined #lisp
rogersm has joined #lisp
FreeBirdLjj has quit [Ping timeout: 260 seconds]
gareppa has quit [Quit: Leaving]
karlosz has quit [Remote host closed the connection]
dilated_dinosaur has quit [Ping timeout: 256 seconds]
gaqwas has quit [Remote host closed the connection]
gioyik has joined #lisp
lucasb has quit [Quit: Connection closed for inactivity]
vaporatorius__ has quit [Quit: Leaving]
vaporatorius has joined #lisp
vaporatorius has quit [Changing host]
vaporatorius has joined #lisp
dilated_dinosaur has joined #lisp
gaqwas has joined #lisp
gaqwas has joined #lisp
gaqwas has quit [Changing host]
FreeBirdLjj has joined #lisp
FreeBirdLjj has quit [Ping timeout: 256 seconds]
rogersm has quit []
philadendrite has joined #lisp
liamz[m] has quit [Ping timeout: 244 seconds]
userself has quit [Ping timeout: 244 seconds]
dilated_dinosaur has quit [Ping timeout: 260 seconds]
liamz[m] has joined #lisp
wsinatra has quit [Quit: WeeChat 2.9]
izh_ has joined #lisp
userself has joined #lisp
dilated_dinosaur has joined #lisp
random-nick has quit [Quit: quit]
random-nick has joined #lisp
Ven`` has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
rippa has quit [Quit: {#`%${%&`+'${`%&NO CARRIER]
nullheroes has quit [Quit: WeeChat 2.9]
grewal has quit [Quit: Lost terminal]
nullheroes has joined #lisp
rgherdt has joined #lisp
izh_ has quit [Quit: Leaving]
FreeBirdLjj has joined #lisp
tristero has joined #lisp
FreeBirdLjj has quit [Ping timeout: 244 seconds]
gravicappa has quit [Ping timeout: 256 seconds]
narimiran has quit [Ping timeout: 256 seconds]
lottaquestions_ has joined #lisp
cosimone has quit [Quit: Quit.]
lottaquestions has quit [Ping timeout: 256 seconds]
seok has joined #lisp
cosimone has joined #lisp
gaqwas has quit [Remote host closed the connection]
lottaquestions_ has quit [Remote host closed the connection]
random-nick has quit [Read error: Connection reset by peer]
random-nick has joined #lisp
gioyik has quit [Read error: Connection reset by peer]
cosimone has quit [Quit: Quit.]
gioyik has joined #lisp
cosimone has joined #lisp
orivej has quit [Ping timeout: 260 seconds]
orivej has joined #lisp
gdsg has joined #lisp
ahungry has quit [Ping timeout: 260 seconds]
rumbler31 has quit [Ping timeout: 260 seconds]
<seok>
Would it be a bad design to define a lot of similar classes, say 4000 of them? how big of an overhead would that be?
gaqwas has joined #lisp
gaqwas has quit [Changing host]
gaqwas has joined #lisp
FreeBirdLjj has joined #lisp
<Xach>
seok: not inherently bad, but that number would require some pretty decent justification and abstraction.
<seok>
Let's say one is making a game, and there are 2000 different kinds of units
<seok>
Of course that could be done with only one class definition for unit
<seok>
But would it be a bad idea to make a prototype for each of those units with (defclass name (unit)) ?
<seok>
In the former case the blueprints for each of those unit would have to be stored somewhere anyway, so how bad is it to store them as class definitions?
FreeBirdLjj has quit [Ping timeout: 256 seconds]
<tychoish>
I tend to think of classes as "kind of thing" and then have instances for "the collection of things," and have all of the different kinds of things be parameters/slots on the class
<phoe>
seok: as long as they're properly structured, I'm game for it
<tychoish>
heyo
<phoe>
that's the way I'd do it myself (and the way I am doing it at the moment)
<mfiano>
It's a bad idea to use inheritance over composition for game development anyway.
<seok>
phoe cool, thx
<seok>
mfiano what do you mean?
<tychoish>
I heard a trick, I think from like Ward Cunningham or something, where you give yourself three index cards and attempt to model the objects in whatever problem you're working out in terms of the three cards, and it's a bit extreme, but broadly, it's how I model things, I think
<phoe>
mfiano: ha! I use both
<mfiano>
Inheritance trees quickly turn into graphs in any sophisticated game design, not to mention it is not great for the CPU cache, and after all game development is all about efficient data transmission.
mankaev has quit [Ping timeout: 264 seconds]
<seok>
So you'd mach rather a method which makes instances of one definition of class rather than few thousand of them?
<mfiano>
With inheritance, you keep pushing slots up to the root until you have a "god object" that everything inherits from.
<mfiano>
It's very bad design :)
<seok>
But in this case, it is a wide rather than a tall inheritance
<aeth>
of course, games aren't held up for examples of good software design
<tychoish>
seok: it really depends on the use case. I tend to be "small numbers of classes" and "composition over inheritance" but also i don't write games
<seok>
aeth true that xD
<aeth>
Unless they're multiplayer and the code is shared with server code, the processes tend to be short-lived
mankaev has joined #lisp
<seok>
When are we ever going to get efficient version of Unity written in lisp?
<phoe>
possibly never
<mfiano>
We already have that, to some degree. Virality Engine has been in active development for 4 years and behaves very similarly to Unity or Unreal already, sans the GUI.
<aeth>
GUI-oriented game engines don't really fit the same niche that Common Lispers are in, so it's doubtful that a CL game engine's editor would use similar principles
<mfiano>
drawing pictures is done by constructing geometry, filling buffers, applying some linear algebra, and writing shaders. Same as any other modern game engine :)
seok38 has joined #lisp
<seok38>
I would imagine Covid would help people stay home and develop
<aeth>
but if people are developing, they're not on IRC
<seok38>
Ah
<aeth>
I think a lot of people were on IRC in the background while at work, and that's suffered a bit in 2020
<seok38>
Could you give me the list of lisp game engines again please?
<mfiano>
Virality Engine is in the process of a huge overhaul. We had to develop a custom CPU emulator to support the component ordering in an atomic fashion. We're almost done writing that CPU, after nearly a year and a half. That is the reason for the lack of commits, but we are working on it live on stream every week.
<aeth>
My engine is Zombie Raptor (2013), which might be the second oldest after dto's xelf (2007???), but progress is glacial because it focuses on high-performance, which has involved... quite a lot of from-scratch work, e.g. my own utility library.
<aeth>
Quite a lot has spun out of that project over the years, including an entire R7RS-small implementation in Common Lisp that's almost ready. I'm trying to complete it before the end of 2020, which is why I've been neglecting my engine this year.
<seok38>
So it looks like there are a lot of small groups each working on different game engines
<mfiano>
Virality Engine is the concatenation and reorganization of code back to 2008 from 3 developers.
<seok38>
Do each of these game engines serve a different niche? Or is there a chance for one big general game engine?
<mfiano>
Most of those are not game engines.
<seok38>
Yeah I see sketch, which looks like a gui / graphics library?
<aeth>
CEPL is more of a thing focused on live-coding than a proper engine, Virality is focused on proper architecture, cl-bodge is more about wrapping foreign libraries than most Lispers are comfortable with, and Zombie Raptor is designed around unnecessarily-high performance requirements just to prove that it's possible
EvW has quit [Ping timeout: 244 seconds]
<aeth>
sketch is just the graphics, but some games (or attempts at least) have used it
<aeth>
Idk what trial's thing is.
<mfiano>
sketch doesn't have any concepts found in a game engine. bodge is a collection of bindings so more of a framework, etc.
EvW1 has joined #lisp
<aeth>
You could argue that every Common Lisp game engine is actually a game framework since these days, "game engine" often implies that there's an editor
<aeth>
(Unless Virality has an editor now)
<mfiano>
A game engine contains collision detection, draw order, prefabs, and other concepts needed for game development.
<seok38>
editor, as in a GUI editor?
<mfiano>
That said, a game engine is nothing more than a set of choices someone made for you, so it is possible a game engine unless very general purpose and developed by hundreds of people, is not the right choice for your game
<mfiano>
Virality Engine's running game is its editor for the most part. It's just that, everything (about a couple dozen DSLs) is live recompilable, so instead of using that mouse thing, you just redefine a prefab and anything composed from it is updated on the spot, or a texture definition, or a component, or game logic, etc
EvW1 has quit [Ping timeout: 260 seconds]
<seok38>
mfiano, I've got some game engine specific questions, mind if we move to #lispgames?
nckx has joined #lisp
<mfiano>
It also has a custom shader language so GPU functions and their dependencies are also update-able online.
<mfiano>
You can ask in #lispgames or #bufferswap and someone may answer
<mfiano>
I can't say I will have all your answers
<mfiano>
I mostly only pay attention to #bufferswap, as its where all my energy is emitted :)
<mfiano>
But I'll make an effort to help wherever
<aeth>
And as for "why doesn't everyone just work on one engine", this highlights why people have different design priorities. For instance, my engine's basic design philosophy is, essentially, "Do everything at compile time if possible."
<aeth>
I'll insert some live coding features where possible at some later date, but I mostly focus on elaborate macros.
lottaquestions_ has joined #lisp
shifty has quit [Ping timeout: 265 seconds]
<aeth>
While, again, bodge is mostly about wrapping quite a few foreign libraries.
<aeth>
(An impressively high number.)
shifty has joined #lisp
ayuce has quit [Quit: ERC (IRC client for Emacs 28.0.50)]