meepdeew has quit [Remote host closed the connection]
siraben has quit [Quit: ERC (IRC client for Emacs 26.1)]
Inline has quit [Read error: Connection reset by peer]
Inline has joined #lisp
siraben has joined #lisp
wanz has joined #lisp
wanz has quit [Remote host closed the connection]
Josh_2 has quit [Quit: ERC (IRC client for Emacs 26.1)]
Oladon has quit [Quit: Leaving.]
rotty has quit [Ping timeout: 252 seconds]
siraben has quit [Quit: ERC (IRC client for Emacs 26.1)]
dddddd has quit [Remote host closed the connection]
rumbler31 has joined #lisp
rumbler31 has quit [Ping timeout: 246 seconds]
siraben has joined #lisp
smokeink has joined #lisp
siraben has quit [Client Quit]
siraben has joined #lisp
robotoad has joined #lisp
siraben has quit [Remote host closed the connection]
siraben has joined #lisp
rotty has joined #lisp
esrse has joined #lisp
semz has quit [Ping timeout: 250 seconds]
siraben has quit [Read error: Connection reset by peer]
kyby64 has quit [Quit: Leaving]
robotoad has quit [Quit: robotoad]
themsay has quit [Quit: Quit]
themsay has joined #lisp
wilfredh has quit [Quit: Connection closed for inactivity]
warweasle has quit [Quit: night all]
_whitelogger has joined #lisp
rumbler31 has joined #lisp
rumbler31 has quit [Ping timeout: 246 seconds]
robotoad has joined #lisp
Arcaelyx has quit [Ping timeout: 276 seconds]
Cymew has joined #lisp
<beach>
Good morning everyone!
Cymew has quit [Ping timeout: 252 seconds]
themsay has quit [Ping timeout: 244 seconds]
Oladon has joined #lisp
Cymew has joined #lisp
ealfonso has quit [Disconnected by services]
ealfonso` has joined #lisp
ealfonso has joined #lisp
<ealfonso`>
I want to mock a function like drakma:http-request within a unit test. Can I use flet? It seems that the scope of my flet binding is lexical, can I make it dynamic?
<beach>
oni-on-ion: FDEFINITION rather than FUNCTION.
Cymew has joined #lisp
<oni-on-ion>
ah ty! i was scrolling up feeling certain i seen something else in use #here very recently
<beach>
ealfonso`: Yes, there is no standard way of creating a function with dynamic extent. If you do it with a macro that changes the FDEFINITION, then make sure you have an UNWIND-PROTECT that sets it back.
<ealfonso`>
oni-on-ion beach Thanks
Cymew has quit [Ping timeout: 272 seconds]
Cymew has joined #lisp
<loke>
oni-on-ion: Also note that you really don't want to be running more than one thread while doing that trick.
<loke>
Setting the FDEFINITION of a function is not thread-safe, I don't think.
<loke>
(also, it will impact globally)
<oni-on-ion>
ah! good to know. set'fing fdefs is something i would do
<oni-on-ion>
i'd feel more comfortable doing one lisp image per OS thread
Cymew has quit [Ping timeout: 268 seconds]
<loke>
oni-on-ion: You can implement it by having a single constant replaced version of the function in question, and you setf the fdefinition of it in the beginning. Then, inside that function you check a thread-local binding of a variable that indicates which version you want and if it's unset, just forward the call to the real (original) version.
slightlycyborg has joined #lisp
<loke>
That way you can make your reassignment thread-local.
<beach>
Clever.
Cymew has joined #lisp
<loke>
I just remembered I did something similar in Climaxima when I want to change the behaviour of some internal Maxima functions
arescorpio has quit [Remote host closed the connection]
Cymew has quit [Ping timeout: 245 seconds]
Cymew has joined #lisp
meepdeew has joined #lisp
Cymew has quit [Ping timeout: 268 seconds]
anewuser has quit [Quit: anewuser]
meepdeew has quit [Remote host closed the connection]
dented42 has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
Bike has quit [Quit: Lost terminal]
Guest13389 has quit [Ping timeout: 268 seconds]
hh47 has joined #lisp
robotoad has quit [Read error: Connection reset by peer]
Oladon has quit [Quit: Leaving.]
hh47 has quit [Client Quit]
robotoad has joined #lisp
slyrus1 has joined #lisp
igemnace has quit [Quit: WeeChat 2.2]
DecimPrime has joined #lisp
<DecimPrime>
has anyone read HTDP?
<beach>
No, but it looks like I should.
<beach>
DecimPrime: Though, people here are less likely to read that book than they are to read books like PAIP, AMOP etc., since this channel is dedicated to Common Lisp.
Guest13389 has joined #lisp
<DecimPrime>
beach: hah. ahh i see. i'm mostly using clojure but i just heard it was great for learning how to break down and solve problems so i'm going to look through it
<beach>
I look forward to your report. :)
<DecimPrime>
lol will do
<DecimPrime>
i have PAIP as well. at some point i'll get to it
<DecimPrime>
actually that will be nex
<DecimPrime>
next*
<beach>
DecimPrime: I am guessing the Scheme books are more for beginners.
<beach>
DecimPrime: And I am guessing the advocate a more "pure" style of programming, like more functional programming, more recursion, etc.
<beach>
The Common Lisp books are typically more pragmatic. And modern Common Lisp uses object-oriented programming (using CLOS) a lot.
nowhere_man has quit [Ping timeout: 260 seconds]
<beach>
I say this without having read "How To Design Programs", of course. So just guessing.
<no-defun-allowed>
I'm going to try and write a simple genetic development algorithm today.
<no-defun-allowed>
I want to find some inputs to imagemagick that will help me clean up captchas to give to tesseract-ocr. They have added noise that needs to be filtered out.
<oni-on-ion>
i was just reading about the first FPGA chips and how they were 'evolved' (1960s)
aindilis has quit [Remote host closed the connection]
<jcowan>
beach: HDTP teaches elementary computer *programming*, whereas SICP teaches elementary computer *science*. Both of them use Scheme because of its simplicity and closeness to mathematical notation.
theemacsshibe has joined #lisp
<theemacsshibe>
hi, no-defun-allowed here
aindilis has joined #lisp
msb has quit [Ping timeout: 252 seconds]
msb has joined #lisp
<theemacsshibe>
god damn freenode cloaks sound hard to get
<jcowan>
(Neither book is intended to teach Scheme.)
<theemacsshibe>
yes, neither HTDP and SICP go into much scheme past what is necessary
dented42 has joined #lisp
<beach>
jcowan: I see, yes.
msb has quit [Ping timeout: 252 seconds]
<beach>
jcowan: Still, my guess is that the programming style is going to be influenced by the convictions of the authors. But I should quit guessing and read the book instead.
<theemacsshibe>
for example, call-cc and macros aren't touched on since they don't really do much for the first few chapters
<jcowan>
Well, certainly. Indeed, I know of no textbooks whatsoever that are not influenced by the convictions of their authors1
<jcowan>
s/1/!
<theemacsshibe>
SICP taught me a lot about lisp. it's a very dense book.
<theemacsshibe>
MIT released recordings of the relevant lectures, too. each is an hour long in three 20-minute segments.
msb has joined #lisp
<DecimPrime>
jcowan: i see. i had and liked what i read of SICP. someone stole my book. i'll have to finish it off later on.
<DecimPrime>
jcowan: but you'd say HDTP as far as getting comfortable getting things done
<jcowan>
Again, it's about *elementary* programming. The authors found that SICP gave insufficient attention to the problem of learning to produce a formalism that represents an informal intention.
<DecimPrime>
ok...i'll read both
<jcowan>
It's analogous to the problem of figuring out proofs of theorems in geometry.
<beach>
I am no longer sure what the best way is to teach introductory programming.
<jcowan>
Elementary geometry courses teach geometry, but leave finding proofs to intuition.
<DecimPrime>
i've toyed with several languages...self taught but never got into meat of completing something. largely because i felt i've missed out on breaking things apart...which lisp in its self has helped out a lot with
<jcowan>
which is kind of like teaching singing by saying "Sing!" and then trying to help the people who sing -- it does nothing for the people who don't.
<beach>
There are a certain number of books that claim to do that, but in fact, many of them are hailed by colleagues with decades of experience as being exactly what is needed, but they make no sense whatsoever to the intended audience.
<DecimPrime>
hmm good way of putting it
<jcowan>
I am not necessarily defending HTDP, as I have not read it either, just explaining what I understand its purpose to be.
<DecimPrime>
that seems to be about what i'm aiming for
smokeink has quit [Remote host closed the connection]
<beach>
jcowan: Math is taught the same way. Students are shown lots of proofs, but no way of coming up with their own. They are supposed to generalize from examples.
smokeink has joined #lisp
<jcowan>
I very much like Polya's _How to solve it_ in this connection
smokeink has quit [Remote host closed the connection]
<DecimPrime>
oh yeah? i have that on my list of books to buy
<jcowan>
I am also reminded of my one-week course in ODEs during my first calculus class
smokeink has joined #lisp
<jcowan>
It went something like this:
<beach>
minion: What does ODE stand for?
<minion>
Ostracum Dom Endocervicitis
<jcowan>
Ordinary differential equations
<beach>
Thanks.
<jcowan>
"The first and best way to solve ODEs is to guess the answer and see if it's right. If this fails, integrate both sides if you know how. Otherwise go to the Taylor expansion. If you can't solve it by any of these means, you probably can't solve it at all."
DGASAU has joined #lisp
Roy_Fokker has quit [Read error: Connection reset by peer]
<DecimPrime>
hmm
<slightlycyborg>
Do you know of anyone wanting to hire a junior CL programmer?
shifty has quit [Ping timeout: 252 seconds]
robotoad has quit [Max SendQ exceeded]
ryan_vw has quit [Ping timeout: 244 seconds]
<oni-on-ion>
ehe
igemnace has joined #lisp
dale_ has joined #lisp
dale_ is now known as dale
zfree has joined #lisp
robotoad has joined #lisp
<theemacsshibe>
yay my genetic algorithm is working!
theemacsshibe has quit [Quit: leaving]
<no-defun-allowed>
unfortunately it seems my combination of tesseract and imagemagick switches only gets 2/5 chars right
<lucca>
There are more techniques for integration than grains of sand in all the beaches of all the worlds of the galaxy. Finding them is left as an exercise for the reader.
<beach>
Perhaps some people will think I am less crazy for suggesting CLOSOS when they see that even very famous people think that it's a good idea to attempt to create new operating systems.
<LdBeth>
I just read about IBM’s M44 virtual machine approach
frgo has joined #lisp
frgo has quit [Remote host closed the connection]
frgo has joined #lisp
<LdBeth>
Which is about running multiple virtual machine while sharing resources
<beach>
There was a lot of innovation back then, and, as Rob Pike admits, Unix killed all innovation.
asarch has quit [Quit: Leaving]
<DecimPrime>
funny you all are more active than #clojure
<beach>
Funny?
varjag has joined #lisp
<DecimPrime>
=P well CL has been around for much longer. but still yes suprised it's so lively at this hour
<beach>
It slows down during the weekend. I suspect many people here have a real life as well.
<jdz>
People have been around planet earth, and it's indeed funny how they're still active.
<jackdaniel>
DecimPrime: it could be because world doesn't have only one timezone
<DecimPrime>
nah thats not it...lol
<DecimPrime>
i have insomnia so i like to talk to people fom europe etc...they're up but still not as lively in certain rooms
<jackdaniel>
you mean, that there is universal hour people are active all around the globe?
<DecimPrime>
i mean i'm awake 20 hours and on all throughout the day
<DecimPrime>
i'm univesal to everyones time zone lol
<beach>
DecimPrime: #lisp is know to be active, and also very helpful, even to newbies (provided they take the advice they are given).
<jackdaniel>
that's unhealthy, you should reconsider such short sleep hours
<DecimPrime>
beach: so i've heard
<DecimPrime>
jackdaniel: yeah
ringer1 has quit [Ping timeout: 272 seconds]
angavrilov has joined #lisp
hhdave has joined #lisp
mjanssen has joined #lisp
heisig has joined #lisp
themsay has joined #lisp
earl-ducaine has quit [Read error: Connection reset by peer]
nirved has joined #lisp
xificurC has joined #lisp
hhdave has quit [Ping timeout: 252 seconds]
themsay has quit [Ping timeout: 260 seconds]
asymptotically has joined #lisp
xvx has joined #lisp
robotoad_ has quit [Quit: robotoad_]
orivej has joined #lisp
nowhere_man has joined #lisp
zfree has joined #lisp
lnostdal has quit [Read error: Connection reset by peer]
xvx has quit [Quit: xvx]
mejja has quit []
orivej has quit [Ping timeout: 252 seconds]
orivej has joined #lisp
<shka_>
yo
<shka_>
is there anything already to work with parquet files in cl?
anewuser has joined #lisp
Lycurgus has quit [Quit: Exeunt]
nowhere_man has quit [Remote host closed the connection]
nowhere_man has joined #lisp
sword has quit [Remote host closed the connection]
<loke>
shka_: what's that?
<shka_>
loke: binary format used to store big data on hdfs
<flip214>
shrdlu68: please provide patches to sbcl-devel!
xlt has left #lisp [#lisp]
<flip214>
is anybody using uLisp on a ESP8266 CH340G (NodeMCU v3)?
spal is now known as susampal
susampal is now known as spal
Josh_2 has joined #lisp
SaganMan has joined #lisp
spal is now known as susampal
<jcowan>
beach: I may have mentioned this before, but a good object store should have knowledge of which properties subsume which other properties, which allows the easy recovery of flexible hierarchies.
susampal is now known as susam
susam is now known as spal
Bike has joined #lisp
shifty has quit [Ping timeout: 245 seconds]
<beach>
jcowan: Makes sense. Sounds like inheritance to me.
<jcowan>
Indeed
<jcowan>
There is a filesystem that works like this called, I think, LPFS
<beach>
Oh, OK.
<beach>
The object store for CLOSOS is still very preliminary thinking.
<jcowan>
If property A subsumes property B, then (treating them wlg as binary properties) anything with B but not A is treated as a direct child of B, whereas anything with both A and B is treated as a direct child of A. Posix operations mkdir and rmdir establish and disestablish subsumption.
warweasle has joined #lisp
akovalenko has quit [Read error: Connection reset by peer]
akovalenko has joined #lisp
hhdave has joined #lisp
<jcowan>
(Hmm, that may be wrong; I tend to get A subsumes B and B subsumes A mixed up, but it is correct modulo that.)
<flip214>
jcowan: shouldn't that be "link" and "rm" to create/remove such links?
<jcowan>
no
<jcowan>
there are no links as such in this system
<jcowan>
not that there is anything wrong with links, the idea is to make a directory structure fall out of the meta-information about properties
Arcaelyx has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
frodef has quit [Ping timeout: 250 seconds]
<jcowan>
if we are examining the contributors to a paper using our object store, then we see all the contributors listed under the node "contributor". If we then add the information that Alice and Bob are authors, Charlie is an editor, and we do not know what kind of contributor Dave is, we will see three parallel nodes 'author', 'editor', contributor', whose children are Alice + Bob, Charlie, Alice + Bob + Charlie + Dave respectively.
<jcowan>
But if we now add the metainformation that author and editor are subproperties of contributor, then things change: under contributor we still see Dave, but we also see subdirectories author and editor.
<jcowan>
which are no longer direct children of the paper
<flip214>
jcowan: I meant the "links" not as in filesystem links, but as parent-child relationships; you wrote "mkdir" and "rmdir" operations, but don't see how "mkdir" can register a connection between two already existing things
smokeink has quit [Ping timeout: 260 seconds]
nowhere_man has joined #lisp
Inline has quit [Remote host closed the connection]
asymptotically2 has joined #lisp
<jcowan>
The effect of mkdir(A, B) is that directory B becomes a child of directory A. The fact that a directory cannot be the child of more than one directory is due to the problems early Unix encountered with an arbitrary directory graph (it needs memory to traverse and potentially a garbage collector to eliminate or restore closed loops).
<jcowan>
These issues are now pushed off onto the batch tool fsck, but in a Lisp OS they should be and are an inherent part of the system.
asymptotically has quit [Disconnected by services]
asymptotically2 is now known as asymptotically
<jcowan>
Likewise, rmdir removes the parent-child relationship between two directories, and only destroys the former child because it knows that there is no other parent.
<jcowan>
In a general subproperty graph this is not true.
semz has joined #lisp
<flip214>
jcowan: yeah, but your example had _preexisting_ things - contributor and author - and for that _my_ view would be "link author contributor/" to establish an "is a" relationship
<jcowan>
Properties are lightweight: there is no reason to distinguish between creation and reuse.
<jcowan>
Something I am shoving under the rug is that Posix file graphs have named edges, whereas this one has named nodes. However, people almost always treat Posix files as if they had names.
<jcowan>
(a property is fundamentally just a symbol)
<jcowan>
s/names/absolute names
Inline has joined #lisp
<shrdlu68>
What is the use of declaration ftype?
rumbler31 has joined #lisp
<Bike>
declaring the types of functions
<shrdlu68>
is it different from type declaration of function arguments?
<Bike>
yes. declaring the types of arguments in a function tells the compiler what those variables in the function body will be. declaring the type of a function tells the compiler what the types of inputs to and outputs from a function call are.
<shrdlu68>
Does one need type declarations for arguments if there's an ftype declaration?
rumbler31 has quit [Ping timeout: 252 seconds]
<Bike>
an implementation might use one for the other. i think sbcl does.
<shrdlu68>
Would ftype declaration make a difference if the function is inlined?
<Bike>
it could sure
<flip214>
jcowan: CLOSOS talks about attributes, which have a value
trittweiler has quit [Ping timeout: 252 seconds]
sword has joined #lisp
frodef has joined #lisp
kajo has quit [Quit: From my rotting body, flowers shall grow and I am in them and that is eternity. -- E. M.]
_whitelogger has joined #lisp
maarhart has joined #lisp
Cymew has quit [Remote host closed the connection]
<LdBeth>
Interesting, I thought object oriented access control was a new idea
sjl has joined #lisp
<LdBeth>
But I never knew someone had a patent on it
FreeBirdLjj has quit [Remote host closed the connection]
maarhart has joined #lisp
milanj has joined #lisp
<jcowan>
flip214: attributes = propertiesf
<splittist>
LdBeth: if it was filed in 1997 won't it have expired?
<jcowan>
yes, unless there is a submarine patent for some minor extension
<shka_>
good evening
maarhart has quit [Ping timeout: 252 seconds]
cage_ has joined #lisp
nixfreak has quit [Ping timeout: 256 seconds]
billstclair has joined #lisp
nowhere_man has joined #lisp
fikka has quit [Ping timeout: 252 seconds]
fikka has joined #lisp
<beach>
Hello shka_.
nowhere_man has quit [Ping timeout: 252 seconds]
hhdave has quit [Ping timeout: 245 seconds]
frgo has quit [Remote host closed the connection]
frgo has joined #lisp
<frodef>
'evening
fikka has quit [Ping timeout: 244 seconds]
<beach>
Hello frodef. Ju just showed up when my (admittedly small) family announced that dinner is ready.
<frodef>
bon appetit!
frgo has quit [Read error: No route to host]
pjb has joined #lisp
LiamH has joined #lisp
varjag has joined #lisp
Copenhagen_Bram has quit [Ping timeout: 246 seconds]
snits has joined #lisp
<LdBeth>
splittist: that’s a good news
<LdBeth>
beach: what do you think about integrating object oriented access control? The basic principle is given here http://www.object-oriented-security.org
Copenhagen_Bram has joined #lisp
slac-in-the-box has quit [Quit: leaving]
xvx has joined #lisp
scymtym has quit [Ping timeout: 252 seconds]
fikka has joined #lisp
LiamH has left #lisp [#lisp]
xvx has quit [Read error: Connection reset by peer]
<shka_>
i have other object, it full fills the same protocol, but it happens to have file that should be closed
<shka_>
i have functions that create proxy objects
<shka_>
now i lost way to close my file, because proxy can't implement every possible functions
<shka_>
i have the following solutions in mind
scymtym has joined #lisp
<shka_>
1) add auto forwarding into proxy (default implementation of generic function will call something like pass-along with it's arguments and the right function so proxy won't have to be bothered with it)
<shka_>
2) some sort of taint (everything that touches file object produces proxy object that also will be file object
<shka_>
)
<shka_>
which one looks better to you guys?
<LdBeth>
I would avoid 2
<shka_>
LdBeth: care to explain why?
<LdBeth>
Don’t create things you don’t need. ;)
<shka_>
that's fair point
Volt_ has joined #lisp
<shka_>
well, i personally prefer 1 anyway
vtomole has quit [Quit: Page closed]
angavrilov has quit [Remote host closed the connection]
jkordani has joined #lisp
dented42 has joined #lisp
meepdeew has joined #lisp
dented42 has quit [Client Quit]
dented42 has joined #lisp
makomo has joined #lisp
varjag has joined #lisp
<frodef>
LdBeth: not much to read on that "OO security" site..
dented42 has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
orivej has quit [Ping timeout: 246 seconds]
Essadon has joined #lisp
<frodef>
..if security is based on "having a references implies having permission", you need to know how to prevent attackers from guessing/construction references.
vlatkoB_ has quit [Remote host closed the connection]
<jcowan>
well, it depends; if security depends on guessing a well-chosen random number of sufficient bits, then probabilistically it is secure, though someone could land on the number by sheer chance
Jesin has quit [Quit: Leaving]
<frodef>
jcowan: "guessing" in all likelihood means some heuristics that includes scanning all available memory.
sjl has quit [Ping timeout: 260 seconds]
fikka has quit [Ping timeout: 250 seconds]
warweasle has quit [Quit: rcirc on GNU Emacs 24.4.1]
sjl has joined #lisp
rozenglass has joined #lisp
milanj has quit [Quit: This computer has gone to sleep]
didi has joined #lisp
<jcowan>
Well, yes, if you have access to memory below the object level, then of course there is no security. That's like saying "I can open any lock if I can scan all the keys in the world to get their shapes."
<frodef>
Well, if you don
<didi>
I need ideas on how to deal with symbols from other packages. I dislike prefixing symbols with their packages, but some packages define symbols with the same name, so I can't import them all.
<frodef>
't have access "below object level" then you have some other security mechanism..
<frodef>
didi: IMPORT-FROM ?
<didi>
frodef: Indeed. But what if two different packages define the same name of a symbol?
Achylles has joined #lisp
<frodef>
didi: define-symbol-macro ?
<frodef>
..could be used to make symbol "aliases", I suppose?
<didi>
frodef: Maybe `define-symbol-macro'? I don't know it.
<didi>
frodef: Thank you.
<didi>
What about (setf (symbol-function foo) package:foo)?
<didi>
Well, more like (setf (symbol-function bar) package:foo) because supposedly I already have a FOO inside.
Cymew has joined #lisp
<didi>
Or maybe I can shorten package names?
m3tti has quit [Remote host closed the connection]
m3tti has joined #lisp
n3k0_t has quit [Ping timeout: 250 seconds]
<frodef>
didi: that means importing a function object, not really a symbol as such. It won
<frodef>
't work for macros, compiler-macros, varibables, etc.
<didi>
frodef: Hum.
<frodef>
(new keyboard, sorry)
<didi>
Shame! /me rings bell
Cymew has quit [Ping timeout: 276 seconds]
<didi>
Maybe I can rename packages?
<didi>
So really.long.package.name:function turns to rlpn:function.
<jcowan>
Adding a nickname would probably be better
<dlowe>
so that qualification isn't as much of a burden
<pjb>
(com.informatimago.life.play.hu-dada-play:name *daddy*) (com.informatimago.life.etat-civil.usa:name *daddy*) -> "John Wayne" etc.
<White_Flame>
pjb: have you find that anybody else uses the java-style package naming, or is it pretty much only informatimago?
<pjb>
There are several others.
<pjb>
I understand americans are handicaped with long words… Not so much in Europe.
shka_ has quit [Ping timeout: 245 seconds]
m3tti has quit [Ping timeout: 272 seconds]
<pjb>
I could have created the domain name com.man.who.do.tricks.of.act.of.riting.text.for.thing.that.add.things.used.to.count.life.play.…
<pjb>
Ah, perhaps not.
knicklux has joined #lisp
<pjb>
that said, I never had a name collision, contrarly to authors (more than 2!) of clon…
themsay has joined #lisp
<no-defun-allowed>
Good morning
<didi>
Hum. Nicknames seems like a good compromise.
<didi>
Thank you all.
milanj has joined #lisp
ggole has quit [Remote host closed the connection]
mejja has joined #lisp
<LdBeth>
I guess to use the java style naming first one needs to own a domain
mn3m has joined #lisp
<LdBeth>
frodef: if you mean binary level security, you can do exploit to UNX style ACL too, but ACL is centralized and object oriented access control is distributed in memory, so in that case it still has superior security level
rippa has quit [Quit: {#`%${%&`+'${`%&NO CARRIER]
<LdBeth>
Not to mention the memory randomize technique widely used today
<aeth>
Idk, long packages are very inconvenient at the REPL. I know because I have a bunch of long package names
cage_ has quit [Quit: Leaving]
<aeth>
And the worst part is that tab completion doesn't help much because the packages are hierarchical based on the directory structure.
<aeth>
It looks like my longest is 40 characters long.
<no-defun-allowed>
SLIME's prompt splits the name on the last dot, so VEP.CPU becomes CPU
<no-defun-allowed>
That kind of mechanism would make a good autocomplete/expand target
<aeth>
Unfortunately, they don't do that for /s
<aeth>
ASDF gets mad if you don't use /s iirc
<aeth>
foo/bar/baz as the package for foo/bar/baz.lisp (or for foo/bar/baz/package.lisp depending on your conventions)
Selwyn has joined #lisp
<Shinmera>
package-inferred-systems are bad for that, and several other reasons.
<aeth>
They're not that bad, I just have the style rule that you can :use cl and any other internal-to-the-project package.
orivej has joined #lisp
<aeth>
Then it's only annoying when you want to e.g. (disassemble #'foobar-baz/some-dir/some-file::private-function) from the REPL
<aeth>
Although if you're doing that often enough it's probably best to just switch into that file's package.
<Shinmera>
they're bad because they conflate public interface (packages) with internal structure (files)
<aeth>
The packages don't have to be the actually public interface. That's only if you :use-reexport via uiop:define-package
<aeth>
You could have an "internal" file/package by simply using it in the uiop:define-package instead of use-rexporting it afaik
<Shinmera>
tying packages to files is a bad idea no matter what.
<Shinmera>
because it conflates two concepts
Roy_Fokker has joined #lisp
xificurC has joined #lisp
<aeth>
It depends on the size of the project. I wouldn't want to work in any very large project that did *not* use package-inferred-system, but it's probably overkill if the project fits into a single (reasonable) directory (obviously any project can be in one directory).
<Shinmera>
Well I would not want to work with any system that uses p-i-s ever.
<aeth>
Once you get to very many directories and very many files, the lines get blurred. At that point, it's pretty convenient to just be able to load the system zombie-raptor/math or zombie-raptor/util
<aeth>
Could those be spun off into their own separate projects? Maybe. But they didn't start that way.
<aeth>
Having a directory package and system is very convenient for very large projects. The thing about CL is that there aren't many very large projects.
<Shinmera>
I have several very large projects and I especially see p-i-s as a tremendously bad thing for those
mn3m has quit [Quit: mn3m]
mejja has quit [Quit: mejja]
<aeth>
I'd hate to have to try to maintain a project where there are dozens of .lisp files at the top level working in one package. The relationship between the files would be incredibly unclear.
* didi
hides his projects from aeth
mn3m has joined #lisp
<Shinmera>
That's because the files represent internal structure, not relations.
<aeth>
I would much rather have the exports from a given file at the top of the file. Yes, there would be issues if foo.lisp exports some things only for other files and some things for the global package. But if that's necessary, that file alone could be special cased in the main package's export list. Everything else would just be :use-reexport
<Shinmera>
Again, the internal structure does not reflect the external interface
rumbler31 has quit [Remote host closed the connection]
<aeth>
But files themselves can have external interfaces that are internal from the perspective of the main package and system!
<aeth>
You don't have to :use-reexport everything!
<Shinmera>
I never said one had to
stereosphere has joined #lisp
<Shinmera>
Packages are a global, public interface. There are no anonymous or internal packages.
<aeth>
That's a convention.
<Shinmera>
No, that's a fact
<Shinmera>
Tying them to files means you lose the ability to use multiple files that would allow you to structure your internal mechanisms more apropriately compared to the visible interface
milanj has quit [Quit: Leaving]
jmercouris has joined #lisp
<aeth>
If you want to use my game engine as a unit, use zombie-raptor. If you want to use my math system as a unit, use zombie-raptor/math, if you want to use my vectors as a unit use zombie-raptor/math/vector. But everything in zombie-raptor/math/vector doesn't have to be part of the interface of zombie-raptor/math or zombie-raptor (although in that case, it probably makes sense that they are)
<Shinmera>
If they're separate libraries then make them actually separate libraries. This is not an argument for anything.
<aeth>
They're not necessarily separate libraries. Consider zombie-raptor/data/generate-glsl, which generates GLSL strings from s-expressions. This is very closely tied to zombie-raptor/data/shader. If I wanted to (and I probably should), only zombie-raptor/data/shader needs the full access to the exports of zombie-raptor/data/generate-glsl so zombie-raptor/data should only export a few symbols from zombie-raptor/data/generate-glsl.
shifty has joined #lisp
<aeth>
And since zombie-raptor/all use-reexports from zombie-raptor/data, it would also only export a few symbols from that file.
<jmercouris>
aeth: are these all part off the same project/folder? why not break them apart
<jmercouris>
I've noticed some older lispers have massive systems and images that have grown, why this tendency?
<didi>
I keep adding utility functions to my system.
edgar-rft has joined #lisp
<aeth>
jmercouris: Why break it apart, though? A massive project's a massive project, and it's incredibly modular as it is even though it's all one project. And I try to keep it small! My game engine doesn't even load textures, it just assumes the user loads or generates textures in a compatible format.
<jmercouris>
aeth: No reason to break it apart, I'm actually asking a different question, "when should I break something apart into a library"?
fikka has joined #lisp
<aeth>
jmercouris: If you use package-inferred-system then there is basically no difference between a directory and a library. I can just (ql:quickload :zombie-raptor/math) and only load that. Most of my projects use zombie-raptor/util at this point.
<aeth>
In that case, the time to break something apart is when you wind up using just that part everywhere, like I'm doing with my util directory. Except, unfortunately, it's not all generally useful so I'd have to move out only the generally useful parts.
<jmercouris>
interesting thoughts
<jmercouris>
I've been also thinking about breaking apart many of my util functions from one of my caveman projects and turning it into a new system
<aeth>
jmercouris: But even if you don't use p-i-s, the time to break something apart is when you want to use Foo/Bar elsewhere half a dozen times but don't care about the rest of Foo.
warweasle has joined #lisp
<aeth>
Math, DSL, and util parts are probably the most likely to be useful elsewhere
<aeth>
But, going back to the separate libraries thing, the problem is that the directories aren't really independent from each other in my game engine. Most assume certain parts of the engine, just different parts. Only zombie-raptor/util has (by design) 0 dependencies from other directories.
<aeth>
If I spun off zombie-raptor/math I'd have to spin off zombie-raptor/util first. And most of the rest would be considerably more complicated than that.
Volt_ has quit [Quit: exit();]
<jmercouris>
I see
<aeth>
I actually wonder if I did the wrong thing by starting at zombie-raptor
<jmercouris>
you don't like the name?
<aeth>
I probably should just put everything in one giant monorepo
<aeth>
everything/zombie-raptor/util
<aeth>
Then it would be a lot easier to move util to everything/util
<jmercouris>
Oh, I see what you mean
<aeth>
Having separate repos make me hestiate way more than I should to split things into their own projects
<aeth>
With a monorepo there'd be no hestiation to split
Copenhagen_Bram has quit [Read error: Connection reset by peer]
<_death>
you can use git-subtree
<aeth>
of course, if I had a monorepo I'd probably be thinking about how great it would be to have separate repos
<aeth>
_death: does it preserve history, though?
<_death>
yes
<aeth>
interesting
<oni-on-ion>
i chose monorepo and i still feel better about it
<aeth>
because the issue is moving all-my-cl-projects/foo/bar into all-my-cl-projects/bar and losing all the history from when it was foo/bar
<aeth>
Probably not the biggest deal since the original repo is still there, but a bit problematic
asymptotically has quit [Quit: Leaving]
<aeth>
Shinmera: You have hundreds of projects. Do you ever deal with splitting A/B from project A into a new project B?
quazimodo has quit [Ping timeout: 272 seconds]
quazimodo has joined #lisp
Copenhagen_Bram has joined #lisp
Jesin has joined #lisp
meepdeew has quit [Remote host closed the connection]
<_death>
I have a snippets repository, which contains hundreds of small (usually <500loc) programs.. for that package-inferred-systems works well..
knicklux has quit [Remote host closed the connection]
<_death>
when a program gets big enough, or too useful, I pull it out into its own project
dented42 has joined #lisp
<_death>
some snippets depend on other snippets, and that's no problem.. non-snippet projects should not depend on snippets though
LiamH has quit [Quit: Leaving.]
relaxed has quit [Quit: ⠠⠵]
Bike has quit [Ping timeout: 256 seconds]
<Shinmera>
aeth: Sure, it has happened. Though typically I plan my projects in such a way that I write the libraries first and they're already separate as a result.
lnostdal has joined #lisp
dented42 has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
rumbler31 has joined #lisp
<sjl>
git subtree can split a subdirectory into its own repository (preserving history) really easily. If the thing you're trying to split isn't isolated to one directory (e.g. it has a .asd file at the monorepo root) you'll have to use git filter-branch, which is less friendly.
<aeth>
sjl: With package-inferred-system the system definition is implicit
<sjl>
I thought you still needed a system definition with that? I thought it was just useful for not having to list out the :components?
<sjl>
I might be wrong, I've never really used it much.
<sjl>
meeting, brb
relaxed has joined #lisp
<aeth>
iirc what winds up being the most convenient is having a foo.lisp for every directory foo that consists of a package that uses every file in foo. Then you get foobar/foo in addition to foobar/foo/bar and foobar/foo/baz
<aeth>
(You also want to use CL so you can in-package, but that's not required)
<_death>
I also have a site "monorepo", which contains multiple services.. for that package-inferred-systems works well too. in simple "library" projects, package-inferred-systems has less advantage, and so some use it and others do not.
varjag has quit [Ping timeout: 246 seconds]
<aeth>
If it fits in / or /src/ then it's overkill
fikka has quit [Ping timeout: 272 seconds]
<_death>
most of my repositories are flat or have few directories
<_death>
I do have a repository called "sehnsucht" with old ass projects from 20-10 years ago, with each having its own dir :D
<_death>
but I don't really touch that
<oni-on-ion>
im actively cleaning up my garbage .. trying to
<jcowan>
ldbeth: you can fall back in the Java convention from a domain to an email address: org.ccil.cowan is what I use, reflecting my email cowan@ccil.org
<oni-on-ion>
going to put all 'old' projects into an 'attic' and freeze it. bringing current stuff more to the forefront
Achylles has quit [Remote host closed the connection]
robotoad has quit [Quit: robotoad]
robotoad has joined #lisp
dented42 has joined #lisp
Bike has joined #lisp
varjag has joined #lisp
rumbler31 has joined #lisp
rumbler31 has quit [Remote host closed the connection]
<jmercouris>
why do some people use one package per file?
<jmercouris>
Eitaro is a very experienced lisp programmer
<jmercouris>
things like that simply do not happen by accident
xificurC has joined #lisp
<LdBeth>
Cause I believe old lisp books don’t even use a package
<oni-on-ion>
package names are flat, right? so its just convention and almost doesnt matter. i dont think that having a *namespace* problem with actual package names should be a thing.
warweasle has quit [Quit: rcirc on GNU Emacs 24.4.1]
robotoad has quit [Quit: robotoad]
jmercouris has quit [Remote host closed the connection]
_whitelogger has joined #lisp
<no-defun-allowed>
apparently prove works better, i'll try that
<aeth>
I use both prove and fiveam depending on the project. They both have flaws.
<aeth>
I should write my own unit test suite and introduce yet another unit test suite that solves a different 70% of the unit testing problem
<no-defun-allowed>
although where is test in the makefile defined?
dented42 has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
<fe[nl]ix>
aeth: it would be nice if you blogged about the flaws that you see in the two
<aeth>
fe[nl]ix: It's more like they're both incomplete. e.g. prove times your tests so you can see when something is slow, and fiveam supports random testing
<aeth>
fe[nl]ix: prove defaulting to colors in SLIME is *definitely* a flaw, though. I don't think most people have colored output in SLIME, so it makes it look like noise unless you turn it off.
<pjb>
that said, nothing prevents you to name your package in 3D: (make-package "glutSolidTeapot(42)")
didi has quit [Ping timeout: 268 seconds]
warweasle has joined #lisp
<no-defun-allowed>
are there any examples for gitlab ci with common lisp?
<aeth>
pjb: Nope, I can't name my package in 3D: (make-package (make-array '(2 2 2) :element-type 'charcter))
<pjb>
aeth: this is not 3D. 3D is (3).
<aeth>
pjb: It's a 3D string
<pjb>
So "XYZ".
Cymew has joined #lisp
<aeth>
(well, a 3D charcter array... strings aren't in arbitrary dimensions)
<no-defun-allowed>
okay, so i think i'm supposed to write a makefile to run the tests
<aeth>
no-defun-allowed: I thought gitlab ci was a YAML file?
<no-defun-allowed>
good point
<no-defun-allowed>
i have to write a command to run sbcl that loads netfarm-test and runs the tests
Cymew has quit [Ping timeout: 246 seconds]
<no-defun-allowed>
so just to check, can i use LET on dynamic scoped variables like `*debugger-hook*`?
<no-defun-allowed>
yep
kyby64 has quit [Quit: Leaving]
pjb has quit [Ping timeout: 252 seconds]
<no-defun-allowed>
okay let's see if it works
<jasom>
no-defun-allowed: and the binding will be dynamic rather than lexical