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
alexshendi has quit [Read error: No route to host]
ubLIX has quit [Quit: ubLIX]
<freemint> rick42: what serves as a good filter
<freemint> ?
freemint has quit [Ping timeout: 256 seconds]
xkapastel has quit [Quit: Connection closed for inactivity]
_whitelogger has joined #picolisp
orivej has quit [Ping timeout: 246 seconds]
rob_w has joined #picolisp
orivej has joined #picolisp
razzy has quit [Ping timeout: 255 seconds]
razzy has joined #picolisp
lodsw has quit [Ping timeout: 255 seconds]
<rob_w> hi chan .. i got a issue with the general localisation in picolisp .. i change my code to respect a different directory layout but now the language switch isnt working anymore
aw- has joined #picolisp
<beneroth> rob_w, see implementation of (de locale ...) in @lib/misc.l - locale expects the files to be relative within the @loc/ folder
<rob_w> ok .. lemme dig into that and get back to you
<rob_w> its been awhile since my brain did picolisp codes ;-)
<beneroth> no worries. just check out the (pack "@loc/" ...) codes there.
<beneroth> you maybe want to copy the whole (de locale ...) and adapt it to your directory structure.
<beneroth> or adapt your dir structure, so the assumptions in (locale) are valid again
<rob_w> well the picolisp dirs didnt change at all ..
<rob_w> only the file where i do read the current locale from .. anyway .. need to get back into debugging such stuff
<beneroth> hm. it expects language files to be within loc/ dir within picolisp dir.
<beneroth> good luck :)
<rob_w> yes but i do have some extras transaltion inisde my app folder and a extra config file .. no worries i get back toya
f8l has quit [Ping timeout: 244 seconds]
<beneroth> I'm sure you will find the cause :)
<beneroth> bbl
f8l has joined #picolisp
ubLIX has joined #picolisp
<Regenaxer> hi rob_w! The application's locale is passed as an additional path to 'locale'
<Regenaxer> Search for (locale ...) in your sources, like (locale (car V) (cdr V) "myPath/loc/")
<Regenaxer> and change myPath
<rob_w> if myPath is relative .. is that a path constructed via the HOME environment ?
<rob_w> or is it the path relative to the cwd ?
<Regenaxer> yes, relative to the working directory of the process
<Regenaxer> You can also pass an absolute one
<Regenaxer> So HOME is not used here
<rob_w> hmm odd
<rob_w> as HOME is the one which moved + all my config files
<rob_w> so eihter its a typo or something else i dont see
<Regenaxer> or you do (locale (car V) (cdr V) (pack (sys "HOME") "/path/loc/"))
<rob_w> no
<Regenaxer> Do you get some error message?
<rob_w> no
<Regenaxer> hmm, right, 'locale' does not complain if the file(s) don't exist
<Regenaxer> Try (trace 'locale) to see what it does
<rob_w> (trace 'locale)
<rob_w> !? (trace 'locale)
<rob_w> trace -- Undefined
<rob_w> beware this might be a pretty old picolisp
<Regenaxer> You must start in debug mode, otherwise 'trace' is not loaded, ie +
<rob_w> oh sorry
<Regenaxer> The output of trace goes to the log probably
<Regenaxer> if no REPL
<rob_w> hmm i see repeating outputs .. 2line ala
<rob_w> locale : DE de "knock/loc/"
<rob_w> locale = "Die Einstellung der Parameter und der verschiedenen Reaktionsketten sollten nur von geschultem Personal"
<rob_w> not in the log but on my console atm
<rob_w> log stays empty
<Regenaxer> ok
<Regenaxer> looks good
<Regenaxer> So path is "knock/loc/"
<rob_w> yeah ..
<Regenaxer> not correct?
<rob_w> thats ok
<rob_w> the thing is we use a drop down and a button to set a different language and this seems to break
<rob_w> so most probably i screwred up ) brackets .. i guess
<rob_w> lemme review my diff and see if that is my issue
<rob_w> if i remember correclty having too many ) might not produce any log error but strange behaviour , right ?
<Regenaxer> The built-in translations are OK?
<Regenaxer> No, it gives an error
<rob_w> hmmm ok .. then lemme get back to you after reviewing
<Regenaxer> ok
<rob_w> one more question is the locale() function needed to have write permissions on hte folder ? or is out ok with a read-only scenrio ?
<Regenaxer> read only is ok
<Regenaxer> bbl
<Regenaxer> ret
<rob_w> Regenaxer: is there a way too to have a system call before/after a db update ?
<rob_w> as that would be my 2nd issue i need to solve
<rob_w> having the db files residing in a read-only area and only right before the write call remount it and then back to read-only
<Regenaxer> yes, there is one *after*, by defininng an 'upd>' method
<Regenaxer> ah
<Regenaxer> you mean something different
<Regenaxer> You mean after a 'commit'
<Regenaxer> You can pass additional args to 'commit', but this requires patching code in @lib/db.l
<Regenaxer> In any case the DB in read-only memory won't work, as 'pool' always tries to open in read/write mode
<rob_w> well i just realized that i might be able to catch the db stuff in my code .. as it is basicly only the password changes of the users
<beneroth> rob_w, you could do (redef commit).
<Regenaxer> beneroth, right
<rob_w> hmm so pool() is my main probelm
<Regenaxer> yeah
<Regenaxer> So 'pool' must be also called while writable
<Regenaxer> no problem perhaps (?)
<rob_w> ok so i then know what to do .. having the db in read-only then requires me to copy them to a ramdisk on book and add a "after" hook to sync the files back to my main storage
<Regenaxer> yes, should work
<rob_w> then my question is the following :
<beneroth> why read only? regular snapshots (there is a snapshot tool) might be more useful, no?
<Regenaxer> But for the sync it must be writable
<beneroth> or replica (there is tooling to livestream all changes to a remote clone via https)
<rob_w> if i have the db in a ramdisk with write permission .. will i be able to simple copy ( cp -a ) the files during idle and them beeing atomic consitent ?
<Regenaxer> copy is ok, but you must be sure the db does not change during the copy
<Regenaxer> So while (dbSync)ed
<Regenaxer> Why is a read-only version necessary?
<rob_w> hmm ok
<rob_w> well the big picture is the following:
<rob_w> before: we had the db and all configs on the external sd card .. but we found that this card on this product is not flawless .. ( vibrations can make it loose the card )
<Regenaxer> I see
<Regenaxer> Another idea:
<rob_w> so the goal now is to move critical data ( configs , db etc ) away to my 99% read-only area ( just rw mount it for the sync and remount ro after)
<Regenaxer> Do not open the DB at all, and use 'blk' to *read* it
<rob_w> as we are also never protected against a hard power loss too
<Regenaxer> hmm, blk is only pil64
<Regenaxer> are you on pil32?
<rob_w> think so yes
<Regenaxer> hmm, ok
<Regenaxer> And 'blk' would need major recoding
<Regenaxer> So the way is (commit ['any] [exe1] [exe2])
<rob_w> if i get my code correclty i think we currently only use the db for user/password stuff .. all configs are separate files
<Regenaxer> passing exe2
<rob_w> those i think i can handle via rw/ro mounts right around the "out()" calls
<Regenaxer> ok, then it is better not to use a DB at all
<Regenaxer> and use 'rc' or so for user/pass
<rob_w> so u say drop the db and use files again for user/pass ?
<beneroth> tankf33der, in case you are interested in evoting systems, the one of the proposed swiss evoting just leaked: https://gitlab.com/fickdiepost/evoting-solution its from the spanish company Scytl, they're systems is used in other countries and it has some dark spots: https://www.republik.ch/2019/02/07/the-tricky-business-of-democracy
<Regenaxer> yes
<Regenaxer> is there a gui for user/pass?
<rob_w> html yes
<tankf33der> beneroth: thanks
<Regenaxer> hmm, ok, then some more changes are needed
<Regenaxer> DB is convenient for gui
<rob_w> is syncing the db a thread or a child or would something like the following look ok
<Regenaxer> But you could use +FileField instead of +E/R +TextField
<rob_w> (gui '(+Button) ,"Set Password"
<rob_w> (call "mount" "-o" "rw,remount" "/")
<rob_w> '(put!> *Login 'pw (passwd (val> (field -1)) (; *Login pw 0)) )
<rob_w> (call "mount" "-o" "ro,remount" "/") )
<Regenaxer> yes, this is perhaps the easiest
<Regenaxer> I would do that in the editButton
<beneroth> tankf33der, your welcome. let me now if you gain some insights. The Swiss Post (postal service) just made a marketing stunt by having a bugbounty on the eVoting system, as a test, but you only gain access to it by signing NDA's etc.. so someone hacked them and published the source now as a logical reaction.
<rob_w> the put() is that atomic, so is it done and synced after it returns ?
<Regenaxer> yes
<Regenaxer> put!>
<rob_w> perfect
<Regenaxer> syncs, writes all, releases
<Regenaxer> and for 'pool' the same?
<Regenaxer> However, I suspect you cant remount while files are open (?)
<rob_w> hmm not yet
<rob_w> i forgot about pool() but iwill add it now
<Regenaxer> I think it will not work
<rob_w> well as just said i think i will go the other way
<Regenaxer> which one? Lost track ;)
<rob_w> having the pool and db calls against a ramdisk which was copied from flash on bootup / startup and then add only the cp calls after
<Regenaxer> ok
<rob_w> i will test that .. maybe that is a reason too for my locale issue too ..
<Regenaxer> I would do this after loading @lib/db.l :
<Regenaxer> (patch (method 'put!> '+Entity) '(commit 'upd) '(commit 'upd NIL '(call "cp" "-rp" ...)))
<Regenaxer> This uses the third arg of 'commit'
<Regenaxer> exe2
<Regenaxer> Even better would be to redefine 'commit' itself
<rob_w> ok .. lemme try my "brute" attack then i see if it works in a basic way
<Regenaxer> ok
<Regenaxer> For the records: Redefining commit can be done as:
<Regenaxer> (conc (expr 'commit) '((call "cp" "-rp" ...)))
<beneroth> tankf33der, oh this might help: https://github.com/orbiting/post-evoting
<Regenaxer> So after any commit the copy is done. Will slow down a lot ;)
<beneroth> tankf33der, comes from people working on the official test. apparently it doesn't has everything included to run (the official repo you only get access to when registered and NDAed etc), so this repo should provide fillings for the gaps
xkapastel has joined #picolisp
ubLIX has quit [Ping timeout: 255 seconds]
<rob_w> stupid question
<rob_w> (call "cp" "-a" "/etc/knock/db/*" "/media/ram/db/")
<rob_w> cp: can't stat '/etc/knock/db/*': No such file or directory
<rob_w> but that path is correct ??
<mario-goulart> Does `call' execute `cp' through a shell?
<rob_w> i hope so
<rob_w> well maybe ur right maybe its execve
<Regenaxer> The wildcards are expanded by the shell
<rob_w> oh
<rob_w> so * is not treated as wildcard ?
<Regenaxer> and 'call' calls not a shell :)
<Regenaxer> right
<rob_w> crap
<rob_w> so i will wrap my cp in a shell script .. no problem
<Regenaxer> I would write explicitly
<Regenaxer> (call "cp" "-a" "/etc/knock/db/@" "/etc/knock/db/A" ... "/media/ram/db/")
<Regenaxer> @,A is for pil64
<rob_w> dont worry .. shell script will do the trick here
<Regenaxer> Too much overhead
<Regenaxer> These are not so many files, right?
<Regenaxer> So it is
<Regenaxer> (call "cp" "-a" "/etc/knock/db/1" "/etc/knock/db/2" ... "/media/ram/db/")
<Regenaxer> for pil32
<Regenaxer> 'call' forks a new process, and (call "sh" "-c" ..) yet another
<rob_w> but its simple and easy to understand for me .. dont worry
<rob_w> ... and my collegues
<Regenaxer> What is difficult to understand in (call "cp" "-a" "/etc/knock/db/1" "/etc/knock/db/2" ... "/media/ram/db/")
<Regenaxer> Wait, db/ can contain other files, also blobs
<Regenaxer> Much better (and easier) is
<Regenaxer> (call "cp" "-rp" "/etc/knock/db/" "/media/ram/db/")
<rob_w> well as i dont know what and how many files there might be inside .. i like it
<Regenaxer> Copies the whole tree
<Regenaxer> exactly
<rob_w> -rp .. hmm never used it lemme check
<Regenaxer> recursive with flags
<rob_w> perfect .. thx alot
<Regenaxer> :)
<Regenaxer> bbl afp
aw- has quit [Quit: Leaving.]
<beneroth> The -r (recursive) flag is present in GNU but often not in the other variants of those common commands. E.g. grep -r is only possible with GNU grep, not on Solaris default grep.
<beneroth> But yeah, Solaris is dead. Unix as landscape of many different OSes is practically dead - mostly it's just Linux now.
<Nistur> macOS?
<beneroth> Niche in desktop. Mac Server is dead.
<beneroth> Tools there are usually outdated BSD versions, not GNU, afaik.
<Nistur> (also hey!)
<beneroth> hey Nistur o/ :)
<beneroth> how is going mate?
<Nistur> eh :P Y'know :P
<Nistur> new job, new problems
<beneroth> well its nice to see some changes in the kind of problems, no? are you sure it's new problem, not just old with different styling? :D
<Nistur> A lot of the problems I've seen before, but also some new ones because this is a new company, team, and project. No legacy, so they're learning (and making mistakes)
<beneroth> no legacy? I envy you :D
<Nistur> nice change from my last project :P
xkapastel has quit [Quit: Connection closed for inactivity]
orivej has quit [Ping timeout: 268 seconds]
rob_w has quit [Remote host closed the connection]
jibanes has quit [Ping timeout: 245 seconds]
jibanes has joined #picolisp
<beneroth> Regenaxer, I miss sometimes the possibility to have an custom function used with (uniq). What is the canonical way for such situations, using (make) ?
<Regenaxer> What do you mean "used with (uniq)"? Unique according to some predicate?
<beneroth> yeah, like uniq not by a single property but by the combination of two properties
<Regenaxer> Not (uniq (filter foo Lst)) ?
<beneroth> well in the end I would like to have an list of the original elements, not a list of the uniq predicates
<beneroth> of course, one could first make a list of unique predicates and than filter the list by it
<Regenaxer> predicates are functions, you mean elements?
<Regenaxer> Same result as (conc (uniq (filter predicate1 Lst)) (uniq (filter predicate2 Lst)))?
<Regenaxer> just in single-pass
<Regenaxer> Anyway, I think there is no direct function
<beneroth> (let Uniq NIL
<beneroth> (filter
<beneroth> (let Key (list (: id) (: rev))
<beneroth> '((This)
<beneroth> (unless (member Key Uniq)
<beneroth> (push 'Uniq Key) ) ) )
<beneroth> Lst ) )
<beneroth> that is not equivalent to your conc, no?
<Regenaxer> No, your case is a double-key
<beneroth> yes
<Regenaxer> key is the combination of 2 values
<beneroth> T
<beneroth> better way than my filter?
<beneroth> I compare the use case a bit like using (sort) with the additional 'func parameter... but (unique) does not offer that :)
<Regenaxer> This will pick always the first element in List that has these 2 values
<beneroth> yes, that is okay
<beneroth> that is the intended functionality
<Regenaxer> good
<Regenaxer> I think you code is good for that
<Regenaxer> 'uniq' does something analog for the items themselves
<beneroth> use case is: User can upload multiple times the same elements, which might even have/get different properties, but for the list I'm generating here I like to filter out duplicate elements, identified by matching 'id and 'rev
<Regenaxer> What about (mapcar car (by '((This) (list (: id) (: rev))) group Lst)) ?
<Regenaxer> Perhaps faster? Though it does more consing
<beneroth> yeah I see
<beneroth> humm
<Regenaxer> If this were a DB app, you could also (request ... 'id ... 'key ...
<beneroth> I'm unsure now. actually the number of objects can become pretty big (thousands), while duplicates should not be expected usually, they can happen (and I like to filter them out)
<beneroth> I'm reading, not inserting.
<beneroth> (so no use for (request))
<Regenaxer> I see, for thousands uniq and group may be not so efficient
<Regenaxer> If just reading, then 'db' instead of 'request'
<beneroth> ah
<Regenaxer> 'db' also finds combinations
<beneroth> I should use (iter) ! that's it
<Regenaxer> or, even better, use 'aux'
<beneroth> currently its the filter above with (collect) initially
<Regenaxer> plus +Aux
<beneroth> I have aux
<Regenaxer> cool
<beneroth> but what is the (collect) equivalent to (aux) ?
<beneroth> because (aux) is equivalent to (db), no?
<Regenaxer> (collect) is not so good for large data sets
<Regenaxer> yeah, (collect) takes only a single key
<beneroth> id (+Aux +Ref +String) (rev))
<beneroth> rev (+String))
<Regenaxer> perfect
<beneroth> but the combination of both doesn't have to be unique necessarily
<Regenaxer> So (aux ..) gives directly what you need, no?
<Regenaxer> but it will pick *one* as above
<beneroth> (aux) only returns 1 object. I want all objects which represent a combination of 'id and 'rev
<Regenaxer> ok
<Regenaxer> then 'iter' is most efficient
<Regenaxer> but you must prepare the key
<Regenaxer> list the two values
<beneroth> no, I just build one on the go, as in the (let Uniq NIL ...) approach above, just base it on iter instead of (filter ... (collect ...)))
<Regenaxer> a bit tricky, best to inspect the tree with scan
<Regenaxer> yeah, iter is much better than (filter ... (collect ...)))
<Regenaxer> The collect result may be long just to be filtered then
<Regenaxer> iter gives you all directly in one swoop using the aux combination
<Regenaxer> I think the Beg arg to iter is (list Id Key)
<Regenaxer> and to End (list Id Key . T)
<Regenaxer> Not sure though, check how the keys are stored in the aux index
<beneroth> (prune) basically (wipe)s all unmodified external symbols, no?
<Regenaxer> no, it prunes only trees
<beneroth> ah, I see
<Regenaxer> tree nodes not accessed N times since last call to prune
<Regenaxer> modified externals are not changed by wipe
<beneroth> ok, but unmodified external symbols which are not referenced anymore (but got loaded during an iteration) are getting unloaded/removed from RAM anyway in a normal gc run, right?
<Regenaxer> yes
<beneroth> got it, thanks
<Regenaxer> No need to care
<Regenaxer> The problem with (big) trees is that all nodes are referred to
<beneroth> yeah naturally
<Regenaxer> and thus not garbage collected as long as some branch of the tree is accessed
<Regenaxer> i.e. if the root node is in some variable, the *whole* tree will not be gc/d
<Regenaxer> :)
<beneroth> got it :)
<Regenaxer> Normally no problem, but in imports we operate on one tree all the time
<Regenaxer> yeah :)
<beneroth> I think I want to use pilog instead of iter for my use case here :)
<Regenaxer> thats also good, I think the overhead is there but not noticeable
<Regenaxer> Makes life easier for the keys
<beneroth> now I thought even about using (step). but @@ ("The key for each returned value is stored in the global variable @@.") is only the id, not (list 'id 'rev) as I would have expected for an +Aux relation...
<Regenaxer> Should be the full key, yes
<beneroth> you think I have a mistake?
<beneroth> or is +Aux not properly recognised in (step) ?
<Regenaxer> I'm not sure about the key format for aux atm. Is (list 'id 'rev) ok?
<Regenaxer> no, +Aux is nothing special
<Regenaxer> it just prepares the proper key format
<beneroth> aye. (scan) returns '(id rev . 'obj)
<Regenaxer> Try (trace 'step) and pilog such a query
<Regenaxer> ok
<Regenaxer> so (id rev . NIL) AND (id rev . T)
<Regenaxer> s/AND/and
<Regenaxer> yes, I looked into some db
<Regenaxer> I tried:
<Regenaxer> : (iter (tree 'gp '+ek-) NIL '({2310} 734898 NIL) '({2310} 734898 NIL . T))
<Regenaxer> {B101206}
<Regenaxer> {B101211}
<Regenaxer> {B101213}
<Regenaxer> {B101240}
<Regenaxer> for a model
<Regenaxer> (rel gp (+Dep +Aux +Ref +Link) # Lieferant
<Regenaxer> (ansp)
<Regenaxer> (dat ansp)
<Regenaxer> NIL (+Li) )
<Regenaxer> (rel ansp (+Link) (+Ansp)) # Ansprechpartner
<beneroth> so (step) deserves an update?
<Regenaxer> ah, step, moment
<Regenaxer> I assumed it is the same
<Regenaxer> yes, same
<Regenaxer> : (let Q (init (tree 'gp '+ek-) '({2310} 734898 NIL) '({2310} 734898 NIL . T)) (while (step Q) (printsp @)))
<Regenaxer> {B101206} {B101211} {B101213} {B101240} -> {B101240}
<beneroth> try
<beneroth> (let Q (init (tree 'gp '+ek-) '({2310} 734898 NIL) '({2310} 734898 NIL . T)) (while (step Q) (printsp @@)))
<beneroth> " The key for each returned value is stored in the global variable @@"
<Regenaxer> : (let Q (init (tree 'gp '+ek-) '({2310} 734898 NIL) '({2310} 734898 NIL . T)) (while (step Q) (printsp @@)))
<Regenaxer> {2310} {2310} {2310} {2310} -> {2310}
<Regenaxer> it is only the first key, right
<beneroth> should be the whole key (just without the object in the fin)
<Regenaxer> I think 'step' cannot do this, it does not know the structure of the keys
<Regenaxer> You can do (while (step Q) (with @ (list (: id) (: rev))))
<beneroth> no, but it puts (car) into @@, it could also put (head) into @@
<beneroth> yeah, will do that
<Regenaxer> No, because without knowledge about the higher levels step doesn not know
<Regenaxer> Aux packs several thinn
<Regenaxer> gs into the key
<Regenaxer> Isn't iter better?
<beneroth> it is
<Regenaxer> step is good if you you want to do it asynchronously
<beneroth> heheh, I'm pondering forth and back all the time :D
<Regenaxer> good thing :)
<beneroth> will go with iter.
<Regenaxer> Pilog uses 'step' because it must continue (or not) at any time
<Regenaxer> 'collect' uses 'iter' which is more efficient
<Regenaxer> To get the same effect as 'step' one could call 'iter' in a coroutine
<Regenaxer> (yield)ing each result
<Regenaxer> But coroutine has even more overhead I suppose
<beneroth> aye, I have a similar case, but I already have iter adapted to my multiple-class-db-layer-thingy, but not step (or pilog). because in my mashinaDB one class can in fact be multiple pil classes underneath it, which is easy to hide for (collect) and even (iter), but not for (init) and (step) as that List (parameter to step) datastructure has to be passed around :)
<Regenaxer> cool
<beneroth> so I see, for pilog I need init and step :)
<Regenaxer> yep
<beneroth> will adapt my stuff to pilog soon, but not right now.
<Regenaxer> ok, it is the best
<Regenaxer> simpler and clearer in the end
<beneroth> you can always use normal pilDB commands with my mashinaDB, but usually you want to do it the mashina way, which is issue the comands to multiple entities
<beneroth> but it's still 100% compatible to normal pilDB, and I'm sure I can and will keep it that way :)
<Regenaxer> You could do that in select(3)
<Regenaxer> select/3 I mean
<beneroth> aye, I don't know how I will do it exactly yet, but I guess either you run multiple times pilDB queries, or, nicer, it generates a single select/3 taking care of it :)
<Regenaxer> T
<Regenaxer> select/3 reorders the searches according to where it found the best hits
<Regenaxer> so usually it is best
<beneroth> I know. very nice. very smart.
<Regenaxer> very simple, a last-recently-found scheme
<beneroth> Simple is Better :)
<Regenaxer> TT
<Regenaxer> (if 'T' means "true", then 'TT' means "absolute truth" hahaha)
<Regenaxer> (but no need to continue yesterday's discussion ;)
<beneroth> like Doubleplus in 1984 newspeak
<Regenaxer> exactly
<beneroth> (you're afraid ? :P)
<beneroth> (I think we just talked about different things with same terms without realizing)
<Regenaxer> No, just takes too much time
<Regenaxer> Probably
<Regenaxer> As you said, next beer!
<beneroth> Yeah, you're luck I'm 5 hours away, eh? :P
<Regenaxer> Why 5 hours?
<beneroth> it's about 5 hours by train I think
<beneroth> well, assumed that Deutsche Bahn works.
<Regenaxer> ah, I see! I understood 5 h away from keyboard
<beneroth> haha, :D
<Regenaxer> uh, then expect 10 h
<Regenaxer> In Augsburg was a crash last Thursday
<Regenaxer> no trains here yet
<beneroth> currently DB has a broken down train in Basel
<Regenaxer> uh
<beneroth> oh great
<beneroth> the first time I visited you Augsburg also broke down and I took a Taxi to you
<Regenaxer> We must use a bus partially
<Regenaxer> yeah, it is a mess
<Regenaxer> total mess
<beneroth> at least you have a bus. that is not the norm with DB afaik
<beneroth> well as NZZ (swiss newspaper) recently put it "German Gov seems more focused on AI than fixing the train infrastructure". That was the last sentence in an article pointing out that DB seems to be purposefully ruining its infrastructure, because after a certain point German Gov becomes responsible and DB can save maintenance cost, following their incentives as partial privatized company :(
<Regenaxer> A cargo train derailed partially and destroyed rails and electricity over a few hundred meters
<Regenaxer> Yes, true
<beneroth> symptoms of bad maintained tracks and trains.
<Regenaxer> yes
<Regenaxer> Money goes into prestigue projects like Stuttgart 2*
<Regenaxer> prestige
<Regenaxer> Stuttgart 21
<Regenaxer> (can't Penti any more)
<Regenaxer> * is P-S and 1 is D-S
<beneroth> see last paragraph here: https://blog.fefe.de/?ts=a2987e58
<Regenaxer> yeah, typical
<beneroth> got my thing working with iter :)
<beneroth> (make (iter))
<Regenaxer> Great!
<beneroth> thanks for your help! :)
<Regenaxer> :)
<Regenaxer> Must go out look for the cat
<Regenaxer> bbl
<beneroth> good hunt
<Regenaxer> Found it :)
<beneroth> that was quick :)
<Regenaxer> yes, luck
<beneroth> have a nice evening
<beneroth> bbl
<Regenaxer> cu :)
ubLIX has joined #picolisp
ubLX has joined #picolisp
ubLIX has quit [Ping timeout: 246 seconds]
<razzy> not very reassuring if goverment do not do their job of maintaining trains
<Regenaxer> T
alexshendi has joined #picolisp
ubLX has quit [Ping timeout: 245 seconds]
xkapastel has joined #picolisp
orivej has joined #picolisp
ubLIX has joined #picolisp
razzy has quit [Remote host closed the connection]
razzy has joined #picolisp
xkapastel has quit [Quit: Connection closed for inactivity]
ubLIX has quit [Ping timeout: 246 seconds]
ubLIX has joined #picolisp
jibanes has quit [Ping timeout: 272 seconds]
jibanes has joined #picolisp
libertas_ is now known as libertas