ChanServ changed the topic of #picolisp to: PicoLisp language | Channel Log: https://irclog.whitequark.org/picolisp/ | Picolisp latest found at http://www.software-lab.de/down.html | check also http://www.picolisp.com for more information
orivej has joined #picolisp
aw- has joined #picolisp
orivej has quit [Ping timeout: 240 seconds]
orivej has joined #picolisp
<m_mans> Hi all!
<m_mans> let we have 2 classes
<m_mans> (class +Parent +Entity)
_whitelogger has joined #picolisp
<m_mans> relation 'nm is redefined without any index. Should it be excluded from 'nm index of +Parent class? I see that it is still indexed
alexshendi_ has quit [Ping timeout: 240 seconds]
<m_mans> other question: can I use +Alt prefix in several classes with the same relation name pointing to the same class?
<m_mans> e.g. if I want to have one unique index for same relation across several classes not using inheritance
<Regenaxer> Hi m_mans
<Regenaxer> I expect (rel nm (+String)) to be witout index
<Regenaxer> it overshadoes the other class
<Regenaxer> *if* the object is of class +Child
<Regenaxer> And for (2) I would say yes
<Ober> how many active developers are there behind picolisp?
<Regenaxer> What means "active"?
<Regenaxer> m_mans, usually I do it the other way round
<Regenaxer> Have an abstract class +cls
<Regenaxer> and subclasses which define their own versions of the index
<Regenaxer> Then I change the class of an object at runtime with (set! Obj '(+ClsX)) to modify the behavior
<aw-> Ober: hi, a few hundred I assume
<m_mans> is not a bug that 'nm of +Child is indexed?
<Regenaxer> It should not be indexed
<Regenaxer> is it Obj of class +Child?
<m_mans> yes
<Regenaxer> and you do (put!> Obj 'nm "foo")?
<m_mans> let me double check
<Regenaxer> If you change the class later with 'set!', the index should also be modified
<Regenaxer> Ah, sorry! I meant 'set!>' of course in all cases above
<Regenaxer> aw-: Thanks for the arm64 build report!
<aw-> Regenaxer: thanks for adding the support for it!
<aw-> i'll have this thing running 24/7, so let me know anytime you want me to test something for that arch
<Regenaxer> Thanks!
<Regenaxer> The C warnings are indeed not good
<Regenaxer> I would not care much about pil32 here, but do the unit tests pass?
<Regenaxer> Something with the 'int' size is not right
<Regenaxer> 1<<BITS
<Regenaxer> needs a long here?
<Regenaxer> anyway ...
<aw-> one sec
<aw-> hmmm
<aw-> something else is strange
<aw-> when i launch pil, i get some message: n/li open: No such file or directory
<aw-> and some garbage when i (load "test/lib.l")
<aw-> i wonder if the .tgz contains some corrupt files..
<Regenaxer> In pil32?
<aw-> yes
<aw-> oh maybe that's because it didn't compile well
<aw-> how do i run the tests?
<Regenaxer> I think it has to do with the 'int' size issue
<Regenaxer> I'm sure it won't pass
<Regenaxer> $ ./pil lib/test.l -bye +
<aw-> yeah definitely
<aw-> doesn't work
<Regenaxer> But for pil64 it passes, right?
<aw-> yes! no problem
<Regenaxer> Perfect
<aw-> oh hmm... it seems to be compiling the 32-bit using aarch64
<aw-> instead of armhf?
<Regenaxer> Perhaps that explains it?
<Regenaxer> Do you need pil32 for some reason on the 64-bit machine?
<m_mans> Regenaxer: sorry, my fault. No bug of course. It was just returned by other generator in 'select
<Regenaxer> Great! :)
<m_mans> thanks for the help!
<Regenaxer> Welcome!
<aw-> Regenaxer: no need, just wanted to test
<Regenaxer> ok
<aw-> also i wanted to see the 32-bit to build the 64-bit
<Regenaxer> T
<Regenaxer> From now on bil64 can build itself
<aw-> ? with the .s files
<Regenaxer> Also directly from the .l files
<Regenaxer> In December I plan to release a new version to Debian. Will ask the maintainer then to release also the Arm64 version
<aw-> oh, how?
<Regenaxer> But with your local installation it should rebuild by itself
<Regenaxer> without pil32
<aw-> yes it should now
<aw-> but i still need the arm .s files
<Regenaxer> No
<aw-> oh
<aw-> you're right!
<aw-> wow I didn't notice
<aw-> when did you add that?
<Regenaxer> It was always so
<Regenaxer> The .s files are only for the first install
<Regenaxer> if there is no Debian package etc.
<aw-> oh right, right
<Regenaxer> it looks for a global or a local installation, then tries Ersatz
<aw-> but now it's compiled so future installs don't require
<aw-> yes i knew that
<Regenaxer> yeah
<Regenaxer> Using the .s files is fine too, unless you want to modify your .l files
<Regenaxer> but need to be downloaded, so more tedious
<aw-> well..... "tedious"
<aw-> haha it literally took ~1 minute to download + compile for 64-bit ARM
<Regenaxer> true :)
<beneroth> most package managers take longer ;)
<beneroth> hi all
<beneroth> Ober, are you looking for quantity or quality? :)
<m_mans> hi beneroth
<cess11> Maybe the question is about developers of the language and VM rather than developers using it.
<cess11> Also hi.
<cess11> Still hard to answer, since that line is quite fuzzy.
<beneroth> T, but then I would say "less is more" is appropriate :)
<Regenaxer> Hi beneroth
<cess11> Agreed. It's just one who makes decisions.
<beneroth> "A little retrospection shows that although many fine, useful software systems have been designed by committees and built as part of multipart projects, those software systems that have excited passionate fans are those that are the products of one or a few designing minds, great designers."
<cess11> Spent some time with gforth since I asked about it, I think it is quite nice. If I'm lucky and not out of a job (and thus in a hurry to get another one) I might have some time to look at the pil implementation(s) at the end of next month.
<beneroth> yay cool
<cess11> That's a good quote.
<beneroth> Fred Brooks is very quote-worthy
<beneroth> this one I like:
<beneroth> "well over half of the time you spend working on a project (on the order of 70 percent) is spent thinking, and no tool, no matter how advanced, can think for you. Consequently, even if a tool did everything except the thinking for you – if it wrote 100 percent of the code, wrote 100 percent of the documentation, did 100 percent of the testing, burned the CD-ROMs, put them in boxes, and mailed them to your customers – the best you could hope for would b
<beneroth> e a 30 percent improvement in productivity. In order to do better than that, you have to change the way you think."
<cess11> Spot on.
miskatonic has joined #picolisp
<cess11> Yeah, looks like I'm out of work.
<beneroth> ah bugger
<beneroth> corp re-org or what?
rob_w has joined #picolisp
<anjaa> pr firm in between projects
<anjaa> or badly prioritised projects
alexshendi has joined #picolisp
<beneroth> I see. that is frustrating.
<beneroth> cess11, you will find a better environment.
aw- has quit [Quit: Leaving.]
<miskatonic> work as vice something for regenaxer?
aw- has joined #picolisp
<beneroth> or m_mans
* beneroth has not enough budget
<m_mans> me? What do you mean? :)
<beneroth> maybe your company has room for another picolisper
<m_mans> oh, not at this time
<m_mans> also, I suppose, that company should be not in Russia. We have very bad currency exchange rate now
<m_mans> Regenaxer: once we talked about archiving objects via changing class. Do you define such archiving class for every needed active class, or do you have some common class?
<miskatonic> better environment - not better payment (or any payment at all, for that matter )
<miskatonic> the exchange rate will go down further after the soccer worlds of next summer
<beneroth> m_mans, how many relations are common to all your active classes, and even more important, what kind of querying do you do on the archive classes?
<cess11> They didn't plan as well as they could have. Next year they might have some for me to do they say.
<beneroth> well lets see if you still have then something for them, maybe you are not available then.
<cess11> Quite probable.
<cess11> We'll see.
<cess11> m_mans: Like beneroth says it depends on how your model is constructed but typically you can keep a pretty general class for de-indexing objects.
<beneroth> T
<beneroth> nice CVE cess11
<cess11> Yeah, probably lots of servers affected, luckily it looks easy to patch.
<Regenaxer> m_mans, usually a common abstract class, with a "normal" and an "archived" subclass
<Regenaxer> both have their own indexes, so the archive is out of the way if not needed
<miskatonic> is serializing objects as json a possibility?
<m_mans> thanks!
<beneroth> miskatonic, sure, you just have to write the serializer / de-serializer ^^
<beneroth> there is a lib for json
<beneroth> and you want to check the validity of values anyway when doing de-serializing, which might be highly custom to your application/data model
mtsd has joined #picolisp
<cess11> miskatonic: I've used the Rosetta solution for that, and I think aw- or someone wrote FFI for it.
solene has left #picolisp ["Leaving"]
<Regenaxer> IIRC @lib/json.l is identical to the rosetta solution
<miskatonic> i suppose that the library is especially useful when sharing data between pil and js
<cess11> Ah, it comes with the distribution as well.
<Regenaxer> miskatonic, yes, though in general PLIO format is better for the serialization of data
<Regenaxer> I use it also with JS
<Regenaxer> eg. @lib/canvas.js
<Regenaxer> via @lib/plio.js -> @lib/canvas.l
<Regenaxer> @lib/form.js uses a plain text format
<beneroth> miskatonic, just don't de-serialize like this: https://github.com/SAMUSDEV/samus.js/blob/master/src/com/samus/js/core/JSON.js
<beneroth> who finds the mistake? :D
<aw-> ahaha
<aw-> stupid
<cess11> Haha.
aw- has quit [Quit: Leaving.]
mtsd has quit [Ping timeout: 248 seconds]
<jibanes> does pilos have tcpip support?
mtsd has joined #picolisp
miskatonic has quit [Quit: ERC Version 5.3 (IRC client for Emacs)]
tankfeeder has quit [Quit: Connection closed for inactivity]
tankfeeder has joined #picolisp
<jibanes> ah apparently not
<beneroth> pilos is not meant for actual use.
<beneroth> it supports nothing beside what BIOS supports, and most BIOS these days don't really implement the BIOS standard features
<cess11> jibanes: What kind of platform are you aiming for?
<beneroth> picolisp (and afaik pilMCU) fully support TCP
<jibanes> oh I thought it'd make a good "lisp terminal" :)
<jibanes> but yeah, I agree, not much value over picolisp on *nix
<jibanes> other than it's tiny
<jibanes> and awesome
<beneroth> there is also miniPicolisp
<jibanes> interesting
<jibanes> for small arm cpus?
<beneroth> well if you want a secure, air-gapped lisp repl, than pilOS is about the right thing :D
<jibanes> yeah that's tempting
<cess11> There's the tinycore-image.
<jibanes> I like the fact that the footprint is comparable to k
aw- has joined #picolisp
mtsd has quit [Remote host closed the connection]
rob_w has quit [Quit: Leaving]
<tankfeeder> minipicolisp is on ideone.com too
<beneroth> (version) -> 16.12.8
<beneroth> better: https://ideone.com/ycLjne
<beneroth> maybe we should embed (if allowed) or link to this website from picolisp.com :)
<jibanes> ah you're saying minipicolisp as a client?
<jibanes> is there a way to have picolisp listen on one port and have a few clients push lisp commands to it, like a repl client that would connect to a picolisp "server".
<beneroth> yes
<jibanes> hmm, I meant where the client would push lisp commands to a picolisp "server"
<jibanes> not just chat
<beneroth> same thing, just lisp instead of text.
<jibanes> ah okay, that works
<beneroth> picolisp brings his own IPC for child processes (e.g. used in pil DB), those different picolisp processes talk lisp (in plio format) to each other over pipes
<beneroth> your setup would then be shoving plio over tcp instead of pipes :)
<beneroth> plio is binary encoding for picolisp "code". you can surely also just send picolisp source code in UTF-8 around, simpler, less efficient.
<jibanes> right, a bit like kdb+
<aw-> or use http.l and send/receive picolisp code directly over HTTP
<beneroth> T
<beneroth> if it goes over the internet, wrap it into a TLS tunnel (e.g. with stunnel or socat or such)
<beneroth> if the client compuer is outside of your control, check all client input to be valid/allowed
<jibanes> perfect
<jibanes> it'd be nice though if picolisp supported tls
<jibanes> not that stunnel is a tremendous effort
<jibanes> it's just overhead
<jibanes> how about SO_REUSEPORT is it enabled?
<beneroth> not really an overhead, what gets done is the same be it implemented in an outside tool or inside picolisp
<beneroth> why re-implement something is there are proven, good solutions around? just increases the security risks.
<beneroth> of course this brings in dependencies which aren't there with pure-picolisp solutions. but in practice they don't matter except for special setups. and if your setup is so special you should be able to afford to do it special :)
<beneroth> tankfeeder implemented many many algorithms and crypto stuff for picolisp: https://bitbucket.org/mihailp/tankfeeder/src/1c64f0fec2bd?at=default
<beneroth> tankfeeder, thanks, this is the better link than mine :)
<jibanes> ah yeah perfect indeed
<Regenaxer> ret
<Regenaxer> BTW, the picolisp workhorse for tls tunnelling is bin/ssl
<Regenaxer> beneroth, a few days ago I extended 'mail' to use ssl optionally
<Regenaxer> I needed it in PilBox, cause there is no exim :)
<cess11> Pretty nice application of CL for document production, some concepts would be real easy to implement in pil too.
<beneroth> Regenaxer, oh great! good info, thanks!
<Regenaxer> not a big thing, just thought you should know as you use 'mail' too
<beneroth> cess11, nice UX, I bookmark it for later inspiration
<Regenaxer> Usage is (mail "smtp.strato.de" (cons "user" "password" 465) From ...
<Regenaxer> ie the port is overloaded :)
<beneroth> alright, nice
<beneroth> uses AUTH PLAIN I assume (the base64 encoding) ?
alexshendi has quit [Read error: Connection reset by peer]
<Regenaxer> yes, exactly
<cess11> beneroth: Yeah, I think you'll really like some of the thinking he's put into it. Could be useful for your schema generation stuff, perhaps.
<beneroth> Regenaxer, with a NULL byte as separator, hehe ;)
<Regenaxer> indeed!
<Regenaxer> good old 'wr' :)
<Regenaxer> As we discussed, writing is no problem
<beneroth> cess11, I just glimpsed into it.. saw the "deletion of title" lead to "specify title text here" (<> removal of title)
<beneroth> that I found really nice
<beneroth> this is sane
<beneroth> Regenaxer, as I said, sometimes this exotic pieces are in legitimate use ;)
<Regenaxer> right
<jibanes> Regenaxer: thanks
<Regenaxer> For input, (rd 1) works of course too
<jibanes> Regenaxer: are you considering the use of SO_REUSEPORT ?
<beneroth> T
<Regenaxer> jibanes, isn't it SO_REUSEADDR ?
<jibanes> no
<jibanes> SO_REUSEPORT appeared in kernel 3.9 I think?
<Regenaxer> ah
<Regenaxer> don't know
alexshendi has joined #picolisp
<Regenaxer> What is it good for?
<jibanes> This socket option allows multiple sockets (read: picolisp processes) to listen on the same IP address and port combination. The kernel then load-balances incoming connections across the processes.
<beneroth> Regenaxer, load balancing
<Regenaxer> I see
<beneroth> jibanes, thanks for showing SO_REUSEADDR
<beneroth> Regenaxer, could be useful for a non-forking server
<Regenaxer> Yes, I'm just thinking
<beneroth> well, would be, not could, would be definitely
<Regenaxer> I did not have such a use case
<beneroth> T
<Regenaxer> On my servers I have rather the opposite. Many ports
<beneroth> use case: having multiple HTTP handling processes, similar to your architecture with httpGate but every process able to handle all sessions, so doesn't matter in which process the connection ends up.
<jibanes> I was more thinking about read-only database "gateways"
<Regenaxer> In my case it would mean multiple httpGate processes
<jibanes> but yeah over http or not...
<Regenaxer> yes, there are certainly use cases
<Regenaxer> But they are not a neck
<beneroth> T, multiple database reading processes
<Regenaxer> I think SO_REUSEADDR can be easily used with 'native'
<jibanes> SO_REUSEPORT used in most of high-frequency trading software/databases
<jibanes> where 1ms is a big fucking deal
<Regenaxer> setsockopt
<beneroth> Regenaxer, you mean getting the socket this way instead of using (port)
<Regenaxer> SO_REUSEPORT I mean
<beneroth> this way = via native call
<Regenaxer> I thought it is just a socket option?
<Regenaxer> setsockopt(sd, ..., SO_REUSEADDR ?
<Regenaxer> Hmm, no, must be before bind() probably
<jibanes> not SO_REUSEADDR
<beneroth> yeah, during opening I think
<jibanes> different
<beneroth> "So long as the first server sets this option before binding its socket, then any number of other servers can also bind to the same port if they also set the option beforehand."
<Regenaxer> yep, sorry, SO_REUSEADDR of course
<jibanes> ah ok
<jibanes> my bad then
<beneroth> Regenaxer, still, could be used with (native), right?
<Regenaxer> nono, jibanes, you are right
* beneroth probably wants to use this in a future version of his http.l
<Regenaxer> yes, but not within the current (port)
<jibanes> right
<beneroth> T
<jibanes> undo
<jibanes> this option makes sense in contexts where there's only one writter to the database and thousands of clients
<jibanes> of read-only clients
<Regenaxer> yep
<jibanes> and that's common
<Regenaxer> I've put it onto my todo list for investigation
<jibanes> thanks
<jibanes> is your todo list online btw?
<jibanes> it'd be interesting to see the roadmap
<beneroth> not in ERP applications, which is the traditional main use of picolisp, but yes, common in many areas. including public websites.
<Regenaxer> no, just a non-formal file
<jibanes> okay, no big deal
<beneroth> jibanes, his todo list is not so big xD
<Regenaxer> yep, not for picolisp
<Regenaxer> user requests a lot
<jibanes> cool
<Regenaxer> Currently 388 lines :(
<jibanes> snot so small
<Regenaxer> yes, and most things are just ideas, won't do most of them
<jibanes> right
<Regenaxer> Still a lot, since it is only 3 lines per issue or so
<beneroth> how many lines in picolisp todo?
<beneroth> :P
<Regenaxer> I have this big one with all kind of stuff, and smaller ones in project directories
* beneroth is also right now making a big re-structuring of a pil application because customer changed his mind on some things...
<Regenaxer> Usually I have 2 files in each dir: "todo" and "note"
<Regenaxer> Yeah, mind changes all the time
<Regenaxer> btw, I'm fusing the 3 BTG-Suisse DBs into one
<Regenaxer> nasty thing
<beneroth> problem is, my time-table hasn't planned for this extra effort, even when it is payed
<Regenaxer> 'dump' all three, and import
<beneroth> ah still
<beneroth> you told me :)
<Regenaxer> yes
<beneroth> small task ;)
<Regenaxer> Will take a few more weeks
<beneroth> </sarcasm>
<Regenaxer> :)
<Regenaxer> I write a de-duplication GUI
<Regenaxer> have some ideas
<beneroth> woah
<beneroth> nice
* beneroth likes de-duplication
<beneroth> can get pretty complex pretty fast, though
<Regenaxer> yes, and here we really need it, so much garbage
<beneroth> yeah. but also needs a custom garbage-collector then to clean up the deduplicated reference data
<beneroth> though in the SQL databases where I implemented custom de-duplication, so far still no garbage collection takes place, grow is not quick enough to require it :D
<Regenaxer> I plan that they can select what to clean up, and then delete the old one
<beneroth> the biggest problem I faced when I implemented a de-duplication scheme into MS SQL was that there is no simple way to do a really correct (request)
<beneroth> I was already into pilDB at that time, so this was pretty frustrating
<Regenaxer> I want to let them do it manually
<Regenaxer> display two objects in the same gui
<Regenaxer> swich rapidly between them
<beneroth> ok
<beneroth> I have a guess what it is about...
<Regenaxer> Overlay the standard GUI with buttons which move data
<beneroth> but you should show me when I visit you next time :)
<Regenaxer> sure
<Regenaxer> It is experimental
<Regenaxer> I want to use the normal view of the objects
<Regenaxer> Let's see
<beneroth> I see
<Regenaxer> But it will be completely generic
<Regenaxer> no need to code for all classes
<Regenaxer> I'm not sure how it will work out
<beneroth> but so it is more about deduplication on the logical/business layer, not about technical storage deduplication which is invisible to user
<beneroth> yeah sounds interesting
<Regenaxer> ah, yes
<Regenaxer> this is not the problem
<beneroth> the SQL thingy I spoke of before was storage deduplication.
<Regenaxer> Not a problem in pil probably
<beneroth> I'm currently attempting something similar in a adress database... deduplicating addresses and persons.
<beneroth> T
<beneroth> in pil you just use (request) and all its fine :)
<Regenaxer> yep, addresses, customers etc are the typical candidate
<Regenaxer> T
<beneroth> exactly
<beneroth> also not sure yet how it works out, will see
<Regenaxer> in case of BTG "Messen" also
<beneroth> I see
<beneroth> and products :)
<Regenaxer> same exhibition exists 3 times
<Regenaxer> products are usually quite uniqe due to article numbers
<beneroth> the other thing, the technical storage deduplication, was to minimize storage space in a setup where daily new imports of similar data happens.
<Regenaxer> ok
<jibanes> I really like the footprint of pil, it pretty much stays in cpu cache and flies
<beneroth> in each import, probably about 95% stays the same, but multiple imports per week, and the imported datasets are some 100'000 records
<beneroth> jibanes, thats some of the principles behind picolisp: don't re-invent stuff, simply make good use of existing features
<beneroth> jibanes, did you find this? http://picolisp.com/tractatus/
<jibanes> looking
<Regenaxer> This should be further elaborated, I stopped in between ;)
<beneroth> haha. new solution to work against global warming: lets just cook more french fries: http://www.bbc.com/news/science-environment-42081892
<Regenaxer> good to know :)
miskatonic has joined #picolisp
miskatonic has quit [Read error: Connection reset by peer]
miskaton` has joined #picolisp
miskaton` has quit [Read error: Connection reset by peer]
miskatonic has joined #picolisp
alexshendi has quit [Read error: Connection reset by peer]
aw- has quit [Quit: Leaving.]
alexshendi_ has joined #picolisp
zod_ has joined #picolisp
alexshendi__ has joined #picolisp
alexshendi_ has quit [Read error: Connection reset by peer]
orivej has quit [Remote host closed the connection]
orivej has joined #picolisp
zod_ has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
<beneroth> bb
beneroth has quit [Quit: Verlassend]
miskatonic has quit [Quit: ERC Version 5.3 (IRC client for Emacs)]
alexshendi has joined #picolisp
alexshendi__ has quit [Ping timeout: 258 seconds]
miskatonic has joined #picolisp
<cess11> Also did a not very interesting commit, https://github.com/cess11/xrxs .
alexshendi has quit [Ping timeout: 255 seconds]
alexshendi has joined #picolisp
miskatonic has quit [Quit: ERC Version 5.3 (IRC client for Emacs)]
alexshendi_ has joined #picolisp
alexshendi has quit [Read error: Connection reset by peer]
zod_ has joined #picolisp
zod_ has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]