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
karswell has quit [Ping timeout: 248 seconds]
rob_w has joined #picolisp
freeemint__ has joined #picolisp
<freeemint__> Good morning
alexshendi has quit [Ping timeout: 264 seconds]
<Regenaxer> Hi freeemint__!
<freeemint__> Regenaxer: What programm did you use for your irc client
<Regenaxer> The one in the wiki article, however modified since that time
<freeemint__> I see
<freeemint__> I am looking for one i can run on my server
<freeemint__> (I rented an server from Hetzner)
<Regenaxer> good
<freeemint__> (in the "you can take one of these non standard config since the previous user did leave and we did want to reconfigure it yet"
<Regenaxer> I use tmux on the server, so that the irc client keeps running when I'm logged off
<freeemint__> category)
<Regenaxer> I see, so you reinstall?
<freeemint__> It comes fresh (and i had to reinstall many times because i did not understand how they auto deploy an OS)
<freeemint__> but i figured it out
<freeemint__> Does PilOS speak PCI already?
<Nistur> my picolisp tshirt arrived! :P
<freeemint__> great
<Regenaxer> freeemint__, no changes to PilOS
<Regenaxer> Nistur, good :)
<freeemint__> did it spek pci before?
<freeemint__> now that i got an sufficently beafy server to host vms i was just playing with the thought of giving pilos an virtio network interface
<freeemint__> (and become the only vm host with pilos machines in the world muhhahaha)
<freeemint__> I have 2x 3TB of HDD would you go for raid 1 (mirroring) too?
<freeemint__> i read a little documentation this morning ... and while the data structures are a little quirky it might be doable
<freeemint__> (virtio network card support) but i have now idea how it looks on the PilOS site
<Regenaxer> PilOS uses exclusively BIOS calls, no drivers of its own
<freeemint__> so i would have to write my own PCI library and use that to communicate with network card which provides a package send function for which i would have to implement the complete network stack up tcp and maybe ssl?
<freeemint__> *sending
<freeemint__> sounds like a lot of work ... i put it in the queue
<Regenaxer> yeap, not trivial
<freeemint__> any other idea what i can do with 32 gb ram and 4 physical cores (multithreading into 8) and picolisp?
<Regenaxer> Some game with AI?
<Regenaxer> Perhaps just text based
<beneroth> enough for quite much game AI. or even ML.
<beneroth> game AI have usually not much in common with the ML-type of AI.
<freeemint__> beneroth: T
<freeemint__> Regenaxer: Who would play them (other than me)?
<Regenaxer> oh, haha, depends on the theme
<freeemint__> for what theme would i get enough to player?
<freeemint__> *player
<freeemint__> for it not to be empty all the time
pchrist_ has quit [Quit: leaving]
<Regenaxer> I don't have good overview over the game scenes and trends
pchrist has joined #picolisp
<beneroth> it's very broad and very varied and complex
<beneroth> if you want to make a game as hobby, just make something which is fun for you and your friends
<beneroth> maybe more people like it, maybe not
<Regenaxer> There are already too many scifi and fantasy games I suspect
<Regenaxer> How about a society simulation?
<beneroth> most game markets have the problem that there is just so much around (also much bad stuff, but all in all just big quantity) that the good games might be not visible/discovered
<freeemint__> which already have tons of content and players
<beneroth> don't even try to make a game business if you haven't made already some hobby games, I would say
<freeemint__> i get that ... i did make some hobby games ... but they were never finished
<beneroth> freeemint__, or make tools that help you
<freeemint__> could you give me some examples?
<beneroth> todo/task list. note taking application which stores stuff in DB so you can query / build ontologies of the stuff you study.
<beneroth> dunno :)
<freeemint__> Regenaxer: A society emuation sounds vague but intruiging
<beneroth> freeemint__, ever heard of dwarf fortress?
<beneroth> might be a game for Regenaxer, but if he gets hooked up in it we have to find someone else to develop picolisp, haha
<freeemint__> yeah ... even LISP won't help me come close to whats on the market
<beneroth> don't care about the market
<beneroth> df is all ASCII graphic, so the creator could spend more time programming interesting behaviour and concepts.
<beneroth> the problem with game dev in generell is that programming is just one aspect of it.
<beneroth> you can be quicker and better at programming by using lisp and being smart. but you can't as easily speed up producing graphics (2D, textures, 3D, ...?), sounds, music, story/content, ...
<beneroth> that the reason why I focus now on making business software and not games.
<freeemint__> music can be speed up. text content too.
<freeemint__> but play testing does not scale with lisp
<beneroth> why not? build an AI which can test the game for you :P
<beneroth> finding dead ends etc.
<freeemint__> ... If i did not had AI i would not test for dead ends ... so no speed up in testing the game ... i just got tested better
<freeemint__> *it
<freeemint__> Regenaxer what would you recommend if you want to host picolisp and non-picolisp servers on different sub domaiinand use https
<freeemint__> Would go for httpgate and then the other servers linked up to http gate somehow or would you go for apache to httpgate or standalone apache
<Regenaxer> I never looked at Apache, so I would probably not use it
<Regenaxer> So, yes, all started by httpGate
<beneroth> freeemint__, if you aren't already an apache expert, I would recommend you nginx. much easier to configure. and better performance.
<beneroth> apache offers more/other stuff though, e.g. those notorious htaccess files
<freeemint__> my question is can i get non picolisp servers running as subdomain with http_gate
<freeemint__> *httpgate
<freeemint__> from the wiki it looks like no
<beneroth> httpgate would need to proxy the connection to the local apache/nginx on another port. probably, I forgot the httpGate config details to do this, but I think its possible.
<Regenaxer> yes, I think so too, though I never thought about that
<freeemint__> beneroth: so nginx -> multiple hhtpgate instances & other services
<freeemint__> Regenaxer: No being able to that in picolisp is sad
<beneroth> yes that would also be possible, I believe
<Regenaxer> T
<Regenaxer> Just experiment
<beneroth> freeemint__, the only problem with doing that in picolisp is implementing the whole TLS stuff. the main reason for httpGate is performance, not that it would be impossible in picolisp, afaik.
<freeemint__> let nginx take care of the certificates?
<beneroth> yes
<freeemint__> beneroth: I mean do the subdomain stuff ...
<beneroth> let the front proxy take care of TLS, especially when all other webservers are running locally on the same machine anyway
<Regenaxer> Why would nginx be needed at all?
<beneroth> for the other web apps, maybe. not needed for picolisp.
<Regenaxer> ok
<beneroth> picolisp apps behind httpgate (and httpgate at the front, not behind another proxy) is probably fastest
<beneroth> nginx is probably a bit better in caching, e.g. media E-Tags etc
<freeemint__> my girlfirend wanted docker on the machine can you recommend something different with the same function?
<freeemint__> if you got lots of static content nginx + httpgate + picolisp will be faster
<beneroth> native linux containers? docker is building on top of that, too
<beneroth> probably, yes.
<beneroth> nginx uses linux kernel to deliver files straight from the disk.
<beneroth> question is if you want to build something specific (so you have specific needs, for which some stuff might be better then other)
<freeemint__> i have no idea what i need
<beneroth> or if you wanna try out technology, then a more varied setup probably gives you more experience. as long as you don't give up halfway.
<beneroth> yeah, remember that feeling. might come handy when you have to deal with business clients. xD
<freeemint__> i want something behind which i can spin up many picolisp subdomains and a jupyter netbook and a gitlab perhaps
<beneroth> do it the Regenaxer way: only make what you need now, keep it simple, than its easy to change it when your needs change.
<freeemint__> well there is no "need" for the server.
<freeemint__> we got it anyhow
<freeemint__> afl
freeemint__ has quit [Quit: Page closed]
alexshendi has joined #picolisp
Regenaxer has left #picolisp [#picolisp]
Regenaxer has joined #picolisp
alexshendi has quit [Ping timeout: 256 seconds]
freeemint_ has quit [Quit: Page closed]
orivej has quit [Ping timeout: 264 seconds]
rob_w has quit [Remote host closed the connection]
gko has quit [Quit: ZNC - http://znc.in]
<sriram_> good morning....was wondering what the following code in pdfPage does...
<sriram_> (de pdfCanvas (Sym) (unless *PRG (put (=: page Sym) 'home This) )
<sriram_> This is probably the form in which pdfCanvas is called?
<Regenaxer> *PRG is non-NIL during a HTTP-PUT
<Regenaxer> (Post-Redirect-Get)
<sriram_> it is called as follows (pdfCanvas 'myPage)
<Regenaxer> so the 'put' is done only when the page is initially fetched with GET
<sriram_> ah..I was wondering about PRG and how it gets defined
<Regenaxer> it is in @lib/form.l
<sriram_> so just having trouble reading (put (=: page Sym) 'home This)
<sriram_> This is the form
<sriram_> I think
<sriram_> sym is myPage
<sriram_> I mean 'myPage
<Regenaxer> yes
gko has joined #picolisp
<sriram_> so myPage->page->home is set to This...
<Regenaxer> Moment, phone
<sriram_> np
<Regenaxer> done
<sriram_> i was thinking that (put (=: page Sym) 'home This)
<sriram_> translates to myPage->page->home = This
<Regenaxer> correct
<Regenaxer> if Sym is myPage
<sriram_> yes, i think so as it is invoked as (pdfCanvas 'myPage)
<Regenaxer> ok
<Regenaxer> It is a bi-directional link
<Regenaxer> page points to Sym, and Sym points back
<Regenaxer> aka +Joint
<sriram_> oh didnt realize
<Regenaxer> You should see this if you 'show' the objects in the repl
<Regenaxer> or 'edit' and click with K
<sriram_> this is not setup using the +Joint property? I dont see that in lib/pdfPage.l
<Regenaxer> No, because +Joint is for DB objects only
<Regenaxer> E/R
<sriram_> I did (show 'myPage) and dont see a page property
<sriram_> myPage (+PdfPage) lst ($53272334612342) font "Tangerine" dy 842 dx 595 zoom 1 sy 0 ry 420 sx 0 rx 300 ruler grid 6 cnt 42 home $53272334536026 size 24 prg ((image "img/7fachLogo.png" "image/png" (/ (- (: dx) 318) 2) (/ (- (: dy) 130) 2) 318 130)) ttl "MyPage" *Dbg ((17 . "./misc/pdfPage.l"))
<Regenaxer> yes, home $53272334536026
<Regenaxer> So (show '$53272334536026) gives the other side
<sriram_> but I thought home points to the form?
<Regenaxer> in 'gui' objects
<Regenaxer> +PdfPage is not a 'gui' in a form
<sriram_> just wondering where the page attribute of 'myPage would be
<Regenaxer> it has none
<sriram_> (show $53272334536026) -> ((-30) (-29) (28) (-27) (-26) (-25) (24) (23) (22) (21 . "L") (20) (19) (18) (17) (-16) (15 . "#f0f0f0") (-14) (13 . "#f0f0f0") (-12) (11) (-10) (9 . "#f0f0f0") (-8) (-7) (-6) (5 . "Zoom 1") (-4) (-3) (-2) (-1))
<sriram_> slightly confused now :)
<Regenaxer> This is the form
<sriram_> (put (=: page Sym) 'home This)
<Regenaxer> you did not quote
<Regenaxer> so you get the value only
<Regenaxer> (show '$53272334536026)
<sriram_> ah i see
<sriram_> that shows page myPage
<sriram_> so I misunderstood then
<sriram_> (put (=: page Sym) 'home This)
<sriram_> somehow sets the page property of this to point to the form
<sriram_> and sets the home property of Sym to point to This (i.e the form)
<Regenaxer> yes, it sets both
<sriram_> magic! :)
<Regenaxer> :)
<sriram_> (reading doc for put again..didnt realize it modified the destination as well)
<Regenaxer> So the page gets a 'home' pointer and the form gets a 'page' pointer
<Regenaxer> hmm, it is the purpose of 'put' (?)
<Regenaxer> (=: page Sym) sets the one direction
<Regenaxer> (put Sym 'home This) sets the other
<sriram_> (put 'X 'a 'b) sets X->a to be
<Regenaxer> yep
<sriram_> ah ! get this...I ignored that := was doing a set too
<Regenaxer> (put (=: page Sym) ... is in fact two sets
orivej has joined #picolisp
<Regenaxer> yeah
<sriram_> yes....i understand now...
<sriram_> no i dont :)
<sriram_> =: page Sym what does it set myPage->page to?
<sriram_> (for some reason := is not in the doc ref)
<sriram_> oh it is =:
<Regenaxer> it sets the form's 'page' property
<Regenaxer> 'This' is the form
<sriram_> yes...i do understand now
<sriram_> (:= page Sym) sets form->page = Sym
<Regenaxer> T
<sriram_> and returns a reference to Sym
<Regenaxer> exactly
<sriram_> so that the Sym->home will get set to This
<Regenaxer> right
<sriram_> each line of Pil is so dense...bit difficult to read, but so satisfying when understood :)
<sriram_> dense meaning lots of info in a single line
<Regenaxer> Good to hear
<Regenaxer> yes, once understood it is easier to read and overview in total
<sriram_> ok thanks...i must understand these little pieces, otherwise cannot follow the rest of the code
<sriram_> I know I only want the mouse part of pdfPage but wanted to start at beginning instead of just going to the part I need
<Regenaxer> yeah, small scale vs. large scale
<Regenaxer> T, this is the best way
<sriram_> thanks for the help...can proceed now..
<Regenaxer> :)
<sriram_> with the rest of pdfPage I mean :)
<beneroth> after some training the dense code is fluently readable
<beneroth> pil is very dense, but its not write-only code à la regex or perl
<Regenaxer> Yes, hard first, but a lot easier later
orivej has quit [Ping timeout: 240 seconds]
orivej has joined #picolisp
<sriram_> yes in my experience perl is easy to write, but very hard to read say a month later, even by the author :)
<sriram_> same for awk
<sriram_> (trying to use pp and doc as much as possible)
orivej has quit [Ping timeout: 276 seconds]
<sriram_> The doc example for task: (task -10000 5000 N 0 (msg (inc 'N)))
<sriram_> shows the first printout after 5 seconds and subsequent printouts after 10 seconds...
<sriram_> It is not clear how the interval between prints is determined...(reading code for task now)
<Regenaxer> The first argument is the period (negated), the second the time till the first start
<Regenaxer> (task -10000 0 ... starts immediately
<sriram_> ah i c...was trying to deduce from code for task ...thx
<sriram_> (in trying to understand (retire 10) in pdfPage)
orivej has joined #picolisp
orivej has quit [Ping timeout: 240 seconds]
orivej has joined #picolisp
<beneroth> (retire) is a timeout for the session/process
<Regenaxer> not the session, but the parent server process
<Regenaxer> The session times out with 'timeout'
<sriram_> So if there is no session request with 10 min the server times out
<Regenaxer> yes, and all children (= sessions) gone
<sriram_> I am trying to understand why in the definition of task, there is a + : (link (+ (eval (++ Prg) 1)))
<sriram_> as far as I can see when called with (task -10000 5000 N 0 (msg (inc 'N)))
<sriram_> it results in (link (+ 10000))
orivej has quit [Ping timeout: 260 seconds]
<sriram_> where 10000 is the second argument to task (the delay)
<Regenaxer> The '+' is actually only needed for pil32
<sriram_> I mean 5000
<Regenaxer> it is to copy the number, cause it is modified destructively
<sriram_> by the way, finding the debug function very useful
<Regenaxer> Pil64 has short numbers, so they can be freely modified
<sriram_> seems that <ENTER> at the ! prompt is similar to continue (not mentioned in doc)
<Regenaxer> Yeah, 'debug' is very useful, once one knows how to use (d), (e) and (u)
<Regenaxer> yes
<sriram_> (u)?
<Regenaxer> unbug
<sriram_> oh ..ah
<Regenaxer> unbugs the current subexpression
<sriram_> i was using only to unbug at the very end
<Regenaxer> And ENTER generally leaves the current REPL level
<sriram_> one problem i encountered while debugging
<sriram_> ! (made)
<sriram_> gave an error "nothing made yet" and dropped me out of debug
alexshendi has joined #picolisp
<Regenaxer> hmm, rather "not in make" or so?
<sriram_> I was inside a make...so thought I could see what has been made so far
<sriram_> but maybe not...i think if was in the ifn..thats why
<Regenaxer> I think it should work:
<Regenaxer> : (make (! link 1))
<Regenaxer> (link 1)
<Regenaxer> ! (made)
<Regenaxer> -> NIL
<Regenaxer> !
<sriram_> but in general...there is no way to continue debugging after an error
<Regenaxer> -> (1)
<sriram_> yes...i am afraid i was in the following ifn expression
<Regenaxer> right, because the env may be undefined
<sriram_> but even so....is there a way after the error to continue?
<sriram_> because I just was evaluating a random expression, not the current subesxp
<Regenaxer> no, because it is in an error REPL, no longer in the debug REPL
<sriram_> ok...np
<Regenaxer> This could be improved, but a bit complicated
<sriram_> why should i bother with (u) to unbug the current subexp?
<Regenaxer> and some error situations may be unpredictable
<sriram_> once evaluated i am past it anyway
<Regenaxer> It is useful in a loop
<sriram_> and I can do (unug 'task) as a whole
<sriram_> ah yes...ok
<Regenaxer> if you (d) into the loop, and then want to continue faster
<sriram_> is there a way to do something like watchpoints
<Regenaxer> You can set a breakpoint manually
<sriram_> i.e in a loop when loop var is a specific value..
<Regenaxer> (edit 'foo)
<Regenaxer> then insert a '!'
<Regenaxer> What I also do is insert (msg ..)
<Regenaxer> 'msg' returns the arg
<sriram_> it does not do it in the actual file, but just in the current definition
<Regenaxer> so you can put it in any place
<Regenaxer> yes, only in memory
<sriram_> ok..that is good...
<Regenaxer> (while (foo) ...
<Regenaxer> gets (while (msg (foo)) ...
<Regenaxer> ako local trace
<Regenaxer> or printf() in C debugging ;)
<sriram_> yes..very convenient (like printf)
<sriram_> :) yes
<Regenaxer> :)
<sriram_> I am now on second line of misc/pdfPage.l::go, having finished (almost) looking at retire->task :)....only 707 more lines to go :) :)
<Regenaxer> uh ;)
<sriram_> but enjoying
<Regenaxer> you are a tough man!
<sriram_> thanks! :) i am thinking it will be worth it for later
<sriram_> (i am sure it will be worth it i mean)
<Regenaxer> good
<sriram_> (only sorry I have to disturb you)
<Regenaxer> no problem at all!
<sriram_> (hopefully less as i progress..bye for the moment :) )
<Regenaxer> See you, I'm out now too
<sriram_> I dont see how (retire 10) can do anything, because (sys "PORT") is always NIL?
<sriram_> the nv var PORT is not defined anywhere that I can see
<sriram_> env var
<Regenaxer> ret
<Regenaxer> The env var PORT is set by httpGate
<Regenaxer> Without httpGate 'retire' does not make sense, as the server will never be restarted
<sriram_> retire starts a task only if PORT is defined
<Regenaxer> yep
<sriram_> (de retire (Min . Prg) (when (sys "PORT") (task ....)))
<Regenaxer> The env var PORT is set by httpGate
<sriram_> and retire is the first line in go
<Regenaxer> Without httpGate 'retire' does not make sense, as the server will never be restarted
<Regenaxer> right
<Regenaxer> So when the process was started manually or from a script, it will *not* retire
<sriram_> (de go () (retire 10) ...))
<Regenaxer> it is a no-op then
<sriram_> but when started automatically by httpGate
<sriram_> then it starts a task to check for a session in 10 mins
<sriram_> and exits otherwise
<Regenaxer> yep
<Regenaxer> no, not exit
<Regenaxer> never exit then
<sriram_> oh i thought from the (bye) it would exit
<Regenaxer> It retires only when it knows it will be started automatically
<Regenaxer> ah, yeah :)
<sriram_> so basically (de retire (Min . Prg) (when (sys "PORT") (task that counts down from Min exits if it reaches 0) (forked)))
<sriram_> cant tell why the *Adr is needed (read that *Adr is the IP address of the connected client)
<Regenaxer> yes, there may be also other connections, eg. from pings
<Regenaxer> The (forked) is there so that this task is not inherited to child processes
<sriram_> and the (cons Min Min Prg) as opposed to just (Min Prg)?
<Regenaxer> It is perhaps a design flaw in pil that *Run tasks are inherited
<Regenaxer> Most such tasks must be (forked) disabled
<Regenaxer> X is a "closure"d variable in the task
<sriram_> also not sure why format in (server (or (format (sys "PORT")) 8080)
<sriram_> X is set to (MIn Min Prg) in the job environment
<Regenaxer> Normally (server (sys "PORT") would be enough
<Regenaxer> The 8080 is there only for debugging
<sriram_> ok...I assumed that the 8080 was a default value
<sriram_> when started up manually
<Regenaxer> yes, a default
<Regenaxer> but in production mode there is always PORT
<Regenaxer> cause of httpGate
<Regenaxer> I never start anything explicitly
<sriram_> but was not sure what purpose the format served (format (sys "PORT"))
<sriram_> yes..now I understand the use of PORT in all the apps I have seen
<Regenaxer> format is needed cause the port is a number and the env var is a string
<sriram_> (app/main, osm/main etc)
<Regenaxer> right
<Regenaxer> Also (sys "NAME")
<Regenaxer> also set by httpGate
<Regenaxer> and others
<sriram_> was going thru lib/pdfPage as well...I see that pdfCanvas actually creates the canvas object (<canvas> ...)
<sriram_> When I click the gridButton, the grid appears, but all that is in button code is scrollX and scrollY
<sriram_> somehow drawPage is being called
<sriram_> which calls csDrawDots to draw the grid
<Regenaxer> yep
<sriram_> maybe drawCanvas calls it, but I could not see the link
<sriram_> how drawPage is called when the button is clicked
<Regenaxer> The JS drawCanvas triggers it with a timeout iirc
<sriram_> or maybe the draw> method of +PdfPage is somehow called
<Regenaxer> It must all be triggered by a POST from the Canvas JS somewhere
<sriram_> I think clicking the button causes the page to be loaded via HTTP POST
<sriram_> which causes the onload function (drawCanvas) to be called
<Regenaxer> if (dly == 0)
<Regenaxer> requestAnimationFrame(function() {drawCanvas(id, 0)});
<Regenaxer> else if (dly > 0)
<sriram_> is this correct
<Regenaxer> setTimeout(function() {drawCanvas(id, dly)}, dly);
<Regenaxer> hmm, so it depends on 'dly'
<sriram_> so JS drawCanvas calls lisp drawCanvas
<sriram_> ah and that calls the draw> method
<sriram_> (de drawCanvas (This Dly F X Y X2 Y2) (make (draw> This Dly F X Y X2 Y2)) )
<sriram_> which in turns calls pdfPage
<Regenaxer> ok :)
<sriram_> :) so I only need to look at draw> now...
<Regenaxer> yes, all clicks etc. are passed there
<Regenaxer> 'F' is used to distinguish
<Regenaxer> eg 2 is double-click
<Regenaxer> and less than zero is drag
<sriram_> yes, I saw that...you were able to do the box with just click and drag...no need for mouse release...so will study that piece...thanks!
<Regenaxer> ok, unfortunately I don't have a simpler example for Canvas clicks
<sriram_> the dot/x, y convert from X to index of dots?
<Regenaxer> yes
<sriram_> (no, this is a very nice example)
<sriram_> (and even better the one you have on website..a very complete app, restaurant, but that comes much later :) )
<Regenaxer> ok :)
<sriram_> there is some magic with the use of cnt? paired with sesId?
<Regenaxer> Where did you see that?
<sriram_> in drawPage : (de drawCanvas (This Dly F X Y X2 Y2) (make (draw> This Dly F X Y X2 Y2)) )
<sriram_> ah wrong paste
<sriram_> (csDrawImage (sesId (pack "!mk.svg?" (ht:Fmt This (: cnt))))
<sriram_> (de drawPage NIL (inc (:: cnt)) (csDrawImage (sesId (pack "!mk.svg?" (ht:Fmt This (: cnt))))
<Regenaxer> sesId is needed to generate the right url
<Regenaxer> it is in many places of the gui
<sriram_> thats the long number after the /
<Regenaxer> Most functions like <href> or <img> do it implicitly
<Regenaxer> yes, a long number plus a tilde ~
<sriram_> ah i forgot the ~
<sriram_> but I do not see the count field..I see Evt, Tab, ID, Got_
<Regenaxer> you mean (: cnt) ?
<sriram_> yes, probably it is just packed with !mk.svg and I dont see it in the url
<Regenaxer> I'm not sure atm, but I think the count is to force a new display
<Regenaxer> not to use cached stuff in SVG
<Regenaxer> Normal HTTP cache invalidation does not work here
<Regenaxer> no-cache
<sriram_> generates a unique page...by using cnt ?
<Regenaxer> yes, a unique name / url each time
<Regenaxer> I think otherwise "rsvg-convert" does not properly generate it
<Regenaxer> I don't remember atm
<sriram_> np...
<Regenaxer> the (svgPdf) function
<Regenaxer> in @lib/svg.l
<sriram_> sure i understand its purpose now...i am a little puzzled by use of make inside a make in drawPage. seems that the nested make would destroy the
<sriram_> parent make?
<sriram_> structures?
<Regenaxer> No, make envs can nest
<sriram_> ah i see..so its completely new pointers at each level
<sriram_> that is convenient
<Regenaxer> yes
<sriram_> because otherwise one would have to know if a sub-function called make or not
<sriram_> too painful :)
<Regenaxer> right
sriram_ has quit [Ping timeout: 260 seconds]
sriram_ has joined #picolisp
<sriram_> I wonder does (change) does. It seems to be defined in vip.l..but not able to see how it works in pdfPage.l
<sriram_> (change ,"Drag box" (env '(This) 'S (: sel) ...)
<Regenaxer> it goes together with (undo) and (redo)
<Regenaxer> the one in lib/vip.l is another one, only for vip
<Regenaxer> the above one is from @lib/form.l
<Regenaxer> I often want a quick calender display on the console. But 'cal', 'ncal', 'gcal' etc. are quite overkill. Reading the manual of 'gcal' takes me longer than writing my own: http://software-lab.de/cal
<Regenaxer> Sample output:
<Regenaxer> Mar 2018 Apr 2018 May 2018
<Regenaxer> 12 13 14 15 16 17 18 9 10 11 12 13 14 15 14 15 16 17 18 19 20
<Regenaxer> 5 6 7 8 9 10 11 2 3 4 5 6 7 8 7 8 9 10 11 12 13
<Regenaxer> 1 2 3 4 1 1 2 3 4 5 6
<Regenaxer> Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
<Regenaxer> 26 27 28 29 30 31 23 24 25 26 27 28 29 28 29 30 31
<Regenaxer> 19 20 21 22 23 24 25 16 17 18 19 20 21 22 21 22 23 24 25 26 27
<Regenaxer> 30
<C-Keen> heh
<Regenaxer> Hi C-Keen!
<C-Keen> hi Regenaxer :)
<Regenaxer> :)
<C-Keen> is that code calling date(1) for each day?
<Regenaxer> no, it is in pil
<Regenaxer> calls the (date ..) function
<Regenaxer> (date) is called primarily for the start position in each of the threi months
<Regenaxer> after that for each day, yes, but only to detect the end of the month
<Regenaxer> thus no system calls involved here
orivej has joined #picolisp
orivej has quit [Ping timeout: 260 seconds]
_whitelogger has joined #picolisp
orivej has joined #picolisp
orivej has quit [Ping timeout: 265 seconds]
<beneroth> Regenaxer, sweet!
trui has quit [Remote host closed the connection]
orivej has joined #picolisp