jackdaniel changed the topic of #commonlisp to: Common Lisp, the #1=(programmable . #1#) programming language | Wiki: <https://www.cliki.net> | IRC Logs: <https://irclog.tymoon.eu/libera/%23commonlisp> | Cookbook: <https://lispcookbook.github.io/cl-cookbook> | Pastebin: <https://plaster.tymoon.eu/>
rbcarleton has quit [Quit: Konversation terminated!]
gxt__ has quit [Ping timeout: 240 seconds]
gxt__ has joined #commonlisp
lucasta has quit [Remote host closed the connection]
<green_> (cl-base64:string-to-base64-string nil) exhausts my heap, but I don't know how or where to report this bug. Does Kevin Rosenberg ever show up on IRC?
nij- has quit [Ping timeout: 248 seconds]
random-nick has quit [Ping timeout: 256 seconds]
Wally has joined #commonlisp
Wally is now known as WallyPlatypus
WallyPlatypus has quit [Remote host closed the connection]
ethanxxxl has quit [Remote host closed the connection]
pranavats has left #commonlisp [Disconnected: Hibernating too long]
waleee has quit [Ping timeout: 256 seconds]
waleee has joined #commonlisp
pranavats has joined #commonlisp
enzuru has joined #commonlisp
waleee has quit [Ping timeout: 248 seconds]
herjazz has joined #commonlisp
<semz> green_: The .asd file lists "Kevin M. Rosenberg <kmr@debian.org>" in the maintainer field.
<semz> so you can probably just email him if you don't find another way
ec has quit [Ping timeout: 240 seconds]
ec has joined #commonlisp
rbcarleton has joined #commonlisp
rbcarleton has quit [Client Quit]
herjazz has quit [Quit: leaving]
ec has quit [Ping timeout: 240 seconds]
ec has joined #commonlisp
Fare has quit [Ping timeout: 240 seconds]
Fare has joined #commonlisp
chrcav has quit [Ping timeout: 240 seconds]
chrcav has joined #commonlisp
pranavats has left #commonlisp [Disconnected: Hibernating too long]
pranavats has joined #commonlisp
Fare has quit [Ping timeout: 240 seconds]
Lycurgus has joined #commonlisp
pranavats has left #commonlisp [Error from remote client]
Lycurgus has quit [Quit: Exeunt: personae.ai-integration.biz]
akoana has joined #commonlisp
rgherdt has joined #commonlisp
rgherdt has quit [Remote host closed the connection]
rgherdt has joined #commonlisp
dcb has quit [Quit: MSN Messenger 3.8]
amb007 has quit [Ping timeout: 265 seconds]
amb007 has joined #commonlisp
pve has joined #commonlisp
rgherdt has quit [Remote host closed the connection]
rgherdt has joined #commonlisp
pranavats has joined #commonlisp
ec has quit [Ping timeout: 240 seconds]
ec has joined #commonlisp
herjazz has joined #commonlisp
matt` has joined #commonlisp
Lord_of_Life_ has joined #commonlisp
Lord_of_Life has quit [Ping timeout: 240 seconds]
Lord_of_Life_ is now known as Lord_of_Life
akoana has quit [Quit: leaving]
attila_lendvai has joined #commonlisp
msavoritias has joined #commonlisp
cage has joined #commonlisp
mooseball has joined #commonlisp
attila_lendvai has quit [Ping timeout: 240 seconds]
mooseball has quit [Ping timeout: 240 seconds]
amb007 has quit [Ping timeout: 265 seconds]
amb007 has joined #commonlisp
mooseball has joined #commonlisp
random-nick has joined #commonlisp
NicknameJohn has joined #commonlisp
green_ has quit [Ping timeout: 240 seconds]
green_ has joined #commonlisp
mooseball has quit [Ping timeout: 256 seconds]
perrierjouet has quit [Quit: WeeChat 3.8]
karlosz has joined #commonlisp
msavoritias has quit [Ping timeout: 240 seconds]
johnjaye has quit [Ping timeout: 265 seconds]
johnjaye has joined #commonlisp
alcor has joined #commonlisp
green_ has quit [Ping timeout: 264 seconds]
gin has joined #commonlisp
<gin> hiya! how have you been all?
<beach> Hello gin.
<gin> hi beach!
<gin> I have been away from this channel for sometime but I haven't stopped learning CL. I think all the effort is finally paying off. I have a small collection of personal tools all written in CL.
<gin> for stuff I used to write shell scripts for, I now have the tools written in CL.
<beach> Great!
tasty has quit [Quit: rebooting for kernel updates]
tasty has joined #commonlisp
tasty has joined #commonlisp
tasty has quit [Changing host]
herjazz has quit [Quit: leaving]
green_ has joined #commonlisp
lewisje has joined #commonlisp
alejandrozf has joined #commonlisp
tyson2 has joined #commonlisp
perrierjouet has joined #commonlisp
gin has quit [Quit: Client closed]
tyson2 has quit [Remote host closed the connection]
lucasta has joined #commonlisp
rgherdt has quit [Ping timeout: 248 seconds]
lucasta has quit [Remote host closed the connection]
lucasta has joined #commonlisp
shka has joined #commonlisp
alejandrozf has quit [Ping timeout: 250 seconds]
rgherdt has joined #commonlisp
msavoritias has joined #commonlisp
tyson2 has joined #commonlisp
tyson2 has quit [Remote host closed the connection]
ec has quit [Remote host closed the connection]
ec has joined #commonlisp
rgherdt_ has joined #commonlisp
rgherdt has quit [Read error: Connection reset by peer]
zxcvz has joined #commonlisp
szkl has quit [Quit: Connection closed for inactivity]
alcor has quit [Remote host closed the connection]
lucasta has quit [Ping timeout: 265 seconds]
alcor has joined #commonlisp
ronald has quit [Ping timeout: 248 seconds]
mi6x3m has joined #commonlisp
<mi6x3m> hey lisp, is a class the preferred way to manage data i read from a json object
<mi6x3m> or is a package consisting of query methods on a plist / alist hierachy acceptable?
<alcor> if the data is indeed "just data" then a struct is probably is arguably a better choice than either
<_death> it's a pretty general question and I'm inclined to say "it depends".. but then, I think in most cases you should use the most convenient internal representation for your program, and think of the json external data as just something to be translated into this internal representation
<mi6x3m> hmmm
<mi6x3m> let me check about structs
<mi6x3m> _death, hm, you might be on to something there
<alcor> Although I must say, I'm not really a fan of the "anemic data model"-school of design i.e. https://www.martinfowler.com/bliki/AnemicDomainModel.html, especially not in CL. CL has a powerful object model. You can easily have proper domain objects with useful behavior.
<ixelp> AnemicDomainModel
<mi6x3m> interesting
<mi6x3m> I have to agree with you there
zxcvz has quit [Quit: zxcvz]
matt` has quit [Remote host closed the connection]
<beach> A standard class is usually the most convenient choice. The semantics of structs are not so great, and they don't allow multiple inheritance.
<beach> mi6x3m: Careful with terminology. Every Common Lisp object is an instance of a class.
<beach> mi6x3m: So you can't not use classes.
<beach> ,(class-of 234)
<ixelp> (class-of 234) => #<BUILT-IN-CLASS FIXNUM>
<mi6x3m> i think i'll just go ahead with a alist / plist thing with semantically processed data
<mi6x3m> the user is going to read it once anyhow and throw it away immediately
<mi6x3m> if it had the chance of some lifetime i'd go with a class
dcb has joined #commonlisp
dcb has quit [Client Quit]
dcb has joined #commonlisp
<edwlan[m]> Even if you use alists/plists,you should be using them through accessors
<edwlan[m]> e.g. instead of using (cdr (assoc 'foo...)) all over you should typially use a function called FOO that hides that implementation detail
zxcvz has joined #commonlisp
<_death> alcor: I don't think this anti-pattern makes a lot of sense when using an object system like CLOS, where behavior belongs in generic functions and not in objects (instances)
<alcor> _death: This anti-pattern was popularized by the C++/Java-style sect of OOP. There, it's hard to add behavior to a domain class without accidentially introducting coupling. In the CL/Smalltalk OOP sect, this isn't a problem due to generic functions, advices, and dynamic scoping being available.
<mi6x3m> edwlan[m], that's the plan
<mi6x3m> anyone knows of a sane way to get a floating point from a decimal and fraction integers?
<fiddlerwoaroof> (coerce thing 'single-float)
<fiddlerwoaroof> or double-float
<_death> alcor: I'm not sure why Smalltalk is in the second camp there
<fiddlerwoaroof> ,(coerce 1/2 'single-float)
<ixelp> (coerce 1/2 'single-float) => 0.5
tibfulv has quit [Remote host closed the connection]
<mi6x3m> fiddlerwoaroof, I need (foo 12 34) => 12.34
<mi6x3m> smalltalk has this function search thing built-in btw
<mi6x3m> it's epic
<edwlan[m]> (/ 12 34 1.0)
<edwlan[m]> Oops, nvm
tibfulv has joined #commonlisp
<_death> mi6x3m: what would (foo 12 1) return? and (foo 12 10)?
<mi6x3m> there is hidden info here, i forgot to gave you, but yeah you're right
<gilberth> The sanest probably is taking a detour over ratios. ,(coerce (+ 12 (/ 34 100)) 'single-float)
<ixelp> (coerce (+ 12 (/ 34 100)) 'single-float) => 12.34
<mi6x3m> the numbers are coming from strings and it'd be foo "12" "01"
<edwlan[m]> I'd just join with a . and READ
<mi6x3m> but it's easy to solve
<edwlan[m]> Or use something like the parse-number package
<edwlan[m]> (read (format nil "~d.~d" whole fraction))
<mi6x3m> this is the way
<edwlan[m]> ,(read (format nil "~a.~a" "12" "3"))
<ixelp> (read (format nil "~a.~a" "12" "3")) ERROR: The value "12.3" is not of the expected type STREAM.
<edwlan[m]> ,(read-from-string (format nil "~a.~a" "12" "3"))
<ixelp> (read-from-string (format nil "~a.~a" "12" "3")) => 12.3; 4
<edwlan[m]> But read is dangerous with untrusted input, so ymmv
<gilberth> I'd rather do ,(defun foo (m f) (coerce (+ (parse-integer m) (/ (parse-integer f) (expt 10 (length f)))) 'single-float)) ,(foo "10" "34")
<ixelp> (defun foo (m f) (coerce (+ (parse-integer m) (/ (parse-integer f) (expt 10 (length f)))) 'single-float)) => FOO, while (foo "10" "34") => 10.34
<alcor> _death: It's in the second camp because it has `become:' allowing one to change an object's identity, in addition full reflection over basically everything in the image
<mi6x3m> thanks gilberth, this is what i went for
<_death> alcor: I don't understand why that makes the anti-pattern inapplicable.. also, I'm not too familiar with smalltalk.. does become: actually affect object identity, or more akin to change-class?
<gilberth> The very least you want to do when going with READ-FROM-STRING is (1) bind *REAL-EVAL* to NIL (2) use WITH-STANDARD-IO-SYNTAX, and in your case bind *READ-DEFAULT-FLOAT-FORMAT* as needed. Like (with-standard-io-syntax (let ((*read-eval* nil) (*read-default-float-format* <as you like>)) (read-from-string ...)))
<alcor> _death: It does something to the effect of replacing every instance pointer to X in the image with a pointer to instance Y, thus allowing one to transparently implement the decorator pattern i.e. turning an anemic object to a non-anemic one
<_death> alcor: I see.. the post by Gilad Bracha says "In the absence of an object table, become: traverses the heap in a manner similar to a garbage collector." ...
green_ has quit [Remote host closed the connection]
<semz> mi6x3m: fwiw that op is underspecified, unless you specifically want the fractional part to be hundredths. Is (foo 1 1) 1.1? 1.01? 1.001? etc
green_ has joined #commonlisp
<fiddlerwoaroof> I think the idea is that the fractional part is divided by 10 raised to its length
Fare has joined #commonlisp
<fiddlerwoaroof> Which means that 2,10 and 2,1 represent the same value 2.1
<Krystof> how do you get 2.01?
<semz> what is its length though? the digit sequences 01 and 1 both become 1
<fiddlerwoaroof> I guess you can't, good question :)
<Krystof> oh well
<fiddlerwoaroof> Sicne they're strings, though, this works
<fiddlerwoaroof> "01" is not "1"
<Krystof> luckily there are no numbers which have leading zeros in their decimal expansion
<gilberth> I believe the ideas was that this FOO gets strings. Perhaps gathered while parsing something.
<alcor> _death: Yes, I'm not sure how modern Smalltalk implements it efficiently. It sounds computationally expensive, but powerful (where applicable). Haven't heard of any other platform that can do that.
<fiddlerwoaroof> There's probably some sort of inline cache strategy that could handle this relatively efficiently
<_death> alcor: what I'm wondering is how useful would that be, if you already have a change-class operator (that doesn't need to change references, in practice using the indirection approach)
<_death> the change-all-references approach kinda gives me a "1 become: 2" kick
<alcor> _death: change-class just changes the class, it doesn't touch the state (or rather, it delegates that to update-instance-for-different-class)
<alcor> _death: "change-all-references" has at least simpler semantics. It does what it says.
<_death> alcor: what you maybe meaning to say is that it may touch the state (via u-i-f-d-c) but not identity
<alcor> _death: Kind of. State handling with change-class harbors a few footguns that don't exist with the nuclear approach that is reference patching
Fare has quit [Ping timeout: 246 seconds]
<_death> what would those be?
<alcor> _death: To quote the CLHS: "If in the old class there is any slot of the same name as a local slot in the new-class, the value of that slot is retained"
<_death> that just sounds like part of the protocol.. granted if a programmer didn't expect it to happen, may have footache, but doesn't that mean that anything can serve as a footgun?
mi6x3m has quit [Ping timeout: 240 seconds]
<alcor> It makes naming collisions hurt, but admittedly I don't know how a better solution could look like (perhaps raising a condition?)
<alcor> The issue is that it's subtle and causes no explicit error. It's one of these things that can create difficult-to-debug issues.
<_death> but I agree that change-class (that requires an instance evolution protocol) is more elaborate
Fare has joined #commonlisp
lucasta has joined #commonlisp
zxcvz has quit [Quit: zxcvz]
NicknameJohn has quit [Ping timeout: 250 seconds]
jeffrey has joined #commonlisp
ronald has joined #commonlisp
cage has quit [Quit: rcirc on GNU Emacs 28.2]
msavoritias has quit [Ping timeout: 240 seconds]
ronald has quit [Ping timeout: 240 seconds]
attila_lendvai has joined #commonlisp
Fare has quit [Ping timeout: 240 seconds]
lucasta has quit [Ping timeout: 265 seconds]
<pve> I was wondering the other day if "become:" can be simulated in CL somehow, but it probably can't, right?
waleee has joined #commonlisp
<pve> (I'm currently hacking on my smalltalk-in-lisp :)
ec has quit [Remote host closed the connection]
ec has joined #commonlisp
mi6x3m has joined #commonlisp
waleee has quit [Ping timeout: 256 seconds]
johnjaye has quit [Ping timeout: 240 seconds]
johnjaye has joined #commonlisp
Fare has joined #commonlisp
Fare has quit [Ping timeout: 250 seconds]
mi6x3m has quit [Remote host closed the connection]
samebchase0 has joined #commonlisp
samebchase has quit [Ping timeout: 265 seconds]
samebchase0 is now known as samebchase
Fare has joined #commonlisp
green_ has quit [Remote host closed the connection]
green_ has joined #commonlisp
ronald has joined #commonlisp
shka has quit [Ping timeout: 240 seconds]
pve has quit [Quit: leaving]
ec has quit [Ping timeout: 240 seconds]
ec has joined #commonlisp
Fare has quit [Quit: Leaving]
mooseball has joined #commonlisp
SunClonus has joined #commonlisp
SunClonus has quit [Read error: Connection reset by peer]
alcor has quit [Remote host closed the connection]
tankrim has joined #commonlisp
mooseball has quit [Ping timeout: 264 seconds]
occ has quit [Ping timeout: 240 seconds]
NicknameJohn has joined #commonlisp
dcb has quit [Ping timeout: 248 seconds]
dcb has joined #commonlisp
rgherdt_ has quit [Remote host closed the connection]
jurassic has quit [Remote host closed the connection]
mathrick has quit [Ping timeout: 260 seconds]
dcb has quit [Ping timeout: 240 seconds]
attila_lendvai has quit [Ping timeout: 264 seconds]
mathrick has joined #commonlisp
karlosz has quit [Quit: karlosz]