ChanServ changed the topic of #picolisp to: PicoLisp language | Channel Log: https://irclog.whitequark.org/picolisp/ | Check also http://www.picolisp.com for more information
<aw-> yes exactly
ubLIX has quit [Quit: ubLIX]
ubLIX has joined #picolisp
ubLIX has quit [Remote host closed the connection]
xkapastel has quit [Quit: Connection closed for inactivity]
groovy2shoes has joined #picolisp
orivej has joined #picolisp
<beneroth> freemint, git & Regenaxer: exactly
<beneroth> freemint, judging solutions for complex questions: define and inform about the criteria by which the solutions will be judged before the challenge started. prepare system to evaluate and judge the solutions. this might be an automatic test system (testing functional requirements, testing non-functional stuff like performance) and/or a single person/group of person judging non-functional stuff like look & feel (GUI/UI design), UX (how many clicks are requi
<beneroth> red to do X), software architecture / maintainability (how much code need to be adapted to change X ?), ...
<beneroth> the important part is to use the same scoring system for all solutions, so you can actually compare the scores fairly
<beneroth> or do it the SJW snowflake way: give everyone a medal who participated and do no further value judgements (well, except give extra scores "minority" background of the authors, minus point for every privilege and plus points for hardships).
<beneroth> meritocracy (judgement by the result) vs. social status games
<aw-> beneroth: I think you read too much HN ;)
_whitelogger has joined #picolisp
rob_w has joined #picolisp
<beneroth> aw-, T. and not only HN. to days ago I got sucked into wikipedia until 4 AM xD
<beneroth> now I know things I didn't know about french revolution :D
<beneroth> have a nice day aw- :)
<Regenaxer> Hi aw-, beneroth!
<beneroth> Hi Regenaxer ! Nice day to you too!
<Regenaxer> beneroth: Impressing! :)
<Regenaxer> cu
<beneroth> yeah, now I'm tired and drinking too many energy drinks, not healthy.
<beneroth> cu ;)
<aw-> thanks, see you
<freemint> Good Morning
<freemint> Regenaxer, i found a "reason" why i dislike the "port in url" scheme of picolisp, before it was just looks and nobody does it that way.
<Regenaxer> Good morning freemint
<freemint> Good Morning
<Regenaxer> Well, it depends. The URLs in pil applications are for *sessions*, not URIs
<Regenaxer> the path names don't change
<Regenaxer> We discussed that often, but I'm still sure the current scheme is the best
<Regenaxer> You could develop another scheme, and present it to us
<freemint> I am thinking just to put the port and auth key in cookies
<Regenaxer> Not good
<freemint> Why?
<Regenaxer> I need many sessions in the same browser
<Regenaxer> And cookies may be disabled
<Regenaxer> same with JS
<aw-> freemint: what do you mean "port in url" ?
<freemint> I do not want to replace your solution, it is optimal for constraint problem
<Regenaxer> aw-, in pil each session runs on its own port
<Regenaxer> listens
<aw-> ?
<Regenaxer> yes, for application servers. For others you can use URLs without ports just fine
<aw-> link/reference?
<Regenaxer> as eg in the wiki
<Regenaxer> aw-, what do you mean?
<freemint> when you login in (or app is called on the server side) picolisp does start a neew process which listens on a certain port for the user
<aw-> i don';t want what is "port in url"
<aw-> sorry
<aw-> i don't *know what is "port in url", can you give an example?
<freemint> login into the wiki?
<Regenaxer> it looks like https://domain.com/12345/path/x.l
<Regenaxer> No, login gives a session
<freemint> with httpgate
<Regenaxer> yes
<Regenaxer> The articles in the wiki
<freemint> without it looks like http://localhost:59071/7610070930953980~wiki/doc.l?*ID=-4
<Regenaxer> right
<Regenaxer> and *with* it looks the same, just '/' instead of ':'
<Regenaxer> 59071 is the port, and 7610070930953980 is the session ID
<Regenaxer> But the URIs in the wiki look like https://picolisp.com/wiki/?documentation
<Regenaxer> without session
<Regenaxer> Anyway, without a port in the URL each request to the server must go through a single process, then be dispatched to the bpplication
<Regenaxer> well, httpGate does this, but on a low level
<Regenaxer> httpGate needs to know the port, hence it is host/port/path
<Regenaxer> How else would you solve that?
<freemint> Regenaxer: My long term goal would be to demonstrate that it works using cookies, does what i need and then have an additional command line arguement added to httpgate which does add cookies an nicer urls at the tradeoff of no multiple sessions per browser (until tab based cookies become a thing or we do some local storage js magic)
<Regenaxer> With the drawback of *requiring* cookies, which is bad style imho
<freemint> *requiring cookies* for login is standard praxis, "nobody" does auth without cookies
<Regenaxer> Then, how do you handle the "back" button?
<Regenaxer> Cookies are not required for login.
<Regenaxer> I have mostly cookies switched off
<freemint> i will not have anything taken a way from you
<Regenaxer> The "back" button is important to navigate between objects
<Regenaxer> If the info is not in the URL, how do you handle that?
<freemint> Question: can two httpgates run at the same time?
<Regenaxer> yes
<Regenaxer> I have always 2, on port 80 and 443
<Regenaxer> and then lots of child processes of course
<freemint> Then you can have nocookie.stuff.* and stuff.*
<Regenaxer> Why all the trouble?
<Regenaxer> just for "nice"?
<Regenaxer> The needed information for each page in an app varies a lot
<Regenaxer> depends on the context
<Regenaxer> you need awfully lots of cookie values
<freemint> why would i need an awfull lot?
<Regenaxer> the parameters change with each context
<freemint> I just want to get rid of the port and the auth handle.
<Regenaxer> ok, but then the URL is still ugly
<freemint> the ?*ID=4 stuff can remain
<Regenaxer> and not valid outside the context
<freemint> my arguement is not beauty, it is: If my website is about to go down, it is impossible to archive it in the way back machine, if i need sessions which are available without login and a googlebot comes across it it will put dead links in to it s cache, that will hurt the searchablility of the site
<Regenaxer> You mean stateless sessions?
<Regenaxer> it is a completely different issue then
<freemint> i do not know what you mean by stateless sessions
<Regenaxer> The sessions in pil applications have a state
<freemint> yes
<Regenaxer> cached objects, form history, global variables
<Regenaxer> also temp files
<freemint> yes
<Regenaxer> Sessions "available without login" you can do already now
<Regenaxer> but accessing a session when it is gone is meaningless
<Regenaxer> A stateless session is no problem
<Regenaxer> Like tractatus
<Regenaxer> Tractatus uses neither port nor sessiosId
<Regenaxer> But it is limited in power, as it has no state
<freemint> mhh i see
<freemint> you backed a notion of session in to form.l too
<Regenaxer> or, so to say, the full state is in *Menu
<Regenaxer> yes, the session is central to the application gui
<freemint> That is good for complex data entry, which is probably your domain where your use it
<Regenaxer> right
<Regenaxer> for simple cases like tractatus you don't need it
<Regenaxer> it is overkill then
<Regenaxer> as the processes take up resources
<freemint> I do not want to go in that direction with my project, for a blog and a forum (i want to write an engine that does both) searchability and being able to copy and paste links without auth tokens, rains supreme since the forum will be for a non technical audience.
<Regenaxer> ok
<Regenaxer> And the way the wiki does it is not sufficient?
<Regenaxer> Search results are all plain static URLs
<freemint> no threads, no profiles, no nesting of categories, no notion of "next" and "previos" piece of content (as opposed to versions of a document)
<Regenaxer> hu?
<Regenaxer> there are versions and diffs in the wiki if you mean that
<Regenaxer> They are just hidden unless logged in
<Regenaxer> but could be handled statically
<freemint> the wiki got diffs, but i want a next and previous to link between chronologically related pieces of content
<Regenaxer> yes, what is the problem?
<freemint> this is an must have for forums and blogs
<Regenaxer> if you go to "Revision history" you have links to prevs and nexts
<Regenaxer> It was a political decision to allow that when logged in, not a technical one
alexshendi has quit [Ping timeout: 252 seconds]
<freemint> yes but these prevs and next map to history of the same piece of content, i want a next prev between different content from different people which replied in the same thread
<Regenaxer> In any case nothing to do with port, session
<Regenaxer> yes, nothing to do with port, session
<freemint> these features is why i did not choose the wiki
<Regenaxer> no session needed
<freemint> (other than for auth, yes)
<Regenaxer> No cookies needed
<Regenaxer> Just code your app
<freemint> how can i do auth without some type of sessions and user submitting an auth token?
<freemint> i think i can't
<Regenaxer> you can, passing the token in the URL
<Regenaxer> I have that in various places in the Consumer Goods Forum application
<Regenaxer> Users and projects
<Nistur> mornin'
<Regenaxer> Hi Nistur
<Nistur> helloo
<Regenaxer> Another drawback of a cookie is that you cannot easily "give" it to somebody
<freemint> your form.l has a to powerfull notion of sessions, there are things like about it, like the one session, one process principle.
<freemint> (to powerfull for my use)
<Regenaxer> perhaps, but by default it is not used
<freemint> This not giving a session is a feature in my case not a bug
<Regenaxer> giving a session is risky, but useful sometimes if the channel is safe or not critical
<freemint> i agree
<Regenaxer> We have long numbers for project and user, so the user just clicks the link
<Regenaxer> all encoded in the link
<Regenaxer> I use it also for communication between PilBox and hub server
<Regenaxer> A cookie would be useless here
<freemint> and that works awesome for your use case, here is what changes i bring in the worst case: - an command line *option* for httpgate - a new build your website library - a piece of software which can do forums and blogs
<Regenaxer> Instead of an option perhaps better a separate binary
<Regenaxer> httpCookie
<Regenaxer> or so
<freemint> why do that?
<Regenaxer> httpGate is started globally per server, by root
<Regenaxer> and listens to 80 and or 443
<Regenaxer> So a command line option won't help
<freemint> yes and?
<freemint> you start if with command line options in the statup script then
<Regenaxer> An option makes sense if you call it sometimes this and sometimes that way
<Regenaxer> httpGate must handle it dynamically
<Regenaxer> not decided at startup
<Regenaxer> but depending on the URL etc
<freemint> oh you use httpgate in a way i do not use it. i always have an nginx in front, which does by name dispatching
xkapastel has joined #picolisp
freemint has quit [Ping timeout: 256 seconds]
libertas has quit [Ping timeout: 240 seconds]
libertas has joined #picolisp
libertas has quit [Ping timeout: 250 seconds]
libertas has joined #picolisp
aw- has quit [Quit: Leaving.]
orivej has quit [Ping timeout: 250 seconds]
orivej has joined #picolisp
orivej has quit [Ping timeout: 240 seconds]
rob_w has quit [Quit: Leaving]
orivej has joined #picolisp
<razzy> hi, all. i am looking hard, where are transient symbols like "whitepawn" created in chess.l. how do i look for who-define *symbol. i have tried many things. only paifull options left
<razzy> they are somehow generated i think
<razzy> (d) in debug makes you step inside s-expression. is there something that makes you step out?
<razzy> i mean lvl up?
<Regenaxer> Hi razzy!
<Regenaxer> The pieces are created by 'piece' :)
<Regenaxer> (prog1
<Regenaxer> (def
<Regenaxer> (pack (mapcar '((Cls) (cdr (chop Cls))) Typ))
<Regenaxer> Typ )
<Regenaxer> (init> @ Cnt Fld) ) )
<Regenaxer> The 'pack' creates the transient sym
<Regenaxer> If in an expression, you can only continue with Enter, or abort all with ^X
<Regenaxer> To continue quickly, without stepping, do (u) for "unbug"
<Regenaxer> it stops then the next time in the higher level (if that was debugged too)
<razzy> nope, mine (u) stops at the same lvl
<razzy> maybe old version?
<Regenaxer> hmm, ok
<Regenaxer> no
<Regenaxer> did not change since decades
<razzy> :]
<razzy> thx
<Regenaxer> (u) unbugs the *next* expr then, as (d) debugs it
<Regenaxer> I think I just keep repeating Enter ;)
<razzy> imho yes :]
<Regenaxer> Must go, back soon :)
<razzy> thx, bye
<razzy> (u) for unbug to the upper lvl would be handy
<Regenaxer> ret
<Regenaxer> I think it is not possible
<Regenaxer> *this* expression is already operated upon, so modifying it will have an effect only the next time
<razzy> next time is ok :]
<razzy> it is inconvenient only in deep cycles
<Regenaxer> Next time you will be above it again, so (u) unbugs it *before" you enter
<Regenaxer> I think the reason is simply that (u) cannot easily see the expression
<Regenaxer> It would need a deep search from the top level, but what is that?
<Regenaxer> So (d) and (u) always operate on the next expression to be evaluated
<razzy> to look one expression up would also be handy
<razzy> or several
<razzy> n expression up
<razzy> you would want to jump N expression up yes?
<razzy> not just in debug
<razzy> i think there is some throw function
<razzy> btw i readed logs, and good step to pilOS would be scheduler.
<razzy> imho
<Regenaxer> ok
<razzy> (uu) function that undebugs (u) + one lvl up. i would like. not that my oppinions have any relevance :]
<Regenaxer> As I said, the "level up" is not trivial to find. That's why it is this way
<Regenaxer> The interpreter is stopped at a breakpoint '!'
<Regenaxer> it sees *this* expression, not more
<Regenaxer> Can be coming from everywhere
<razzy> hm, i see
<Regenaxer> could even be just created by (read) or (list ...)
<razzy> a way to end debugging and return to normal function?
<Regenaxer> ^X calls (quit)
<Regenaxer> ie return to REPL
<Regenaxer> What would be "normal"?
<razzy> i mean go with program flow?
<Regenaxer> how?
<Regenaxer> In pil64 there is 'trail', you might search that to find out where we are
<Regenaxer> if any
<Regenaxer> But this does not work in general
<Regenaxer> As said, each expression is kind of independent
<razzy> imagine infinite enter without printing (expr) and"!". i wanted to continue my program several times
<Regenaxer> enter without printing?
<Regenaxer> infinite?
<razzy> ok, thx. dead end. i spend enough of your time :]
<Regenaxer> no problem
<Regenaxer> Perhaps you mean how to stop too much debugging?
<Regenaxer> Usually you know that the current breakpoint is in 'foo'
<Regenaxer> so you say (unbug 'foo) and Enter
<Regenaxer> won't stop again :)
<Regenaxer> But it is *you* who knows it is 'foo'
<razzy> aaah, that is helpfull behaviour i did not think about
<Regenaxer> :)
<razzy> btw, i feel that modifying *This* expression should be possible for the next time it runs.
<Regenaxer> you can modify it
<Regenaxer> with destructive operations
<razzy> i mean removing ! for next time
andyjpb has joined #picolisp
orivej has quit [Ping timeout: 246 seconds]
orivej has joined #picolisp
andyjpb has quit [Ping timeout: 252 seconds]
ubLIX has joined #picolisp
orivej has quit [Ping timeout: 268 seconds]
_whitelogger has joined #picolisp
aw- has joined #picolisp