2022-03-09 06:55:36 Hey, what does -> do in Python? 2022-03-09 06:57:46 Specifically, def function(...) -> int: 2022-03-09 07:14:13 -> is a type annotation for the return value 2022-03-09 11:34:17 So it just means "treat it as an integer"? 2022-03-09 11:35:17 I was trying a little Pearson hashing function - 8 bits. But it was returning giant sometimes negative integers. When I wrote it myself without that annotation I started getting bytes, which is what I expected. 2022-03-09 11:37:43 KipIngram, I mentioned CINT the other day when we were talking about interpreters. it looks like you get a command prompt with one letter commands 2022-03-09 11:38:34 "p" followed by an expression is evaluate. anything in {} brackets is evaluated. "." switches modes where anything entered is evaluated and commands need to be prefixed with . 2022-03-09 11:39:11 from what i can tell, you cant define functions, loops or conditionals at the command line though you can enter multiple lines at the command prompt in a {} expression like with python 2022-03-09 11:40:49 maybe this will be useful inspiration since the channel was wondering how a C interpreter would work :) 2022-03-09 11:47:25 KipIngram: yes 2022-03-09 12:41:19 it's a code smell to have several drops after a loop or alike? 2022-03-09 12:41:31 like drop drop drop after a loop 2022-03-09 12:41:37 or it's normal 2022-03-09 12:42:45 I see an example in a book that has several drops, Idk if it's something normal (cannot judge as I'm not a forthwright yet) or it's a code smell and should be doing it another way 2022-03-09 12:44:15 as it's an example for novices idk if they did it on purpose for just showing you some stuff and it's a bad practice (which shouldn't as the book usually tells you when something is bad) or it's just fine and that's what you have to do as you needed those values in the stack 2022-03-09 12:45:14 : KEYSTORE BEGIN DUP KEY DUP 32 = 0= WHILE SWAP C! 1+ REPEAT DROP DROP DROP ; this is the word btw 2022-03-09 12:50:30 : 2DROP DROP DROP ; 2022-03-09 12:50:43 : 3DROP DROP DROP DROP ; 2022-03-09 12:53:10 vms14: If you have a loop which carries items on the stack from one iteration to another, then it's quite likely they'll still be there after the loop, when you no longer need them. So I wouldn't consider the need to drop damning. Though see MrMobius's defs above - it's the kind of thing that makes good factoring. 2022-03-09 12:54:14 yes, I saw 2drop and 2dup (over over) in some examples 2022-03-09 12:54:33 I have a "stack frame" facility in my Forth in which the frame-closing word cleans up things automatically. 2022-03-09 12:55:00 but wanted to know if I see myself dropping several items from the stack should I ask myself if there's a better way 2022-03-09 12:55:04 The "2" versions of those words are often included as part of "double word" support, though I don't see that as often since we went to 64 bits. 2022-03-09 12:55:44 Right. My point above was that you need those to stay on the stack when the loop finishes and repeats - so there's kind of no way to not have them there when the loop finishes and doesn't repeat. 2022-03-09 12:55:55 I don't think it's a problem. 2022-03-09 12:56:23 I suppose it's just fine as you have to work with the stack, but for some reason I think if there are several drops in a word maybe I should check how I'm doing the stuff 2022-03-09 12:56:47 as it could be the result of misusing the stack or doing it in a wrong way 2022-03-09 12:57:19 like puting items I don't really need (not in this case) 2022-03-09 12:58:26 I don't feel comfortable with forth yet, I'm on the page 100 of the book xD 2022-03-09 12:58:57 btw forth is in codewars 2022-03-09 12:59:28 a website to do some algorithms in your favourite language to practice and improve 2022-03-09 13:00:57 Well, there might be other ways of dealing with that information without having it on the stack, but the main alternative would be variables, and too many of them without "good cause" is troublesome too. 2022-03-09 13:01:46 Stack gyrations are somewhat "part of traditional Forth." It's why I did up that stack frame thing in the first place - to make it easier to avoid that issue. 2022-03-09 13:03:20 nah, it's better to use the stack, specially for temporary values 2022-03-09 13:03:36 Actually I said that the frame close word "cleans up automatically," but I do have to tell it how many things to drop. So it gets a little help. It was a convenience - the end of frame word had to be there anyway, so I went ahead and had it do double-duty. 2022-03-09 13:03:52 just wanted to know if it was bad to have several drops later, but you say it's fine so it's fine 2022-03-09 13:03:57 It doesn't iterate on DROP, though - it calculates an offset and applies it to the stack pointer. 2022-03-09 13:04:26 KipIngram: there is depth in some forths 2022-03-09 13:04:35 Yes, in most. 2022-03-09 13:04:36 well you know 2022-03-09 13:04:41 it's in the book xD 2022-03-09 13:04:48 I use gforth btw 2022-03-09 13:05:06 But you don't know what part of that depth is pertinent to the immediate task and what part belongs to outer context, so it doesn't help much in this context. 2022-03-09 13:05:29 I only want to get rid of the stuff the frame was using - not anything under it. 2022-03-09 13:05:54 Don't pay me too much attention, though - that frame thing is wildly non-standard. 2022-03-09 13:06:15 In fact, a lot of Forth sources explicitly counsel against treating the stack as an array. 2022-03-09 13:06:17 KipIngram: it feels like a scope 2022-03-09 13:06:28 Yes, that's very much what it is. 2022-03-09 13:06:33 I try to use it only sparingly. 2022-03-09 13:06:46 ahaha this remembers me making a forth able to represent lists by pushing { and } on the stack 2022-03-09 13:06:56 A few things I needed to write, though, just needed more things on the stack than could be cleanly dealt with using the traditional words. 2022-03-09 13:07:22 I have a command history integrated into my system, and that makes it so QUERY has like half a dozen things of interest on the stack. 2022-03-09 13:07:44 always wondered if would be better to have a secondary stack instead of using the return stack to save additional data 2022-03-09 13:07:50 I could have used PICK and ROLL, but I don't like those - this felt cleaner. 2022-03-09 13:08:02 PICK and ROLL are "dirty words." 2022-03-09 13:08:08 KipIngram: I see forthwrights discourage the use of pick 2022-03-09 13:08:15 Especially ROLL, because it has to MOVE every item. 2022-03-09 13:08:44 it's like that means you're doing the stuff wrong 2022-03-09 13:08:50 PICK isn't as impactful on performance, but like I said, they just encourage you to only be "thinking about" the top couple of items at any given time. 2022-03-09 13:08:57 It's best if you can make that work. 2022-03-09 13:09:44 But there were 2-3 places in my system where I just saw no good possibility of getting there with a shallow stack. 2022-03-09 13:13:22 Actually that frame closing word does put the stack back where it was at the start of the frame, then *additionally* drops the specified number of items. It can clean up its own work by itself - but the extra lets me drop "parameters" that were passed into the frame. 2022-03-09 13:14:29 All it is is another processor register, that doesn't change on me all the time and lets me get at stack cells in a consistent way. The open frame word saves the current frame pointer to the return stack, and sets a new value. 2022-03-09 13:16:24 So the typical usage would be 2022-03-09 13:16:46 ...stack N parameters... { ...any code... N } ...carry on... 2022-03-09 13:17:46 If I want a result from "any code," I only drop N-1 at the end and have "any code" store the result in that bottom-most "parameter" cell. 2022-03-09 13:18:22 I guess it's a form of locals, except not "named." 2022-03-09 13:19:31 I've contemplated having the compiler read stack comments and use them to tag names onto the references, but I haven't tried to implement that. 2022-03-09 13:19:58 It would wind up being the same code - the name handling would be a compile time only thing. 2022-03-09 13:28:02 which forth implementation do you guys use? 2022-03-09 13:28:46 I was looking for some forth able to make gui apps, but only found win32forth 2022-03-09 13:29:08 ended installing debian and using gforth so I can use ffi very easily 2022-03-09 13:32:14 8th has support for GUI stuff, but I've not used that aspect of it 2022-03-09 13:33:33 I've been reading lately about the kitty terminal emulator and its support for graphics and animation. Looks pretty well thought out. Makes me want to roll support for some of that into my system. 2022-03-09 13:34:04 crc 8th wasn't free I guess 2022-03-09 13:34:10 https://sw.kovidgoyal.net/kitty/graphics-protocol/ 2022-03-09 13:34:12 and I'm poor as a rat xD 2022-03-09 13:36:04 rats despise me while they take cups of tea and pastries with their little finger risen 2022-03-09 13:38:29 8th does have a free version 2022-03-09 13:39:45 bigforth has minos, a gui framework 2022-03-09 13:40:31 crc I saw minos, isn't it related with net2o gui? 2022-03-09 13:40:34 Is bigforth the one that had the four stacks? May not be, but I remember quite a few years ago there was a Forth floating around that had four stacks. 2022-03-09 13:40:38 vms14: yes 2022-03-09 13:40:56 if you install gforth in android you have also installed net2o gui, but idk how to use it 2022-03-09 13:41:02 I want to think that was a different one, and if someone said the right name I'd recognize it. 2022-03-09 13:41:26 :O why four stacks 2022-03-09 13:41:47 yet I'd like to see an alternative stack in order to prevent users using the return stack 2022-03-09 13:42:01 I remember it being a kind of "experiment." There are good reasons for two stacks (one data, one return), and having more sort of takes away from those reasons. 2022-03-09 13:42:02 KipIngram: I only remember it having two stacks 2022-03-09 13:42:14 But that was what was "noteworthy" about this particular one. 2022-03-09 13:42:37 crc: It's likely not bigforth. The word just made me think of it - maybe it also starts with a b or something. 2022-03-09 13:43:23 vms14: With more than a single data stack, your compiled words have to contain bits to tell them which one to work on, and have to spend the runtime checking on that. So it makes code less compact and less fast. 2022-03-09 13:44:31 KipIngram: yes, but using the return stack feels wrong for me (for something that it's not for what the return stack is for) 2022-03-09 13:45:48 I see people using the return stack sometimes in order to have a bit cleaner code and not having a lot of items in the parameter stack 2022-03-09 13:46:10 if you had a secondary stack, then that would be its purpose so it would just feel fine in those cases 2022-03-09 13:46:28 yet I know forth assumes you know what you're doing, but still 2022-03-09 13:46:44 I've explored using a third stack, but ended up dropping back to just two 2022-03-09 13:47:05 yes at the end it has no sense if you think a bit 2022-03-09 13:47:22 so you just use the return stack if you want, as long as you clean the stuff correclty 2022-03-09 13:47:26 using return stack is fine as long as you keep things balanced (unless doing intentional early exits or such) 2022-03-09 13:47:33 but feels like calling for troubles 2022-03-09 13:48:12 I suppose it's just I'm new to forth and this stuff somehow "scares" me 2022-03-09 13:49:53 vms14: Yes, this one I'm remembering may have had four *data* stacks. I agree re: the return stack; >r and r> are just there to help you "out of a pinch," and the stack frame thing helps minimize those too. >r and r> are really sort of more "stack manipulation words." My need for all of those went down. 2022-03-09 13:50:20 I like having *access* to the return stack, though - I have "double level return" words in my Forth, which is sure not something you could do in C. 2022-03-09 13:50:35 ;; and "conditional" variants. 2022-03-09 13:51:21 But yes - really the return stack should be for return addresses. 2022-03-09 13:52:24 Well, I can't find that multi-stack one I'm thinking of. My "clever googling" is falling flat. I suppose it didn't get much traction. :-) 2022-03-09 13:53:25 for me feel funny recursion in forth 2022-03-09 13:53:45 because I've once made an html generator in lisp and made an auxiliar recursive function 2022-03-09 13:53:53 having more than one data stack is weird 2022-03-09 13:54:00 and I was blaming myself because the name of that function was "recurse" 2022-03-09 13:54:20 and then I see in forth to make a recursive word you just type "recurse" 2022-03-09 13:54:40 I feel* 2022-03-09 13:55:27 i never use recurse 2022-03-09 13:55:28 its weird 2022-03-09 13:55:28 I try to see if I'll like forth, but the more I see it, the more it seems like a language made for me 2022-03-09 13:55:33 and odd style 2022-03-09 13:55:45 like for example I always do everything in a reverse way 2022-03-09 13:55:53 so forth will at least understand me 2022-03-09 13:55:57 xD 2022-03-09 13:56:03 you can factor if recurse then ; into a single word :) 2022-03-09 13:56:31 andnot eat that rstack space 2022-03-09 13:57:16 one thing that really confuses me on a similar topic 2022-03-09 13:57:22 The most common way to tail recurse is to just use the name of the word. 2022-03-09 13:57:43 is how machineforth can do `;` multiple times in a definition 2022-03-09 13:57:55 vms14: The system has to know how to handle that - anytime the last word of a definition is another definition, it can replace the usual "call" with a jump. 2022-03-09 13:58:22 eris[m]: I have ;, for that. It compiles the (;) but doesn't leave compile mode. 2022-03-09 13:58:49 KipIngram: didn't know you could name the same word inside its definition 2022-03-09 13:59:03 then why would you want "recurse" 2022-03-09 13:59:08 It depends on the system. 2022-03-09 13:59:24 Older ones wouldn't let you do that - the word wasn't visible until after it's compilation was done. 2022-03-09 13:59:55 well logic says you can't use a word until it's defined 2022-03-09 13:59:57 I think Chuck had it that way to facilitate redefining words, but I may be mis-remembering. 2022-03-09 14:00:03 See, it is defined. 2022-03-09 14:00:10 It's just not completely compiled yet. 2022-03-09 14:00:17 It's defined as soon as : finishes executing. 2022-03-09 14:00:22 It's in the dictionary. 2022-03-09 14:00:36 You don't need the whole dictionary until you RUN it. 2022-03-09 14:00:44 I'm sorry - the whole "definition." 2022-03-09 14:01:14 So it's a design choice as to whether you allow it to be found during that phase. 2022-03-09 14:01:26 If you do, it's a way to recurse. 2022-03-09 14:01:45 If you don't, it would throw an error, unless a prior definition of the same word existed. 2022-03-09 14:02:17 I do allow it, but I also have added a special word for recursing - I call it ME 2022-03-09 14:02:26 machineforth has the same word end a definition as exit earlier than its end 2022-03-09 14:02:33 And I have conditional variants of it. 2022-03-09 14:02:33 i had a forth that could do this 2022-03-09 14:02:37 0 it didnt have interpret mode 2022-03-09 14:02:43 but i believe mf does 2022-03-09 14:03:09 Oh, that's interesting. 2022-03-09 14:03:14 thats been bugging me for like a year now 2022-03-09 14:03:24 That would require explicit coding - there's nothing "automatic" about doing that. 2022-03-09 14:03:34 yea 2022-03-09 14:05:21 Anyway, I've got ;, to compile a (;) and keep going, and otherwise have ; and ;; and conditional variants of those two. And with that in my pocket I pretty much don't need any of the normal control structures. 2022-03-09 14:05:29 I don't even have IF ELSE THEN 2022-03-09 14:06:01 Nor any of the usual looping words - ME and its conditional buddies cover that. 2022-03-09 14:06:54 And I'm 99.9% sure my defs are shorter as a result. 2022-03-09 14:19:59 sorry I was disconnected 2022-03-09 14:20:08 have to change this shitty irc client 2022-03-09 14:20:26 actually have to change emacs, but didn't find something better 2022-03-09 14:28:02 https://pygmy.utoh.org/pygmyforthmanual.html did you try this forth? 2022-03-09 14:28:45 I was looking about a forth IDE and some guy told he enjoys pygmy forth 2022-03-09 14:28:53 which is a forth written in python 3 2022-03-09 14:35:04 KipIngram: btw in this manual there is an example of using recursion by naming the same word 2022-03-09 14:35:24 you just define the word before as a placeholder 2022-03-09 14:35:42 : FAC DUP ; ( just a dummy definition) 2022-03-09 14:35:42 : FAC ( n - n!) 2022-03-09 14:37:48 but this shouldn't work in normal forths now that I think about 2022-03-09 14:38:30 as in this case this fac word will always refer to the old definition, which means this forth just replaces the old definition 2022-03-09 14:49:43 KipIngram, how does the frame work? i see that } cleans things up but what does { do? 2022-03-09 14:55:21 { saves the previously existing frame pointer to the return stack, sets the new value. 2022-03-09 14:55:38 It's just set equal to the stack pointer as its new value. 2022-03-09 14:56:02 Then following words will move the stack pointer as usual, but won't move the frame pointer, so it can be used as a fixed reference point. 2022-03-09 14:56:51 } sets the stack pointer back to the frame pointer, retrieves the old frame pointer from the return stack, and offsets the stack pointer some more per the drop count. 2022-03-09 14:57:54 The most straightforward way to use it would be to have words that get you addresses for the various stack cells, like s0, s1, etc. I actually have some functionality built in as well, like @3 !2 and so on. Just to reduce primitive count. 2022-03-09 14:59:20 vms14: I am not sure if you know of acme/sam editors. they are versatile. 2022-03-09 15:00:24 No, I haven't tried them. I generally don't change without a good reason, and I'm completely happy with vim. 2022-03-09 15:01:44 It was only begrudgingly I switched from emacs to vim - I was happy with it too. I just decided that vim seemed to have more of a "community" around it, and I didn't particularly relish the Lisp-ish-ness of emacs scripting. 2022-03-09 15:01:59 Not that I've really learned vim scripting that well yet, either. 2022-03-09 15:02:20 But I have gotten fairly handy flying it, so it's doing the job. 2022-03-09 15:06:19 KipIngram, so it only helps with words relative to frame pointer and not with traditional words relative to stack pointer? 2022-03-09 15:07:37 words like s0 specifically written to take frame pointer into account i mean 2022-03-09 15:16:42 vms14: I think having lots of drops after a loop is typical, since the loop would be balanced 2022-03-09 15:16:55 It's more smelly after something that's not a loop 2022-03-09 15:17:22 Most forths have 2DROP as MrMobius defined 2022-03-09 15:29:13 joe9: I saw them when I had a look at plan9 2022-03-09 15:29:13 i think words to rearrange the stack would be really useful like : R2134 SWAP ; and : R3124 ROT ; you dont need them if they are that simple, but they would be handle when you have two nested loops 2022-03-09 15:29:35 it's the 9 in your nickname related to plan9? 2022-03-09 15:29:44 and do you use acme or sam? 2022-03-09 15:29:50 since you need to juggle the stack to get things in place for the inner loop then juggle them back after the inner loop so theyre ready for the outer loop 2022-03-09 15:29:59 liked sam, seemed like the evolution of sed 2022-03-09 15:30:01 you might spend more cycles on juggling than real work 2022-03-09 15:30:09 and acme was supposed to be more like emacs 2022-03-09 15:30:17 hmm maybe I should try it again 2022-03-09 15:31:25 vms14: yes and yes to both your questions. 2022-03-09 15:31:32 I use acme as my daily driver. 2022-03-09 15:32:02 I like having the flexibility of SRE when needed. 2022-03-09 15:32:46 it is more of a system that works together. 2022-03-09 15:32:59 hmm 2022-03-09 15:33:11 I want to escape from emacs, I'll reconsider acme 2022-03-09 15:33:36 but you use acme outside of plan9 I suppose 2022-03-09 15:34:31 I use inferno, a plan9 derivative and acme with it. When I was using plan9 (9front), I used to use sam a lot more. 2022-03-09 15:35:00 I like having the system work together rather than a do-all editor. 2022-03-09 15:36:11 :O 2022-03-09 15:36:48 I have a theory for lispers in a way that I think: to love lisp you have to be crazy first 2022-03-09 15:36:54 does it apply for forth? 2022-03-09 15:37:15 are usually forthwrights crazy? 2022-03-09 15:37:28 one is called crazy for doing something different. 2022-03-09 15:37:45 joe9: right, that's the real definition 2022-03-09 15:38:08 i would rather try it myself if I get a reference from a trusted source and decide. 2022-03-09 15:41:44 joe9: what do you do with inferno 2022-03-09 15:41:58 have you installed it as a standalone or on top of another system? 2022-03-09 15:43:06 I've tried once to install plan9 from 9front in "raw hardware" but no internet drivers and using a vm was less interesting 2022-03-09 15:43:14 my desktop is an OpenBSD. On which, I use drawterm to connect to a 9front machine. I also 9ferno on that machine. 2022-03-09 15:43:19 but I see inferno can be on top of another system 2022-03-09 15:43:23 9ferno is my fork of inferno for am64. 2022-03-09 15:43:40 9ferno can run native or hosted. I am using it in hosted mode on OpenBSD. 2022-03-09 15:43:50 s/9ferno/inferno/ 2022-03-09 15:44:54 what makes you use inferno instead of another system? it's just because you like the system or there are some features you want from it? 2022-03-09 15:44:54 my server is a 9front native machine. 2022-03-09 15:45:00 :O 2022-03-09 15:45:17 inferno, because I understand it. 2022-03-09 15:46:26 9front/inferno/plan9 are better structured (abstracted). I find them easier to learn. 2022-03-09 15:47:41 and, the code is understandable and of better quality, imho. 2022-03-09 15:49:22 I have wasted way too much on linux/windows to understand the importance of simplicity. Have you read the paper "cat-v considered harmful". 2022-03-09 15:49:26 ? 2022-03-09 15:49:39 I would recommend it, if you have not. 2022-03-09 15:52:22 not sure, but somehow feels familiar 2022-03-09 15:52:45 http://harmful.cat-v.org/cat-v/ 2022-03-09 15:52:49 "strength in unity". the whole system works together. instead of each application being an island. 2022-03-09 15:53:42 or, each application trying to be "the" system. 2022-03-09 15:55:24 check out man ls on linux and man ls on 9front. It would take days to just study the linux's manpage. Imagine having to chase a bug or trying to change something in the code. 2022-03-09 15:56:15 hah this is in part why I like netbsd (in this case does not apply as ls stills being big) 2022-03-09 15:56:30 but if you need something you'll end in linux 2022-03-09 15:56:57 in netbsd I cannot stop crying because stuff won't work and I have no idea about how to fix it 2022-03-09 15:56:58 I have not touched linux in years now, if you do not consider the android phone stuff. 2022-03-09 15:57:17 try OpenBSD, it is better engineered. 2022-03-09 15:57:21 stuff works. 2022-03-09 15:57:22 specially when a language tries to use ffi, won't find anything 2022-03-09 15:57:55 now I'm in debian, I don't cry when I want to use somethhing, it just works 2022-03-09 15:58:06 but I do cry if I type "top" 2022-03-09 15:58:08 XD 2022-03-09 15:58:48 i find it hard to invest my all in plan 9's views 2022-03-09 15:58:53 and one of my goals is to end implementing some sort of forth in kotlin for making apps in android studio 2022-03-09 15:59:05 it likes text too much 2022-03-09 15:59:07 so I'll need linux 2022-03-09 15:59:16 and frankly? 2022-03-09 15:59:17 text isnt great 2022-03-09 15:59:37 eris[m]: you can serialize stuff :D 2022-03-09 15:59:44 horrible 2022-03-09 15:59:46 xD 2022-03-09 16:00:00 serialisation is fixing an issue that shouldn't be there in the first place 2022-03-09 16:00:14 plus, none of the system works with anything other than text 2022-03-09 16:00:18 if you start thinking, everything is wrong 2022-03-09 16:00:38 really, at a high level, i'd like a more abstract data structure than 'potentially limitless byte stream' 2022-03-09 16:00:51 and people prefers to change the road to make it able for a square shaped wheel to run on it instead of "reinvent the wheel" 2022-03-09 16:00:57 just look at html css js 2022-03-09 16:01:06 like an array 2022-03-09 16:01:08 we shouldn't be using http and html today 2022-03-09 16:01:29 i still think an OS where everything takes in and spits out arrays rather than strings would be very interesting 2022-03-09 16:01:45 but I bet you we'll still using them for much more years 2022-03-09 16:01:59 not me 2022-03-09 16:02:01 im getting out 2022-03-09 16:02:18 :O how 2022-03-09 16:02:48 chucking my computer into the flames 2022-03-09 16:03:08 that sounds like the only way 2022-03-09 16:03:12 and running as far away as i can before the battery explodes 2022-03-09 16:03:28 or putting everyone else's computer 2022-03-09 18:18:59 vms14: vi is a better evolution of ed IMO 2022-03-09 18:31:40 but not than emacs 2022-03-09 18:32:08 emacs is much better than vi/vim for several reasons, at least for me 2022-03-09 18:32:16 but I want to escape from it 2022-03-09 18:32:36 I dislike a lot of things from emacs, yet didn't find something "better" 2022-03-09 18:33:02 but I think I'll reconsider acme, I wasn't even an emacs user when I saw it 2022-03-09 18:40:28 brb 2022-03-09 19:24:46 joe9: I've installed acme in debian and it's your fault 2022-03-09 19:25:03 https://code.google.com/archive/p/acme-sac/downloads from this .deb 2022-03-09 19:26:44 and just found this https://github.com/karahobny/acme2k 2022-03-09 19:38:35 still it seems I won't get the same experience if I don't use inferno/plan9 2022-03-09 19:42:25 I cannot copy and paste :/