<oni-on-ion>
ah! i have that loaded up. perfect time to start going through it
fikka has joined #lisp
pierpal has quit [Ping timeout: 264 seconds]
edgar-rft has quit [Remote host closed the connection]
fikka has quit [Ping timeout: 244 seconds]
edgar-rft has joined #lisp
robotoad has joined #lisp
graphene has quit [Remote host closed the connection]
<Ober>
much nicer than some other efforts in this genre
Patzy has joined #lisp
robotoad has quit [Client Quit]
graphene has joined #lisp
quazimodo has quit [Ping timeout: 264 seconds]
buffergn0me has joined #lisp
Oladon has quit [Quit: Leaving.]
fikka has joined #lisp
Bike has joined #lisp
fikka has quit [Ping timeout: 252 seconds]
fikka has joined #lisp
pierpal has joined #lisp
fikka has quit [Ping timeout: 252 seconds]
makomo has quit [Ping timeout: 268 seconds]
fikka has joined #lisp
robotoad has joined #lisp
DGASAU has quit [Read error: Connection reset by peer]
rocx has joined #lisp
fikka has quit [Ping timeout: 244 seconds]
<slyrus1>
scymtym: around?
k-stz has quit [Remote host closed the connection]
DGASAU has joined #lisp
DGASAU has quit [Read error: Connection reset by peer]
fikka has joined #lisp
Khisanth has quit [Ping timeout: 264 seconds]
fikka has quit [Ping timeout: 268 seconds]
kristof has joined #lisp
pierpa has quit [Quit: Page closed]
Zelmin has joined #lisp
quazimodo has joined #lisp
Khisanth has joined #lisp
<Zelmin>
When I user cl-mysql I can't capture Ctrl-C anymore, anyone have an idea where to start debugging this?
<Ober>
Zelmin: sbcl?
<Zelmin>
yeah
orivej has quit [Ping timeout: 252 seconds]
orivej has joined #lisp
fikka has joined #lisp
fikka has quit [Ping timeout: 252 seconds]
dale has quit [Quit: dale]
xh4 has joined #lisp
DGASAU has joined #lisp
mindCrime has quit [Ping timeout: 268 seconds]
fikka has joined #lisp
orivej has quit [Ping timeout: 272 seconds]
fikka has quit [Ping timeout: 252 seconds]
fikka has joined #lisp
Zelmin has quit [Remote host closed the connection]
asarch has joined #lisp
fikka has quit [Ping timeout: 268 seconds]
elem6 has joined #lisp
bhrgunatha has joined #lisp
bhrgunatha has quit [Quit: ChatZilla 0.9.93 [Waterfox 56.0.4/20180202194147]]
orivej has joined #lisp
dddddd has quit [Remote host closed the connection]
Lycurgus has quit [Quit: Exeunt]
<beach>
Good morning everyone!
Roy_Fawlty has quit [Read error: Connection reset by peer]
Bike has quit [Quit: Lost terminal]
fikka has joined #lisp
Oladon has joined #lisp
<slyrus1>
morning beach
<jgkamat>
morning :)
fikka has quit [Ping timeout: 252 seconds]
mange has joined #lisp
SenasOzys has quit [Ping timeout: 264 seconds]
fikka has joined #lisp
xh4 has quit [Remote host closed the connection]
fikka has quit [Ping timeout: 272 seconds]
brettgilio has joined #lisp
<emaczen>
How would we get milliseconds from (decode-universal-time (get-universal-time))?
pierpal has quit [Quit: Poof]
<emaczen>
Or how would we just get milliseconds a different way?
pierpal has joined #lisp
mingus has quit [Ping timeout: 272 seconds]
gector has quit [Read error: Connection reset by peer]
fikka has joined #lisp
gector has joined #lisp
graphene has quit [Remote host closed the connection]
DGASAU has quit [Read error: Connection reset by peer]
graphene has joined #lisp
fikka has quit [Ping timeout: 272 seconds]
jlarocco has quit [Remote host closed the connection]
<loke>
emaczen: You need a different API
shifty has quit [Ping timeout: 268 seconds]
DGASAU has joined #lisp
<buffergn0me>
emaczen: anything UNIVERSAL-TIME is clock time in seconds. GET-INTERNAL-REAL-TIME can return time in higher resolution. INTERNAL-TIME-UNITS-PER-SECOND tells you how many internal ticks there are in a second
<buffergn0me>
On my machine rn SBCL GET-INTERNAL-REAL-TIME is in milliseconds
<loke>
local-time works on all (most?) CL implementatiuons
fikka has joined #lisp
jerme_ has quit [Ping timeout: 264 seconds]
fikka has quit [Ping timeout: 252 seconds]
fikka has joined #lisp
cpape has quit [Ping timeout: 252 seconds]
fikka has quit [Ping timeout: 272 seconds]
kristof has quit [Ping timeout: 252 seconds]
caltelt has quit [Ping timeout: 268 seconds]
igemnace has joined #lisp
fikka has joined #lisp
fikka has quit [Ping timeout: 268 seconds]
DGASAU has quit [Read error: Connection reset by peer]
buffergn0me has quit [Ping timeout: 264 seconds]
beach has quit [Ping timeout: 252 seconds]
DGASAU has joined #lisp
<aeth>
Fare: ASDF doesn't enforce any kind of versioning system, so randomly downloading packages from the online git master branches sounds like a bad idea for a third party Quicklisp repository because A and B might require two different versions of the same dependency C. Xach avoids this conflict manually through Quicklisp's curation strategy.
Copenhagen_Bram has quit [Ping timeout: 252 seconds]
<aeth>
I'm not sure how that could even work in CL because of package name conflicts.
fikka has joined #lisp
fikka has quit [Ping timeout: 252 seconds]
beach has joined #lisp
emaczen has quit [Quit: ERC (IRC client for Emacs 24.5.1)]
mange has quit [Ping timeout: 252 seconds]
elem6 has quit [Quit: ERC (IRC client for Emacs 26.1)]
fikka has joined #lisp
meepdeew has joined #lisp
Copenhagen_Bram has joined #lisp
buffergn0me has joined #lisp
fikka has quit [Ping timeout: 244 seconds]
Inline has quit [Quit: Leaving]
meepdeew has quit [Ping timeout: 272 seconds]
<oni-on-ion>
aeth: hm good point. perhaps it can be done by choosing the higher versions based on number of dependencies; so lets say if alexandria has 1000 things depending on it at a particular version, cap the rest of the packages from there
<oni-on-ion>
(if it makes sense how i explained it, idk if thats how ultralisp does it)
fikka has joined #lisp
asarch has quit [Quit: Leaving]
fikka has quit [Ping timeout: 268 seconds]
sauvin has joined #lisp
orivej has quit [Ping timeout: 252 seconds]
brettgilio has quit [Quit: Konversation terminated!]
<jackdaniel>
getting software from master branches directly from github certainly makes sense
<jackdaniel>
it would be an "Unstable" repository counterpart
brettgilio has joined #lisp
<jackdaniel>
so if someone is fine with breaking things in a private environment that has a cetain appeal
gector has quit [Ping timeout: 244 seconds]
<oni-on-ion>
thats what julia does, it has builtin libgit2, and also encourages what npm does with local project dependencies ("./node_modules" iirc)
<oni-on-ion>
pulls packages straight from git and is quite fast and decently frugal with storage space and fragmentation unlike npm
brettgilio has quit [Client Quit]
fikka has joined #lisp
shka_ has joined #lisp
<shka_>
good morning everyone!
fikka has quit [Ping timeout: 244 seconds]
gector has joined #lisp
igemnace has quit [Quit: WeeChat 2.2]
doubledup has joined #lisp
pjb has joined #lisp
SaganMan has quit [Ping timeout: 272 seconds]
fikka has joined #lisp
shrdlu68 has joined #lisp
varjag has joined #lisp
buffergn0me has quit [Ping timeout: 264 seconds]
earl-ducaine has joined #lisp
zfree has joined #lisp
DGASAU has quit [Read error: Connection reset by peer]
elfmacs has joined #lisp
DGASAU has joined #lisp
pierpal has quit [Quit: Poof]
pierpal has joined #lisp
shifty has joined #lisp
quazimodo has quit [Ping timeout: 272 seconds]
quazimodo has joined #lisp
<aeth>
jackdaniel: the problem is that the next thing you want to do is use some unstable and some stable
<aeth>
it could be a good place for projects currently too incomplete for Quicklisp, though
doubledup has quit [Quit: Leaving]
Kaisyu has joined #lisp
housel has quit [Read error: Connection reset by peer]
scymtym has quit [Ping timeout: 244 seconds]
nowhere_man has quit [Ping timeout: 252 seconds]
orivej has joined #lisp
<oni-on-ion>
hmm, symbol-function and symbol-value on 'map is nonexistant, but package lock on (defclass map () ...) ?
jinkies has quit [Ping timeout: 264 seconds]
<jdz>
oni-on-ion: CL:MAP definitely is a function.
graphene has quit [Remote host closed the connection]
<oni-on-ion>
why does defclass need to take that over, if (make-instance) uses symbols ?
<oni-on-ion>
how many name spaces are there, actually? is print/princ method, or function ? this is funcusing
<oni-on-ion>
why do i have to? when would i ever do something like (make-instance 'unwind-protect) or (my-class-name 4 5 3)
<shka_>
yup, as beach said
<beach>
oni-on-ion: Then you must have failed to shadow the symbol MAP.
<shka_>
oni-on-ion: because that's how things are designed
<shrdlu68>
oni-on-ion: Packages export symbols, the symbol 'map is exported from the package CL.
<oni-on-ion>
i am being told to just do what the standard says, if i dont understand why and if it not simple then whatever is going on is certain to arise again
<oni-on-ion>
shrdlu68: but its a symbol. arent the point of symbols that they are shared? ie (eq 'map 'map)
<Shinmera>
The point of symbols is to identify things.
<oni-on-ion>
if i shadow map then i would have to be doing (cl:map ..) now i may as well prefix everything and go back to emacs lisp
<Shinmera>
The reason why you're prevented from defining a class with a name from the CL package is because otherwise that definition would spill over to everything else that uses the CL package
<oni-on-ion>
perhaps i do not understand why defclass is trying to make its own symbol in the CL package or whatever ...
<oni-on-ion>
Shinmera: oh! thank you. now i understand a lot more. hmmm
<beach>
oni-on-ion: DEFCLASS doesn't make a symbol. The reader does.
<Shinmera>
Just name your thing something else, or shadow it as you've been told.
<loke>
oni-on-ion: Because you're importing the package CL, which means that when you specify ‘map’ you're using CL:MAP, not YOUR-PACKAGE:MAP
<oni-on-ion>
Shinmera: i am not sure if 'being told' was important to say there, but thank you for clarifying it for me.
<shrdlu68>
oni-on-ion: Human communication is suboptimal in many ways :)
<Shinmera>
? It's factual that people told you to shadow the symbol or name it something else.
<shka_>
Shinmera: well, you explained motivation behind existance of package locks
<oni-on-ion>
Shinmera: remember that time i peed my pants in class? it was factual, let's talk about that too
<Shinmera>
Why are you being hostile to me about this?
<Shinmera>
What is this. Take your beef somewhere else.
<shrdlu68>
*sigh
<beach>
shka_: The motivation behind package locks is to try to tell the user when he or she is violating one of the rules in 11.1.2.1.2.
<oni-on-ion>
"as you've been told" where i come from is already a bit hostile. sorry if you did not intend it so
<oni-on-ion>
english
<Shinmera>
It was not meant to be hostile, but simply as a reiteration.
<shka_>
beach: well, Shinmera explained why violating those rules is bad idea
<oni-on-ion>
i understand also now package locks, ty again shin and everyone
<shrdlu68>
Is 'foo implicitly '<*package*>:foo ?
light2yellow has quit [Quit: light2yellow]
<jackdaniel>
rather '<*package*>::foo
<trittweiler>
'foo is (intern "FOO" *package*) (details depend on readtable-case)
<jackdaniel>
'bar::foo is the same thing, but in bar package, so these statements aren't XOR :)
<trittweiler>
It helps on why they are called package lock. A locked package is immutable, and intern is a mutating function :)
<jackdaniel>
right you are
robotoad has quit [Quit: robotoad]
<beach>
Actually, I don't like the term "package lock" because it is not the package being mutated.
<beach>
It's the environment.
<scymtym>
i was going to say that the violation is not about mutating the package or the symbol in question
<beach>
Exactly.
<scymtym>
in fact, using a symbol's property list which is as close to mutating the symbol as it gets is permitted under package locks
<scymtym>
s/using/changing/
<oni-on-ion>
=/
<trittweiler>
It's a package lock not a symbol lock. But because packages, symbols, bindings (environments) are all a bit mixed up, some slots of symbols fall under the package lock (symbol-function, symbol-value), I guess. So beach is right, if there were first-class environment, it's those that would be locked :)
bendersteed has joined #lisp
<beach>
trittweiler: And in SICL there are first-class global environments, so I am thinking about it that way automatically.
zxcvz has joined #lisp
zxcvz has quit [Client Quit]
random-nick has joined #lisp
<kuribas>
jackdaniel: where can I find the documentation for sb-ext?
<jackdaniel>
I don't know, probably on sbcl.org/manual
<jackdaniel>
I just happen to remember that one function
<beach>
kuribas: In the SBCL manual I would guess.
<kuribas>
beach: it isn't
<beach>
:(
<kuribas>
sbcl.org is down
<kuribas>
with sourceforge
<trittweiler>
kuribas: you can inspect the package in Slime, go through all the exported functions and read their docstrings
<beach>
kuribas: I don't think the manual is organized by packages like that, though.
<kuribas>
beach: I searched recursively for that function
<kuribas>
is there a map for side-effects which throws away the results?
orivej has joined #lisp
<loke>
kuribas: MAPC or (MAP NIL ...)
<loke>
the former for lists, the latter if it can be either lists or vectors
<kuribas>
loke: the latter will not create an intermediate structure?
<kuribas>
scymtym: because it's not in my info file documentation
<loke>
kuribas: correct
<kuribas>
loke: ok, thanks!
<jackdaniel>
scymtym: looks OK. I don't know if it is not obvious, but in case it is not it could be worth mentioning, that one character may take many bytes
<jackdaniel>
(i.e there may be more octets than characters in the string)
<scymtym>
jackdaniel: good point, thank you
<scymtym>
kuribas: i'm proposing this for a future SBCL release
nowhere_man has joined #lisp
rocx has quit [Remote host closed the connection]
<jdz>
scymtym: octets-to-string also signals sb-int:character-decoding-error, should it also be brought to sb-ext package and documented?
<jdz>
Actually there's a whole bunch of conditions, subtypes of octet-encoding-error and octet-decoding-error.
<jdz>
All subtypes of character-coding-error.
<scymtym>
jdz: right. those probably warrant a separate sub-section
SenasOzys has joined #lisp
SaganMan has quit [Ping timeout: 272 seconds]
fikka has joined #lisp
makomo has joined #lisp
elfmacs has joined #lisp
orivej has quit [Ping timeout: 276 seconds]
makomo has quit [Quit: WeeChat 2.2]
mange has joined #lisp
SaganMan has joined #lisp
Lycurgus has quit [Quit: Exeunt]
bendersteed has quit [Read error: Connection reset by peer]
atgreen_ has joined #lisp
bendersteed has joined #lisp
atgreen has quit [Ping timeout: 244 seconds]
quazimodo has quit [Ping timeout: 268 seconds]
<White_Flame>
jdz: is there an option to use dummy external format characters for unencodable internal string characters?
<jdz>
White_Flame: yes. What is "unencodable internal string characters"?
<White_Flame>
you have a lisp string with character code values > 256 and you're encoding ASCII, for instance
<White_Flame>
ah, cool
<scymtym>
should work for external formats in general, that is also for streams associated with files, foreign strings, etc.
<Xof>
if you want fancier replacement, you can handle the condition and use-value a replacement programmatically. (At least in theory)
<jdz>
That's what SBCL does already.
<Xof>
yes, if it works!
<jdz>
Kudos to the smart person who wrote the functionality.
fikka has joined #lisp
fikka has quit [Ping timeout: 244 seconds]
kajo has quit [Quit: From my rotting body, flowers shall grow and I am in them and that is eternity. -- E. M.]
<Xof>
probably cliini
pierpal has quit [Quit: Poof]
gector has quit [Read error: Connection reset by peer]
pierpal has joined #lisp
gector has joined #lisp
nowhere_man has quit [Ping timeout: 252 seconds]
SenasOzys has quit [Ping timeout: 276 seconds]
fikka has joined #lisp
mange has quit [Ping timeout: 264 seconds]
SenasOzys has joined #lisp
ebrasca has quit [Read error: Connection reset by peer]
fikka has quit [Ping timeout: 272 seconds]
ebrasca has joined #lisp
figurelisp has joined #lisp
orivej has joined #lisp
astalla has joined #lisp
kuribas has quit [Quit: ERC (IRC client for Emacs 24.5.1)]
Bike has joined #lisp
mindCrime has joined #lisp
quazimodo has joined #lisp
graphene has quit [Remote host closed the connection]
graphene has joined #lisp
sjl_ has joined #lisp
fikka has joined #lisp
light2yellow has joined #lisp
Bronsa has joined #lisp
varjag has quit [Quit: ERC (IRC client for Emacs 24.5.1)]
dyelar has quit [Remote host closed the connection]
orivej has quit [Ping timeout: 272 seconds]
Lycurgus has joined #lisp
X-Scale has quit [Ping timeout: 272 seconds]
graphene has quit [Remote host closed the connection]
fikka has quit [Ping timeout: 252 seconds]
graphene has joined #lisp
Kevslinger has joined #lisp
housel has joined #lisp
Inline has joined #lisp
graphene has quit [Remote host closed the connection]
graphene has joined #lisp
k-stz has joined #lisp
FreeBirdLjj has joined #lisp
Hu0p has joined #lisp
elfmacs has quit [Ping timeout: 252 seconds]
X-Scale has joined #lisp
papachan has joined #lisp
edgar-rft has quit [Remote host closed the connection]
bendersteed has quit [Remote host closed the connection]
mrcom has joined #lisp
sabrac has joined #lisp
fikka has joined #lisp
graphene has quit [Remote host closed the connection]
eschulte_ has joined #lisp
graphene has joined #lisp
eschulte has quit [Ping timeout: 264 seconds]
cage_ has joined #lisp
cage_ has quit [Client Quit]
atgreen__ has joined #lisp
atgreen_ has quit [Ping timeout: 268 seconds]
Lycurgus has quit [Ping timeout: 264 seconds]
steiner has quit [Remote host closed the connection]
steiner has joined #lisp
atgreen__ has quit [Remote host closed the connection]
atgreen__ has joined #lisp
steiner has quit [Remote host closed the connection]
steiner has joined #lisp
<ebrasca>
weasdfcklñḉp
<phoe>
ebrasca: bless you
atgreen__ has quit [Ping timeout: 245 seconds]
Bike has quit [Ping timeout: 252 seconds]
dvdmuckle has quit [Quit: Bouncer Surgery]
figurelisp has left #lisp [#lisp]
dvdmuckle has joined #lisp
graphene has quit [Remote host closed the connection]
graphene has joined #lisp
varjag has joined #lisp
nowhere_man has joined #lisp
nika has joined #lisp
Oladon has joined #lisp
dmiles has quit [Ping timeout: 268 seconds]
meepdeew has joined #lisp
lumm has quit [Quit: lumm]
Kaisyu has quit [Quit: Connection closed for inactivity]
lumm has joined #lisp
cage_ has joined #lisp
lumm_ has joined #lisp
shrdlu68 has quit [Quit: WeeChat 2.0.1]
lumm has quit [Ping timeout: 252 seconds]
lumm_ is now known as lumm
meepdeew has quit []
LiamH has joined #lisp
quazimodo has quit [Ping timeout: 272 seconds]
cage_ has quit [Remote host closed the connection]
scymtym has quit [Ping timeout: 276 seconds]
astalla has quit [Ping timeout: 276 seconds]
cage_ has joined #lisp
<AeroNotix>
ffs, I'm ill in bed reading cltl and had a question. Came into my office and now have completely forgotten what the question was
<oni-on-ion>
it will come to you if it was important
dented42 has joined #lisp
russellw has joined #lisp
<pjb>
AeroNotix: hence the centuries old advice to keep a notebook and pencil near your bed!
<pjb>
AeroNotix: How do you read cltl? Don't you use a tablet? There are note taking apps!
<AeroNotix>
pjb: I prefer real books when reading about Lisp
<AeroNotix>
just feels better
<pjb>
AeroNotix: we cannot recapitulate millenia of advices here! You need to know something already!
<AeroNotix>
plus I find absolutely zero tablets/ebooks can ever render code reliably. Almost all ebooks are machine translations of books rather than someone sitting down and laying books out for ebooks/tablets.
<dlowe>
or worse, pdf scans
<dlowe>
which an ebook reader utterly chokes on
<easye>
ironclad 0.40 has borked tests? I get a "KEYSTREAM-POSITION" not external in package CRYPTO in #<QL-DIST:DIST quicklisp 2018-07-11>
<AeroNotix>
easye: can you give me a snippet to try to reproduce?
<AeroNotix>
I can run it here to see if it's just your set up or not
<AeroNotix>
Also, I had a fever induced thought last night of questioning how easily it might be to introduce bad actor code into quicklisp. What kind of analysis/code review is done for packages in quicklisp?
<easye>
AeroNotix: (ql:quickload :ironclad/tests)
<AeroNotix>
I have a couple of packages there and I remember they were relatively easily accepted
<fade>
when I worked at Rakuten/Kobo, I had a feature request in to the development team to improve the rendering of code and math in greek in technical books that came about as the result of a 1-on-1 with the CEO.
fade is now known as Fade
steiner has quit [Ping timeout: 244 seconds]
steiner has joined #lisp
<Fade>
but as Don Knuth discovered the problem was non trivial; I doubt anybody is ever going to implement the feature.
<AeroNotix>
easye: that works for me
<AeroNotix>
Fade: I'm not asking for someone to write a program to do it I just would think with the pervasiveness of ebook readers that some authors would put actual effort into how their books render on ebooks.
oni-on-ion has quit [Read error: No route to host]
<dlowe>
don't blame the authors here
<AeroNotix>
perhaps you're right
<Fade>
the renderers in all commercial ebook readers are actually just incapable of rendering the text.
<dlowe>
publishers decide that stuff
<AeroNotix>
I guess they have no idea sometimes if their books are being put into digital formats
<Fade>
when it looks right, it's an image.
<Fade>
the publisher agreements are profoundly onerous.
scymtym has joined #lisp
<AeroNotix>
Fade: did Rakuten/Kobo use CL?
<Fade>
I wrote a lot of devops logic in CL at Kobo
<Fade>
but it wasn't officially sanctioned.
<dlowe>
I'm pretty sure there's a lot of unsanctioned CL floating around
<AeroNotix>
haha I managed to do that at my last place too :)
<dlowe>
I've written a bunch
<AeroNotix>
dlowe: did you work there too?
<dlowe>
No, I work at Google (via ITA)
<Fade>
when all they care about is that you do job A in N time, really what do they care? particularly in the kind of code that nobody will ever have to revisit.
<Fade>
cl-launch really made my life a lot better in that regard.
<dlowe>
well, the last bit is the important part
<dlowe>
if someone has to revisit it someday, the equation changes
<Fade>
yep
Bronsa has quit [Ping timeout: 272 seconds]
<dlowe>
though if you do contract work for small businesses, they profoundly don't care
<Fade>
also true.
orivej has joined #lisp
<AeroNotix>
I feel like that's somewhat unfair
<Fade>
which?
<AeroNotix>
Foisting CL onto small businesses without them fully understanding the consequences
steiner has quit [Remote host closed the connection]
steiner has joined #lisp
<AeroNotix>
dlowe: is flights.google.com part of ITA as well?
oni-on-ion has joined #lisp
dented42 has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
<dlowe>
Warning: Consumption of this program may lead to side effects such as: maintainability, stability, and ease of extension
<easye>
AeroNotix: Thanks for checking. Something to do with abcl-1.5.1-dev, I suppose.
<dlowe>
AeroNotix: yeah, it's the same code
<dlowe>
AeroNotix: we have a massive sbcl farm here
<AeroNotix>
dlowe: absolutely rad. Everytime a family member or friend uses flights.google.com I tell them it's Lisp. Good to have it confirmed :)
<Fade>
where I think the business could be impacted at a later date by the delivery, the proposal always lists various delivery environments at different price points.
dmiles has joined #lisp
<Fade>
I find that CL usually wins in such cases.
<dlowe>
Fade: that's a very reasonable model
<AeroNotix>
dlowe: maintainability if the person is familiar with CL. I guess it really depends on what kind of money people tend to spend on your code when writing things for small businesses
<dlowe>
AeroNotix: the small business isn't going to be familiar with any tech more complex than an edit field and a button
<AeroNotix>
dlowe: can you share any information on the level of scale ITA/google flights run at?
<dlowe>
AeroNotix: sorry, no.
<AeroNotix>
Fair enough
<dlowe>
I think the official answer is "more than 7 computers"
<AeroNotix>
I've always been interested in any scaling issues SBCL has
<Fade>
i've made a practice out of saving projects that were proposed and fucked up in more mainstream languages with smaller dev teams in CL. when their hair is on fire, they're typically just glad to find out somebody has a plan.
<dlowe>
Ten years ago it was "more than 5 computers"
<AeroNotix>
Fade: are you hiring :)
<dlowe>
Fade: see, that's the sort of thing I want to get into
<AeroNotix>
Fade: what percentage of that plan is "write things properly" and which is "Use CL to solve the problem". The two can be related and unrelated at the same time
<Fade>
it's actually fairly high stress work, because the clients are at the table due to an ongoing failure.
<AeroNotix>
simply having a better plan/design than the previous iteration often wins out over platform choices. At least in my experience
<Fade>
AeroNotix: I find that environmental productivity and force amplification only really start to play out as a program moves from the land of the trivial to the non-trivial application.
<Fade>
architecture is always important, but that's tied to the deployment technology almost as much as the problem.
<dlowe>
am I wrong in remembering that tech.coop (now defunct) was at least partially a lisp shop?
<AeroNotix>
Fade: really agree with the amplification
FreeBirdLjj has quit [Remote host closed the connection]
<AeroNotix>
plus design choices rarely make an impact until you even reach a reasonable scale.
<Fade>
dlowe: it was indeed. that was drewc's baby, afair
<dlowe>
I need to bend his ear about what happened to it
<dlowe>
even better, he should write a blog post :D
<Fade>
I think he was the driving force, and when he got hurt, things trailed off.
orivej has quit [Ping timeout: 245 seconds]
<Fade>
bus factor
meepdeew has joined #lisp
dmiles has quit [Read error: Connection timed out]
<AeroNotix>
damn I seem to remember reading an article years ago about running a high scale sbcl deployment and some insights into issues they ran into (ISTR they had issues with GC?). Does anyone remember that article?
<dlowe>
huh.
<dlowe>
Co-ops are supposed to be resilient to that. :/
<Fade>
they are, but I guess that depends on their resident cooperators.
doubledup has joined #lisp
<Fade>
AeroNotix: vesedach rote about some stuff scaling sbcl at grammarly.
<AeroNotix>
might be the thing I linked
<AeroNotix>
"Yet another customization we had to make ??? a much less obvious one ??? was to run full GC programmatically every N minutes. "
<AeroNotix>
I had to do this with Erlang :(
<Fade>
when fe[nl]ix was visiting here a while ago, we got to talking about the GC in sbcl, which was (I think) related to that grammarly article.
orivej has joined #lisp
<dlowe>
The Go gc is getting crazily good. I wonder if it'd be legal to steal it. :p
<Fade>
he mentioned the GC in the Azul system being 'state of the art' for large heaps.
dmiles has joined #lisp
Lycurgus has joined #lisp
<Fade>
maybe we can get pkhuong interested in leading a project. :)
zaquest has quit [Ping timeout: 272 seconds]
dale_ has joined #lisp
<Fade>
he also mentioned that the GC in clasp was interesting, but I can't remember the details.
<AeroNotix>
I'd love to read more articles like the above that go into issues and debugging running CL at scale in production. Love stories like that
dale_ is now known as dale
<AeroNotix>
I could write tomes on things I've encountered with Erlang
<Fade>
debugging CL in production is easier than other tech stacks, in my experience.
<Fade>
the picture in python is dire
<AeroNotix>
but they all boil down to essentially "most applications don't need or want how erlang's GC is designed"
<dlowe>
The picture in Rails is even worse.
<AeroNotix>
Fade: Erlang's live debugging rivals CL's
<dlowe>
which is what you'd expect from a system designed entirely around monkeypatching
<AeroNotix>
true
<Fade>
dlowe: truth
<AeroNotix>
and monkeypatching it does _very_ well
<dlowe>
it does, but when something goes wrong, it's worse than C++ template errors
<AeroNotix>
dlowe: do you have an example?
<Fade>
guys, you're trigginer ptsd over here.
Lycurgus has quit [Client Quit]
<Fade>
er 'triggering'
<AeroNotix>
if you're doing monkeypatching you sure better test it. If you do releases properly then it's very simple to rollback "monkeypatching"
<AeroNotix>
hoping we're both still talking about erlang here
nika has quit [Quit: Leaving...]
<Fade>
the external library story in python makes release management practically impossible.
<Fade>
you always own all the pieces
<AeroNotix>
Fade: python the language or python in SBCL?
<phoe>
AeroNotix: actually, how does live-debugging Erlang work without a condition system? You can livepatch the system just as well, but the error traces are very limited, from what I know.
<Fade>
i'm talking about python the language in the context of operations.
<AeroNotix>
phoe: I disagree. You can pattern match on trace arguments/returns to functions and to specific pids
<AeroNotix>
it's quite powerful
Oladon has quit [Quit: Leaving.]
kjeldahl has joined #lisp
<AeroNotix>
it's very easy to monkeypatch code to multiple servers in a single command
<phoe>
AeroNotix: do you have any reading material? I'd like to learn that stuff
<AeroNotix>
phoe: I've not written anything myself but Ferd/mononcqc did. Google "Erlang in Anger"
<AeroNotix>
I've had a blog post brewing for a few years arguing how Erlang NEEDS CL's condition system
lumm has quit [Read error: Connection reset by peer]
<AeroNotix>
it boggles my mind how a language built around fault tolerance literally just uses typical exceptions to signal errors
FreeBirdLjj has joined #lisp
<Fade>
I'd argue that the condition system and by implication, CLOS, are what is missing from most popular languages.
<AeroNotix>
agreed
<Fade>
the condition system is a lot of state that probably doesn't compose. ;)
lumm has joined #lisp
<Fade>
is there a condition monad?
<AeroNotix>
in which language?
<Fade>
erlang
<Fade>
I just mean, given the design concerns in erlang, it might not be that surprising how they handle errors.
<AeroNotix>
Fade: erlang doesn't use monads at all really
<Fade>
isn't it all about 'fail fast'?
<AeroNotix>
yes
<Fade>
recovery doesn't really fit in that scene.
<AeroNotix>
It does and it doesn't
<AeroNotix>
The term used is "Let it crash"
<AeroNotix>
I argue that LIC is very, very misunderstood
<Fade>
I've only done a small bit of erlang; I remember thinking that it was both very weird and quite obvious that it was bootstrapped in lisp.
<AeroNotix>
Fade: it wasn't?
<AeroNotix>
It was initially wrote prolog
<AeroNotix>
in*
<Fade>
lisp -> prolog -> erlang
lumm has quit [Client Quit]
<Fade>
but, okay.
<oni-on-ion>
prolog written in lisp, Fade ?
<Fade>
there were quite some lispisms in it.
<Fade>
the immutability really reset my margins.
lumm has joined #lisp
<oni-on-ion>
i find erlang quite beautiful, but the mixing of (({[[{({({{[[({ was too much =)
<AeroNotix>
Fade: the funny thing is, there's immutability exactly in places where it's the least helpful
<dlowe>
I can't get over strings as lists of ints
<oni-on-ion>
dlowe: wasnt that haskell's thing for a bit before ByteString? =P
<dlowe>
and sometimes they might be interpreted as a string. Maybe.
<Fade>
it's a weird language.
<AeroNotix>
dlowe: use binaries is the answer, but that goes directly in the face of how the GC is designed and usually one of the bigger issues when running erlang in production
<oni-on-ion>
erlang has great support for binary , speaking of
<Fade>
that binary decomposition trick it does is very neat.
<AeroNotix>
I ran a relatively decent scale Erlang service for 5+ years. I loved and hated it.
<dlowe>
yeah, well, not much call for string munging when you're routing phone calls
<oni-on-ion>
i wrote an irc client in like half a day =p
m00natic has quit [Remote host closed the connection]
<oni-on-ion>
it got me some work, doing erlang. but its a lot of things to keep in the mind, with all of the services and hierarchy of processes
<dlowe>
I suspect you probably could write an irc client in anything in half a day
<oni-on-ion>
true, but this was maybe my second networking app
<AeroNotix>
dlowe: that's what kind of annoys me now with how people are using it for things it typically wasn't designed for. Applications with lots of operations on data rather than simple routing of said data massively impact how the GC works.
<oni-on-ion>
(and i didnt know erlang that well)
<oni-on-ion>
AeroNotix: Wings3D ? =)
<dlowe>
AeroNotix: everyone wants to see how general purpose a tool can be :)
<AeroNotix>
oni-on-ion: oh yeah that's a thing
<AeroNotix>
dlowe: I've said this many times. Erlang is a DSL for networking protocols
<oni-on-ion>
"general" purpose. prostitution and software may not mix as well as we hope it to =P
<AeroNotix>
I'd love to port the binary pattern matching to CL though
<AeroNotix>
it's incredible
<oni-on-ion>
AeroNotix: seen optima ?
<oni-on-ion>
that is my main take away from erlang, aside from immutability, is the pattern matching.
<AeroNotix>
oni-on-ion: as far as I understand last time I looked at it, it doesn't attempt to do anything like binary pattern matching
<oni-on-ion>
oh and the nodes and VMs (swi-prolog and julia have this too though)
<oni-on-ion>
ehhh OTP... too many files with very similar code. i lose track eassily
<oni-on-ion>
start_link etc etc
<AeroNotix>
Your editor should take care of all that
<AeroNotix>
Any way, erlang is probably quite OT :)
<oni-on-ion>
sure emacs/distel has templates. but thats still text that needs to be manhandled
<oni-on-ion>
scrollss.. how did it get to erlang ? ahh missing of CLOS.
<oni-on-ion>
afaik only CL julia and dylan have proper/mature multiple dispatch
<AeroNotix>
I saw a solution in the grammarly article that mentioned manually running GC in their SBCL deployment. Reminded me of a big issue with Erlang, think that's how we got on to it
* Fade
touches his nose and points to AeroNotix
<oni-on-ion>
ahh i see that now. i remember monocqc
<oni-on-ion>
l
<AeroNotix>
Based on my understanding of CLOS. I'm sure you could approximate it in Erlang. I need to see what Elixir does in this regard.
<AeroNotix>
*semi-troll-mode-engaged*: after all Erlang IS object oriented :)
<oni-on-ion>
what about LFE ? =)
<AeroNotix>
garbage language imho
<oni-on-ion>
actors are objects indeed
<AeroNotix>
worst of CL combined with the worst of Erlang
<Fade>
since there are erlang afficionadoes present, have either of you looked at cl-muproc?
<oni-on-ion>
but methods belonging to an object is a bit anti-multidispatch isnt it?
<AeroNotix>
Fade: looking at it now but I must ask one thing of all things that attempt to implement Erlang style concurrency: Can one actor kill another actor remotely without what the to-be-killed-actor being able to ignore that?
<oni-on-ion>
the swi-web-prolog is the closest i've seen, ive been watching erlang style actors/otp/concurrency in several langs
<AeroNotix>
boo: "Although CL-MUPROC has been developed with distributed operation in mind, at this point all muprocs in a CL-MUPROC based system must execute within the same Lisp image."
<oni-on-ion>
D=
<oni-on-ion>
what use is that
<Fade>
oni-on-ion: the fact tht it's a perl project leads me to doubt the basic sanity of the project team.
<AeroNotix>
wait
graphene has joined #lisp
groovy2shoes has quit [Ping timeout: 265 seconds]
<oni-on-ion>
Fade: eh, swipl ??? i think github may be reporting "*.pl" files as PERL. when in fact that is also PROLOG extension.
<AeroNotix>
oni-on-ion: ime distributed erlang is often difficult to scale depending on the application and especially when out-of-band applications can handle the operations you're using disterl for better.
* Fade
laughs
<oni-on-ion>
lol yeah that is not perl.
* oni-on-ion
knows a coder doing a lot of prolog and perl and i question their sanity daily
<AeroNotix>
phoe: why hmm?
<phoe>
AeroNotix: I'm trying to find it on Quicklisp and it isn't there yet
<phoe>
doesn't build
<phoe>
it seems there is a "timer" dependency that collides with another package called "timer" in QL
<AeroNotix>
drats
<AeroNotix>
The documentation seems all good. Really interested in how this behaves. Might procrastinate on my current project in trying to get gen_supervisor and gen_server working with cl-muprocs
<phoe>
AeroNotix: it seems that the timer library needs some love
<AeroNotix>
especially interesting to me is how does blocking code effect the scheduling
<Fade>
AeroNotix: I'd be interested in what you think after you fool around with it a bit.
<oni-on-ion>
swipl and erlang are both so similar, both packaged with tons of tools and libs, docs, and great implementation. not sure if OTP "fail-first" and CL's condition system are compatible
<AeroNotix>
oni-on-ion: they absolutely are compatible
<AeroNotix>
I'd love to explain here why but it's quite an esoteric for #lisp
<oni-on-ion>
ive never used CL conditions, but i know they are top class of the world; im sure they can be distributed or done remotely, maybe that is closer to OTP ?
<oni-on-ion>
as for pattern matching i cannot live without it so i virtually settled on optima
dmiles has joined #lisp
graphene has quit [Remote host closed the connection]
<_death>
"A function named (setf f) must return its first argument as its only value in order to preserve the semantics of setf."
<phoe>
_death: Thanks!
<phoe>
Posting it now
<_death>
but, it may be worthwhile to look at the Gray proposal..
<_death>
if LispWorks has that contradictory behavior documented.. there may be a good reason to keep it as-is
<_death>
something that's more often violated is print-object return value spec.. and print-unreadable-object's unhelpful return value contributes to that as well
<phoe>
_death: wtf
<phoe>
I just realized that, right
<phoe>
"The function print-object is called by the Lisp printer; it should not be called by the user." - then why specify its return value at all?
<phoe>
jasom: yes, I know that, it's just weird that this function is meant to return anything meaningful if it isn't meant to be called by the user
<_death>
a user can still c-n-m and such..
<phoe>
it's literally only for side effects, just like print-unreadable-object
fikka has joined #lisp
<aeth>
Return values can still have a use
<aeth>
Especially since everything's an expression
<_death>
I make a point of returning the object, but even print-object methods defined by SBCL don't..
<_death>
(i.e. even those coming from PCL...)
<phoe>
_death: you aren't supposed to notice the difference, you're not meant to call the GF yourself anyway (:
fikka has quit [Ping timeout: 244 seconds]
sauvin has quit [Read error: Connection reset by peer]
<_death>
like I said.. users may call-next-method
<phoe>
...oh wait
<phoe>
that's right
<aeth>
It often saves 1-2 lines if you return something. Maybe _death can construct an example
<phoe>
It's kind of weird in that context, since (defmethod print-object (object stream) ...) binds OBJECT which is going to be the same as the return value of (call-next-method) in that environment
fikka has joined #lisp
<aeth>
I only like returning NIL if the function is going to be called in a very specific place and the return value is known not to be used there because otherwise a function that mutates will possibly be used in the final position of a function and then you wind up with (defun foobar (foo) (bar foo) foo) instead of (defun foobar (foo) (bar foo))
<aeth>
And at that point I might as well be using Java.
cpape has joined #lisp
cods has quit [*.net *.split]
<_death>
also, another reason we're not noticing the difference is because our implementations don't care about the return value ;)
kajo has joined #lisp
<_death>
I see that for describe-object the return value is implementation-dependent..
Guest29 has quit [Read error: Connection reset by peer]
<jasom>
aeth: you use nil rather than (values)?
<phoe>
jasom: oh right, (values), yet another convention
SenasOzys has quit [Ping timeout: 276 seconds]
Lycurgus has joined #lisp
<aeth>
jasom: because unless it's in an flet or labels there's still a chance it might be called in the returning position somewhere
<aeth>
And even (values) becomes NIL if you use it as a value in most places.
random-nick has joined #lisp
light2yellow has quit [Quit: light2yellow]
<aeth>
My least favorite thing about Scheme is that its unspecified return values are taken literally. e.g. in Guile (display "Foo") returns #<unspecified>
<aeth>
Don't fight expressions in an s-expression language.
<ecraven>
aeth: that's the implementation's choice, it might as well return *no* value or something else
SenasOzys has joined #lisp
<aeth>
What I think happens with (values) is that (nth-value 0 (values)) => NIL
<aeth>
because NTH-VALUES returns NIL for all of the values past the number of actual return values
<aeth>
Most things only care about the 0th value so that's why you get NIL printed for (format t "~S~%" (values))
warweasle has quit [Quit: rcirc on GNU Emacs 24.4.1]
<aeth>
There's only a few places where (values) would make a difference, like multiple-value-call (but not multiple-value-bind! that uses NIL defaults!) and probably setf
<_death>
if FIND returned (values) when the element was not found, it wouldn't break much code :d (still, not compliant..)
meepdeew has joined #lisp
<aeth>
It looks like (at least in SBCL) setf treats (values) as NIL even though setf can handle multiple values. (let ((x (cons 1 2))) (setf (car x) (values)) x)
<_death>
well, (setf car) expects a value..
orivej has joined #lisp
<aeth>
I'll use my array-of-3, which expects 3 values. (let ((v (vector 1 2 3))) (setf (array-of-3 v) (values))) => #(NIL NIL NIL)
<aeth>
It looks like multiple-value-call might be the only place where NIL doesn't fill in the missing value(s)
cage_ has quit [Quit: Leaving]
<aeth>
You can, of course, test for NIL in multiple-value-list as well if you want to detect (values).
<AeroNotix>
dlowe: wouldn't it have been better to return (VALUES VALUE-FOUND VALUE-FOUND-P) or something?
<_death>
it's a pitfall when you don't know what you're looking for beforehand
<dlowe>
You can use member for lists or position for sequences to test for membership
<phoe>
AeroNotix: it would have been better
<_death>
AeroNotix: yes, but I believe FIND predates multiple values..
<phoe>
see return values of GETHASH
<_death>
dlowe: sure.. you just need to be aware of the issue
Jesin has joined #lisp
<dlowe>
fair enough
loli has quit [Read error: Connection reset by peer]
<aeth>
dlowe: (defun foo (sequence) (find nil sequence)) doesn't optimize to return NIL in SBCL. I'm disappointed. I thought that that was the best we have as far as optimizing compilers go
loli has joined #lisp
<aeth>
It actually calls FIND for some strange reason
oni-on-ion has quit [Quit: WeeChat 1.9.1]
<dlowe>
seems like a trivial compiler macro
Bike has joined #lisp
<_death>
this issue also has a name by the way.. PAIP calls it "the semipredicate problem"
gravicappa has joined #lisp
<aeth>
I'm surprised it wasn't solved in the same way as GETHASH
<aeth>
(Don't forget to add the final return value, though!)
neuro_sys has quit [Ping timeout: 268 seconds]
<aeth>
Then you can do (let ((v (vector 1 2 3))) (setf (foo v) (values 4 5 6))) and get something similar to my array-of-3 from earlier. (I use macros so I don't have to repeat myself for every variation, of course.)
<aeth>
The non-setf version with the same name would return multiple values and you get an elegant composition.
zfree has joined #lisp
mindCrime has quit [Ping timeout: 252 seconds]
<aeth>
This trivial example is useless because copy-seq/replace/etc. exist, but you could do (setf (array-of-3 foo) (array-of-3 bar))
<aeth>
So setf that take in multiple values are the natural counterpart to functions that return multiple values
quazimodo has quit [Ping timeout: 240 seconds]
brettgilio has joined #lisp
mathrick has quit [Ping timeout: 276 seconds]
warex has joined #lisp
gector has quit [Ping timeout: 244 seconds]
fikka has joined #lisp
mathrick has joined #lisp
<razzy>
.help
<pjb>
tell us more.
<pjb>
Are you drowning? (where?) Are you lost? (what is it like around you? where do you want to go?) What?
zfree has quit [Quit: zfree]
<aeth>
🐊 or 🦈?
<pjb>
If you're in a opening airlock to the empty space, don't hold your breath (literally). You've got 30 s to 3 mn for a spaceship to appear and catch you.
fikka has quit [Ping timeout: 240 seconds]
Bike has quit [Ping timeout: 252 seconds]
astalla has joined #lisp
<pjb>
clall -r '(map (quote list) (function char-name) "🐊 or 🦈?")' # and the winner is clisp again. x years old, but it still knows the latest unicode!
<aeth>
SBCL knows the names too
<pjb>
Nope. It needs to be upgraded. my version doesn't know #\shark
<aeth>
sorry, I assumed it was a copy and paste error because my emacs doesn't know that character
<aeth>
you're right
<aeth>
Someone needs to inform the people at #sbcl that SBCL cannot currently identify sharks
<aeth>
I think we can assume that razzy didn't get help in time in either case, though.
fikka has joined #lisp
<pjb>
Perhaps the Heart of Gold caught him. Since that seems highly improbable…
<pjb>
You're missing some verbs. But I guess you'd like com.informatimago.common-lisp.lisp-sexp
<AeroNotix>
pjb: which verbs am I missing?
<pjb>
I fail to see how "to author" can be the verb for "a library" so…
<AeroNotix>
did you understand what I meant?
<AeroNotix>
I've been ill in bed for two days
<pjb>
I guessed.
<pjb>
That's a good explaination :-)
<pjb>
Take care!
lnostdal has joined #lisp
pierpal has quit [Quit: Poof]
<pjb>
in com.informatimago.common-lisp.lisp-sexp.source-form there's a lambda-list parser, a body extractor (docstring, declarations, body).
pierpal has joined #lisp
<jasom>
AeroNotix: alexandria has some
<jasom>
AeroNotix: note that properly doing code walking is non-trivial and requires implementation-specific code.
<AeroNotix>
jasom: yeah just finished reading the alexandria macros.lisp code. Doesn't have really what I need
<AeroNotix>
no bother
<pjb>
Actually, the only implementation that I know that requires implementation-specific code is sbcl, since it has some standard macro expanding to a non-standard special operator without a macro expanding to only standard special operators.
<pjb>
This can be easily circumvented, by providing a set of standard CL macros expanding only to standard special operators.
<pjb>
Have a look at cl-stepper.
Bike has joined #lisp
<AeroNotix>
Okay, looking+reading
slyrus1 has quit [Quit: slyrus1]
slyrus1 has joined #lisp
rumbler31 has joined #lisp
warex has quit [Ping timeout: 252 seconds]
<jasom>
pjb: don't most implementations do non-standard expansions for quasiquotation?
<jasom>
nevermind, that won't include special forms I think, but rather functions
<pjb>
They can only expand to functions or standard special operators (or macros that expand ultimately to that).
<pjb>
The meaning of the subforms is given by those functions and special operators in this ultimate expansion.
<jasom>
I just remember that being an issue for e.g. pattern matching libraries, but those don't just need to walk the code, they need to know the semantics of the expansions.
Xach has quit [Ping timeout: 244 seconds]
<pjb>
If you have a subform v, and the expansion is (let (v) (+ v 42)) then you can know that v is a variable. If the expansion is (tagbody (go v) v) then you know that v is a tagbody label. etc.
<pjb>
If the expansion contains an expression (v 42), then you can know that v must be the name of an operator.
pierpal has quit [Ping timeout: 245 seconds]
lumm has quit [Quit: lumm]
Oladon has quit [Quit: Leaving.]
azimut has quit [Ping timeout: 252 seconds]
azimut has joined #lisp
fikka has quit [Ping timeout: 252 seconds]
rumbler31 has quit [Remote host closed the connection]