00:00:00 --- log: started forth/18.10.22 00:00:03 Essentially you build (or simulate) a computer from the logic gate level 00:00:06 Yeah 00:00:08 Should be fun. 00:00:08 Cool. Even if you use Verilog, spend at least some time using it "structurally" instead of behaviorally. 00:00:16 siraben: and i had done the last step to CPU 00:00:24 Where you use it to actually instantiate and connect up gates, flip flops, registers, etc. 00:00:54 Should I use Verilog or write a circuit simulator myself? 00:01:07 When you use it like that you're using it to basically specify a schematic in Verilog. 00:01:16 siraben: and i think we could make an alternative option, like use its verilog like lang to build a stack vm, and build a forth on it, then use that forth to implemnt a tetris game 00:01:23 Well, a circuit simulator (a good one) is a fairly large undertaking. 00:01:25 you see, save lots of work 00:01:40 I think it's a great thing to do, but you'll spend a lot of time on that as opposed to becoming familiar with logic. 00:02:00 How did N2T make the final game? 00:02:16 Ah yeah, so better use a standard tool. 00:02:37 Well, until you decide you just want to do a simulator. I think I'd leave that for later. 00:02:39 Go full circle by having the computer emulate itself 00:03:00 So are verilog programs usually free software? 00:03:02 Icarus Verilog is good, and you can couple it to GTKWave for output timing diagrams. 00:03:04 As in freedom. 00:03:08 ^ that one is. 00:03:20 the riscv team use another tool 00:03:31 And if you start to do really big stuff you can use verilator. 00:03:42 It produces a C program that does a cycle accurate simulation. 00:03:54 Also free. 00:04:59 I'd probably use iverilog at first, when I was doing "pieces," then gradually shift to verilator as the whole thing came together. 00:05:39 But a lot of the learning you want to do comes before you start simulating stuff. 00:06:00 You'll want to learn how adders and other such things work, techniques for designing good state machines, and so on. 00:06:02 Right. 00:06:10 It'd remove the mysteries on how exactly registers and implemented, how addressing works and so on. 00:06:11 --- join: ncv (~neceve@2a02:c7d:c5c9:a900:6eaf:6ef7:3b81:d5f6) joined #forth 00:06:11 --- quit: ncv (Changing host) 00:06:11 --- join: ncv (~neceve@unaffiliated/neceve) joined #forth 00:06:18 Right. 00:06:23 Actually, some video games are good simulators for circuits 00:06:27 Like Minecraft and Powder Toy 00:06:36 So that might be an option before the more heavy stuff 00:06:52 Then as you get a feel for what sort of stuff is easy in hardware and what's hard, you get better at making the hardware/software decisions. 00:07:40 Playing Minecraft how I first learned a lot about circuits, and watching the videos of others 00:07:44 It is very satisfying to see it all come together with precise timing. 00:08:00 I love the idea of games being used to educate. 00:08:09 I don't think we exploit that as thoroughly as we could. 00:08:50 I agree. Minecraft is just one example of a potential goldmine of learning opportunities 00:09:13 I'm not actively aware of any other game that is generic enough to be able to be used for non-gaming purposes, but likely there are more. 00:09:44 Ah there's 00:09:44 https://www.kickstarter.com/projects/871405126/turing-tumble-gaming-on-a-mechanical-computer 00:09:55 KipIngram: which might interest you, being a hardware-oriented person. 00:10:45 One of my kids shared a video with me a while back, it was a little gadget with rectangular panels on a spindle. 00:10:55 0 was written on one side of each spindle, and 1 on the other. 00:11:26 How do you teach your kids hardware/software stuff? Do they know Forth by any chance? 00:11:28 and one end of each panel had a little tab that swiveled, and when it was in one position it extended over the next panel. 00:11:30 It would count. 00:11:38 Ah a binary counter. 00:11:41 When you flipped a panel from 0 to 1, the tab did nothing. 00:11:49 oh minecraft 00:11:54 red powder 00:11:56 When you flipped it from 1 to 0 the tab fell over to cover the next panel. 00:12:04 So yeah, it was a "carry flat." 00:12:04 yunfan: Yeah, redstone 00:12:06 flag 00:12:15 KIpIngram: Right, I recently saw one at school too 00:12:19 And it even *looked* like a flag when it was protruding. 00:12:23 I like little things like that. 00:12:34 Some students in the design technology studio made a model out of wood 00:12:49 That may have been the very video I saw. 00:12:51 Panels that you flipped and the transition to 1 to 0 caused the adjacent one to flip as well 00:12:57 Right. 00:13:07 Very evocative of what happens in a circuit. 00:13:13 Do your kids learn Forth? 00:13:15 Or programming? 00:13:21 No, no Forth converts yet. 00:13:51 It'd be interesting to see how kids would learn it. I think the unambigious nature of Forth should help. 00:13:59 I've got five daughters One's in biomedical engineering grad school, and one just starting biomed undergraduate. 00:14:13 Both of them use/study Python. 00:14:21 A fair amount of confusion results from them knowing math and the mathematical operators not corresponding to programming syntax 00:14:27 e.g. x = x + 1 00:14:50 Right. But see, my first semester in college I bought an HP-41CV calculator. 00:14:52 RPN. 00:15:00 Programmable, four element stack. 00:15:07 (cursiously that statement in Haskell leads to an infinite loop, because the = sign is very strong in that language) 00:15:08 That's the first programming experience I ever had. 00:15:21 So I burned "stack thinking" into my synapses before I ever learned anything else. 00:15:21 RPN is fast. 00:15:30 And intuitive. 00:15:58 That particular calculator had great keys mechanically too - I could hold it in my left hand and "touch type" on it with my right. 00:16:06 I was fast as shit - very dangerous with that thing in my hand. 00:16:11 Like a gunslinger. :-) 00:16:35 Key technology changed over the years, for the worse. 00:16:49 Huh why did the thought not pass my mind to make an RPN mode for my calculator 00:16:52 It became impossible to be as fast, just because the keys didn't work with you in the same way. 00:17:05 Um, that's what you're doing. 00:17:10 Instead of hitting ENTER, keys would trigger calculations 00:17:31 Well, ENTER is just there when you have two numbers without an operation in between. 00:17:40 In Forth it's a space. 00:17:44 Right but not nearly using the full potential perhaps 00:17:59 Especially with floating point 00:18:27 Yeah it is fast for quick calculations that need fixed point and don't exceed 16 bit 00:18:41 Although I have some words for 32 bit as well 00:18:46 Right. My Forth's going to support floting point. 00:19:40 A . in the number makes it floating point, and it just gets left on the FPU internal stack. 00:20:35 The main thing standing in the way of a "really good calculator mode" is the fact that + - * / are integer operators. 00:20:39 Without the OS under me things are pretty hatd 00:20:40 I'll need f+ f- f* f/ 00:20:41 Hard 00:21:06 I contend that none of it is "hard," really. Just a "voluminous" amount of work. 00:21:53 If my primary goal was numerical work, it would probably make more sense to make + - * / floating point, and have i+ i- i* i/ for integer. 00:22:04 But I want to be a bit more true to Forth than that. 00:23:06 But of course Forth will let me make a "calculator" vocabulary and define the operators to do whatever I like. 00:23:51 : + state @ if postpone f+ ;, then + ; immediate 00:24:02 KipIngram: https://github.com/siraben/ti84-forth/blob/master/forth.asm#L1450 00:24:10 Floating point stack operators 00:24:25 FDROP FDUP F+ D* FSQUARE FSQRT 00:24:26 etc. 00:24:31 Yes. 00:25:12 It's interesting that TI has a very stack based thing going on at the OS level, but doesn't expose it for the user. 00:25:17 Oh, sorry, that "then + ; above should be "then f+ ;" 00:25:32 siraben: you mean kjava? 00:25:33 Yes, tells you that HP really had it right all along in those days. 00:25:43 yunfan: kjava? 00:26:06 I've seen papers that present all the "basic math theory" using RPN. 00:26:15 yes, i remember ten years ago, when i were using dumb cellphone 00:26:23 We say for example that the commutative law means a + b == b + a. 00:26:30 Well, that's just a b + == b a + 00:26:30 they has a kjava enviroment which could support little .jar games 00:26:32 etc. 00:26:38 and since jvm is stack based 00:26:41 Losing the OS means that I have approximately 300% the work needed, so I should probably get it back in there 00:26:41 You can build it all up using RPN from the jump, and it works just fine. 00:26:46 Otherwise the time spent programming vs time spent using isn't worth it as much 00:26:49 So we could teach our kids RPN from first grade. 00:26:56 KipIngram: Right. Proving laws. 00:27:13 a b AND == b a AND 00:27:18 Right. 00:27:20 All of it. 00:27:30 Heck, you could even formulate De Morgan's and the like. 00:27:36 So infix is just a CHOICE we've made, and in my opinion a less than optimum one. 00:27:59 Well, I can't prove it exactly but there's a one-to-one correspondence with the tree-like structure in mathematics and stack-based processing. 00:28:14 Yeah, infix is only standard because we made it so. 00:28:15 Absolutely - it's been proven. 00:28:33 Strangely, we do have prefix here and there 00:28:44 f(g(x)) or ln(x) 00:28:49 Or integral(x,dx) 00:29:14 Math notation would be absolutely unacceptable as a programming language. It's just convention. 00:29:16 Right. That last could be dx x integral 00:29:28 dx x f integral 00:29:37 e.g. x^5 (d/dx), looks like a fraction! But it's a derivative. 00:31:17 Also the fact that exponentiation isn't usually indicated with an operator in math is interesting. 00:33:47 --- join: dave69 (~dave@90.20.215.218.dyn.iprimus.net.au) joined #forth 00:34:10 Well, sometimes it's indicated with ^ and in some languages as **. 00:34:29 Digital guys think of ^ as the exclusive or operator, though. 00:34:38 Yeah 00:34:57 So in Forth you might say " y^x" 00:35:21 I think it should be named EXPT 00:35:30 I'll probably go with ^ for exclusive or and ** for "power." 00:35:37 But it's a matter of taste, could be ^ or ** 00:35:38 What's the T? 00:35:58 I tend to like "terse symbology," but that's just a preference. 00:36:03 Right now I have and, or, not. 00:36:09 Not sure what the T is. 00:36:18 My exclusive or is written as XOR 00:36:24 But may switch to &, |, ~ at some point. 00:36:29 --- quit: dave0 (Ping timeout: 240 seconds) 00:36:31 Mine too right now. 00:36:57 I've gotten faster at typing on the non-ASCII layout of the calculator. 00:36:59 In my mind "exp" says "e^x." 00:37:04 Pretty interesting keyboard. 00:37:13 I mean non QWERTY 00:37:20 Well, and non-ASCII 00:37:23 --- join: rdrop-exit (~markwilli@112.201.162.180) joined #forth 00:37:42 I'm going to add SIN COS TAN and more soon, for floating point. 00:38:08 I'm curious as to how the OS can overload operators like +, so when you add fixed point it just uses fixed point. 00:38:11 Yes, I'll have those as well. 00:38:23 You have to keep up with types. 00:38:24 Or maybe everything's floating point and it just prints out the mantissa 00:38:33 I plan to add that as an alternate interpreter later. 00:38:45 Going to have a "type stack" that gets updated along side the integer and floating point stacks. 00:38:47 I only use fixed point 00:39:04 Matching the types at the top of the type stack becomes a word search impacting thing. 00:39:27 I do plan to do that so it gets worked out at compile time - it won't be something I do at run-time. 00:40:36 Or you could do what I said above - have a vocabulary that demotes + - * / to i+ i- i* i/ and makes the short symbols floating point. 00:40:43 That's not as fancy, but it's part of standard Forth. 00:41:53 How does gforth know about invalid memory access? 00:42:04 0 0 ! throws an exception 00:42:11 I think it uses the processor's memory management capabilities for that. 00:42:33 Hardware thing - the processor itself can throw an interrupt if you violate the memory access rules you've established. 00:43:00 GForth just has arranged to catch and handle that interrupt. 00:43:03 Ah. 00:43:07 You won't get that in a Z80. 00:43:59 Old chip. 00:44:54 What time is it over there? 00:47:48 2:45. I woke up thirsty a little after 1am, probably won't go back to bed. I usually wake up at 4am anyway. 00:47:55 Weekday mornings. 00:48:13 And sometimes that's a struggle - so given that I feel pretty awake I think I'll just run with it. 00:50:02 re: type stack, why not just have type tags on the stack entries? optimization to use the x87 stack without actually manipulating the type data most of the time? 00:50:51 I don't plan to integrate that capability into the base system. 00:50:53 That's one reason. 00:51:09 And the other is that I have an integer stack, like normal, but it's more efficient to keep floats on the FPU. 00:51:24 So two separate stacks - how are the entries logically interleaved? 00:51:31 The type stack will express the interleaving. 00:51:53 As far as the data goes, 1 1.0 and 1.0 1 will produce the same state. 00:52:52 same state except for the type stack you mean? 00:53:55 and you implement polymorphism by dispatching based on contents of the type stack? (apologies if that was covered in part of the scrollback i haven't read) 00:53:59 Right - adding the type stack will add the ability to distinguish them. 00:54:30 Yes, the word search process will require that the word arguments match the type stack "top." 00:54:42 So what I will need will be extra fields in the dictionary, to capture that information. 00:54:59 I probably will express it in the normal way as a stack effect comment. 00:55:12 : + ( f f -- f) ... ; 00:55:24 : + ( i i -- i) ... ; 00:55:37 Now 1 2 + will use the second one - 1.0 2.3 + will use the first one. 00:55:51 And as I noted, that will be tracked at *compile time*. 00:56:08 The compiler can update the type stack (a copy of it, at least) during compilation. 00:56:29 Once words are compiled, they'll just contain the right words, and it will no longer matter how that happened. 00:57:04 right, otherwise you'd waste a lot of cycles doing jump table lookups 00:57:10 (which is fine if performance doesn't matter much) 00:57:13 Once the stack effect of the primitives are specified, the interpreter / compiler will be able to *compute* the stack effect of other definitions, at least in many cases. 00:57:19 right 00:57:32 Yes, dynamic typing brings some added power, but I've decided to forego that. 00:57:44 I think I can make a big step forward with static / compile time handling. 00:57:50 attempted something similar a few years ago but it got too complex and i mothballed it 00:58:18 Yes, I suspect it could get out of hand pretty quickly if it's not done just right. 00:58:26 I tend to "think about" such things a long time before starting to code. 00:58:51 The "get it out the door as fast as possible" mentality in the industry sort of prohibits that sort of thinking most of the time, which is why I like doing this as a hobby. 00:58:58 I can let things "ferment" as long as I want. 00:59:08 Some ideas are "beer ideas," and ferment fast. 00:59:15 Some are "mead ideas" and take a long time. 00:59:31 A statically typed Forth would be enormously useful for beginners. 00:59:39 I've got 20 gallons of mead fermenting since last December. 00:59:57 Literally - metaphor not in play. 01:00:00 --- quit: dys (Ping timeout: 245 seconds) 01:00:16 Going to try it out during the Christmas holidays. 01:00:22 except instead of a type stack i had 40-bit "words" arranged into memory pages where each 4kB page had 768 8-bit type tags, a 256-byte scratch area, and 768x 32-bit tagless part of word 01:00:40 IIRC StrongForth was a statically typed Forth 01:01:45 had plans for doing compile-time type inference where practicable and a too-clever dispatch system for handling common dispatch cases 4 at a time 01:01:45 I've been reading about how the TI operating system does paging, and it's pretty interesting. The reason why I can't execute over $C000 is because that area the the page boundary and wouldn't really work anyway. 01:01:49 is the* 01:01:56 but it became a huge headache in practice 01:02:12 --- nick: dave69 -> dave0 01:02:14 I never cared for such things (statically typed Forths) 01:02:26 Looks like I'm short on memory, I'll need to find a way to get more under $C000 to still remain direct threaded. Because after experimenting indirect threaded it's around 50% slower :( 01:02:36 rdrop-exit: Me either, in a way - that's why I don't want that as "part of my system." 01:03:01 KipIngram: Should be an extension. 01:03:04 I think of it as an application program, designed to let me do stuff similar to what I'd do in, say, Octave (Matlab clone-ish). 01:03:24 So I'd want to be able to extend the operators, to vectors, matrices, etc. 01:03:32 KipIngram: Not sure if I asked you before but have you used Emacs Calc? 01:03:52 I see 01:03:52 No, I used emacs for a period of time as my editor, but didn't really get into all of the "extras." 01:04:06 RPN and has powerful scientific capabilities. 01:04:22 I think viewed that way, rdop-exit, it's not "counter to Forth mentality" at all. 01:04:29 Matrices, vectors, complex numbers, gamma function, bernoulli, rewriting system, bignums, all the things. 01:04:38 It's the nature of the problem I'll be trying to solve. 01:04:42 siraben: i'll check it out 01:04:48 Application-level I agree 01:05:08 Putting it in at the ground floor forces you to carry that baggage with you everywhere. 01:05:14 koisoke: The manual (type C-h i mCalc) is very good 01:05:24 It’s at the application level that things get fancy and bullit-proofed too 01:05:30 And Forth DOES counsel us to carry baggage only where it's required. 01:05:31 koisoke: C-x * * opens the calculator for you 01:05:43 KipIngram: Precisely. 01:05:46 rdrop-exit: Right - totally agree. 01:06:00 My favorite calculator it the HP-16C 01:06:13 If your application is small enough and you can check that it works, it works, don't need extra baggage. 01:06:18 Never used that one. Is that the "programmer's calculator"? 01:06:19 i seem to have the mode .el installed but not the docs 01:06:31 You could vary the word size of the calculations 01:06:37 it's like the 15c but with base conversions and whatnot 01:06:37 Oh, interesting. 01:06:46 koisoke: What system are you on? Perhaps you could PM me and we could work it out. 01:06:55 https://en.wikipedia.org/wiki/HP-16C 01:07:32 KipIngram: The built in macOS calculator has a pretty good array of programmer oriented features. 01:07:33 I’ve had one since it came out 01:07:43 Although the lack of a stack-based nature makes it somewhat inconvenient. 01:08:01 I just shudder at trying to use non-stack calculator now. 01:08:01 siraben: ubuntu 18.04. i think i just need to install a docs package 01:08:13 I have HP-41C and HP-42S emulators on my phone. 01:08:16 koisoke: Try install texinfo 01:08:21 They're GORGEOUS - look just like the real thing. 01:08:33 siraben: i have texinfo just not that specific document 01:08:35 And emacs25-common-non-dfsg or emacs26-common-non-dfsg depending on your system 01:08:37 I also have a HP48GX, but rarely use it 01:08:44 Put them in full-screen and it's like holding the calculator, except for the different (i.e., nonexistent) key feel. 01:08:48 Huh. 01:09:00 They have haptic key feature, but I opt out of it. 01:09:15 I had one; don't even know where it is anymore. My wife uses that one. 01:09:24 She's 10 years younger, so it was "current" when she was in college. 01:09:48 I have an HP-34S too, which is a "re-flash" of some other HP calculator. 01:10:05 Based on HP-20b and HP-30b. 01:10:08 you mean wp-34s? 01:10:18 When I was in high school we weren’t allowed to use caclulators for tests, only sliderules 01:10:26 Yes, sorry. 01:10:42 It's re-flashed and has key stickers and an overlay. 01:10:49 rdrop-exit: What? Really? 01:11:00 Yup 01:11:03 I'm lucky. My calculator really is darn powerful 01:11:03 :-) 01:11:07 Feels like cheating sometimes 01:11:10 How old are you, rdrop-exit? 01:11:19 Only 56 01:11:28 I'll be 56 in January. 01:11:30 KipIngram: what about you? 01:11:47 when i was in college we were allowed calculators but i used a slide rule because the ti-36 i had made me too angry to concentrate 01:12:06 Almost 18 here, so you guys have been alive for more than three times I have. 01:12:20 I bought a cheap plastic slide rule freshman year in college and forced myself to use it for a few weeks in my "Engineering 101" class. 01:12:32 Just so I could say I had some experience with it, and so I understood how it worked. 01:12:36 The scale of a decade is just unimaginable to me. 01:12:37 :) 01:12:56 I read about slide rules, seems pretty handy but I can't imagine how I would have used them. 01:12:58 Hm. 01:12:59 Yeah, the period since the 1960's has truly been the "electronics era." 01:13:04 AMAZING progress. 01:13:29 That's good. So we can finally use the advanced technology to solve problems like climate change 01:13:30 Believe it or not, when I was in 1st grade we had inkwells 01:13:32 Which has gotten so much worse over the same period. 01:13:40 When you consider that the transistor wasn't even invented until the 1950's. 01:13:54 A few months ago I read about a lab in Israel that had implemented a 12-atom transistor. 01:13:55 1947 i thought 01:14:01 Could be. 01:14:09 Maybe we picked it up in Roswell. ;-) 01:14:11 but not commercially useful until a bit afterthat 01:14:40 If they commercialize "few atom" transistors in, say, the next 30 years, we'll literally have gone from birth to theoretical limit in silicon electronics in a century. 01:15:11 integrated circuits becoming cheap was a big phase change i wish i could have seen in person 01:15:17 And despite this progress software latency has gotten worse. 01:15:24 Yes, it was pretty remarkable. 01:15:28 I suppose computers felt faster in the 80s even though they weren't, right? 01:15:31 Just always something new to learn. 01:15:47 Yes, turn it on and it’s ready 01:15:47 Well, yes, I think so. 01:15:59 They'd feel faster now if we hadn't bogged them down with software bloat. 01:16:25 I used to get pissed every time my Windows machine too five minutes to boot. 01:16:27 "A 1000x speedup should bring a 60 second boot time to 60 milliseconds." 01:16:29 No excuse for it. 01:17:03 eh, boot time is a special case since you are waiting for (sometimes mechanical) hardware to respond at the rate it responds 01:17:22 Well, I think the way they go about it has an effect too. 01:17:42 Why not just have a RAM image of the freshly booted system, and just copy it into RAM and say "go." 01:18:06 siraben: in the 80's, computers had BASIC in rom, so it never failed to boot and it took a fraction of a second to boot up 01:18:11 Loading a few GB from an SSD into RAM should be fast as greased lightning. 01:18:22 Of course, there's some hardware initialization to do too, but it shouldn't take long. 01:18:30 yeah you could almost do that if you designed the freshly booted system state to cope with arbitrary changes on disk 01:18:42 then it would be just a special case of hibernate 01:18:49 My Emacs "boots" up in 5 seconds flat, with a heck of a lot of configuration. 01:19:21 That’s just sad 01:19:22 KipIngram: Also considering the push towards things like ASLR for security measures 01:19:24 My Mac isn't as offensive - it will boot in a minute or less. Not as fast as it should, but fast enough not to annoy me. 01:19:48 I just never turn my Mac off 01:19:56 Well, that also bothers me - we've gotten ourselves into a bad situation security-wise. 01:20:14 It should be possible to have a "personal" computer that doesn't have to be as security conscious as a multi-user OS would need to be. 01:20:22 I tend to keep Emacs (and my computer) running for weeks so I don't worry about startup time. 01:20:25 Back to "baggage being carried where it's not needed." 01:20:35 Me too. Or months. 01:21:03 KipIngram: Funnily enough, it's still hard to have actual multi-user configurations. Try setting that up on Macs and see how isolated each user is. 01:21:26 Well, that wouldn't surprise me - I've never tried. 01:21:37 I’m thinking of getting an old machine and trying out NetBSD as my development environment 01:21:50 And the fact that we "need that security" to protect us against attacks from the outside? Well, that's just a pathetically broken infrastructure. 01:21:56 KipIngram: Mobile phones in a sense are "personal computers", single user. 01:22:02 Yes. 01:22:04 But still with a lot of security measures in place. 01:22:23 Things get much more complicated them you have networked devices that can run arbitary code. 01:22:33 It'll be an endless cat-and-mouse game. 01:22:39 Right - "arbitrary code" being the key problem there. 01:22:52 I think we took a misstep when we broke down the barrier between "code" and "data." 01:23:00 "active content" on the web, and so on. 01:23:07 I understand why they thought they needed it at the time. 01:23:13 When networks were a lot slower. 01:23:17 But do we still need that? 01:23:19 I'm not so sure. 01:23:36 Apparently so. Browsing the web without JavaScript gets difficult quickly. 01:23:44 Barring reading articles and so on 01:23:48 Right. 01:23:58 try turning off javascript... the www becomes unusable 01:23:59 But that's a "self-imposed" need - not a "fundamental need." 01:24:08 We need it because we've decided to need it. 01:24:08 siraben: i agree 01:24:37 I use uMatrix so JavaScript is disabled by default 01:24:43 I suspect that with mature modern networking technology we could solve those problems a different way. 01:25:17 But there's just no way such a "fundamental culture reboot" is going to happen. 01:25:58 Not to mention the profileration of tracking on the internet, oh God. 01:26:08 proliferation* 01:26:21 Right - I was just about to mention that there are forces out there that don't WANT a better solution - they profit from the current model. 01:26:33 So the tech is there, it's just that our society has poorly adapted to its growth. 01:26:36 Commercial ones, government ones, etc. 01:26:47 That's what I think, yes. 01:26:50 I heard software gets really really bad at the government level. 01:26:55 Ironic because that's where it should be the best. 01:27:10 Hah hah - everything gets bad at the government level. 01:27:15 "Processes" of all kinds. 01:27:17 Can any of you recommend an IRC client for Macs, the one I’m using is mixing up the incoming order of messages 01:27:21 Why should software be exempt? 01:27:32 rdrop-exit: Which one are you using? 01:27:35 I used to use ERC 01:27:41 Colloquy 01:27:42 (Emacs IRC client) 01:27:43 Sorry - I actually run a console client on a remote machine and use mosh to connect to it. 01:27:55 Ok thanks 01:28:02 But now I use Riot which connects to a Matrix-IRC gateway 01:28:25 rdrop-exit: Are you sure the order of messages is wrong? 01:28:35 Compare it to the log: http://bespin.org/~nef/logs/forth/18.10.22 01:28:43 ok, BRB 01:29:11 Actually my order of messages is a little off, too, but I don't mind. 01:29:36 Different order, it seems to clustering incoming messages by author, kinda confusing 01:29:40 I blame the latency of the gateway, but I gain 24/7 connectivity to these channels. 01:29:49 Isn't that just a feature of IRC? 01:29:55 What is? 01:30:04 I might not get the messages here in the same order that, say, siraben does. 01:30:17 Maybe it's just the internet. 01:30:22 I'd expect each of our clients to display them in arrival order. 01:30:32 I’m new to IRC, hadn’t used it in decades 01:30:34 I've NEVER seen my client insert a message anywhere except the bottom. 01:30:38 Most IRC clients just save your message when you hit return 01:30:45 Yeah it has to be arrival order. 01:30:58 So then you can't count on arrival order matching on two different nodes. 01:31:13 Also it's impossible in general according to physics. Different observers see different orders of events. 01:31:19 So let's not worry about it :-) 01:31:23 hah hah. 01:31:26 Yes. 01:31:32 Instead of just coming in at the bottom in timestamp order, they jump around 01:31:48 Joe Armstrong said that I think, he used to be a physicist 01:31:51 Wait, no. 01:31:59 Different observers don't disagree on the *order* of events. 01:32:08 Just the time separation and space separation. 01:32:09 e.g. some messages arrive in the middle of the screen 01:32:20 Yeah orders are different 01:32:26 That's where the speed of light limit comes in - if >c velocity was possible you get different orders. 01:32:30 No, I'm pretty sure of this. 01:32:37 That's one of the reasons >c is forbidden. 01:32:42 Or at least related. 01:32:49 It's really forbidden because it takes infinite energy to reach c. 01:32:52 e.g. if I have two stars A and B explode *at the same time*, one person closer to A will say A exploded first. The person in the middle will say both did at the same time, and the person closer to B says that B exploded first. 01:33:08 Well, that's not the same thing. 01:33:11 But I see your point. 01:33:18 Right. 01:33:29 Those observers can use their known position to work out the real deal. 01:33:36 So maybe there is an absolute order of events, but we'll never know because physics says so. 01:33:41 If they are stationary with respect to each other, they will agree on simultanaity. 01:33:43 Right. 01:33:48 If they are in m otion with respect to each other they won't. 01:34:02 The problem is that you can't be sure if you are stationary vs. not 01:34:15 In practice no, but in theory you can. 01:34:20 In a "thought experiment." 01:34:30 This client really is buggy, I just got teleported into some physics chat room :) 01:35:21 Physics is putting an end to our quest for smaller transistors :) 01:35:37 siraben: in a 1D system, just give each guy a laser and a mirror; let them bounce their laser beam off the other guy's mirror. 01:35:43 Check the frequency of the returning beam. 01:35:50 If it's fixed, your stationary. 01:35:56 you're 01:36:16 Right, doppler effect. 01:36:37 But then by the time it takes for the pulse to reach you, you may have different velocities. 01:36:52 No, I'm proposing you do it continuously, with phase interferometry. 01:36:55 Count fringes. 01:36:57 Not pulses. 01:37:03 So you can be stationary within a margin of error. 01:37:27 But your original example, just the fact that if I'm closer to something it takes less time for a signal to reach me, exactly captures this IRC situation. 01:37:42 Also, when computing systems become interplanetary (to some extent they aready have), interesting problems will arise with latency. 01:37:45 If you're "electrically closer" to me than rdrop-exit is, you are likely to see my messages before he does. 01:37:55 And reliability of data transmission and so on 01:38:01 Byzantine generals problem, anyone? 01:38:15 KipIngram: Right. 01:38:33 Well, maybe it's more about the gateway's proximity to you guys, 01:39:06 Yes, right - it's not exactly "electrical." 01:39:18 It's more like hop-count type stuff. 01:39:28 I guess it's actually a blend of both. 01:39:57 And one of us might use a satellite link, and one of us a ocean floor cable. 01:40:47 Geosync orbit - that's a quarter second. 01:41:01 Almost. 01:41:17 Oof, thinking about just how much work has been put into the internet has caused a mind melt. 01:41:24 Immense scale. 01:41:39 Yeah, that's part of why we can never fix it. 01:41:46 We screwed the pooch in some ways decades ago. 01:42:05 I'm interested in the idea of a more mesh-like networking style. 01:42:11 But the way we use it today just wasn't what they were thinking about when they started building it. 01:42:12 Which could be local via bluetooth or radio 01:42:14 Feature creep. 01:42:24 Nodes talking to each other locally and passing messages to other nodes. 01:42:35 Yeah, mesh networks are cool. 01:42:35 Much more energy efficient and failure resistant. 01:42:54 If you're in a densely populated area. 01:43:00 Of course to get it across continents you need some sort of cabling. 01:43:01 Big possibilities there for urban areas. 01:43:46 Isolated mesh networks would still be immensely beneficial. Imagine a remote village using their "internet" and then when a person from that village connects to a larger network in the city, the data is synchronized and so on 01:43:58 I've heard this idea dicussed before 01:44:01 discussed 01:44:38 It's so hard to communicate after natural disasters because our systems suck. 01:44:41 But for that to work well you absolutely have to have a totally secure "bottom layer." 01:44:46 Encryption from the ground up. 01:44:51 Yes. 01:45:13 Also I would only use such a system if it were completely free software 01:45:44 public domain is the real free 01:45:59 I actually think it's remarkable how effective open source has been. 01:46:22 There's a lot of power in the "free enterprise" economic model - it's surprising so much has happened outside of that. 01:46:27 I like the GPL because it enforces that derivative work is also licensed under it, unlike open source licenses which don't. 01:46:51 Although RMS is somewhat of a nutty person. 01:46:56 Well, but that is completely unacceptable if you're interested in starting a business. I'm glad that other licenses exist, like LGPL. 01:46:58 siraben: do you know C? that's where i came from 01:47:15 I think both approaches need to exist. 01:47:17 Forth is way more elegant 01:47:22 dave0: Yes I know C, one of the first languages that I understood pretty well. 01:47:35 I’m not a fan of GPL 01:47:41 You just can't deny that a lot of progress has also occurred because people want to make a buck to take care of their families. 01:47:52 Before that I was writing Python but the huge disconnect with the metal made things confusing. 01:47:58 I couldn't reason about performance, for instance. 01:48:19 KipIngram: Yeah, you can have software that's not licensed under GPL if it's for internal use. 01:48:32 But if you're distributing binaries I better know that it's not doing malicious stuff. 01:48:54 Well, I'm talking about being able to have a novel new idea, write code to implement it, and use open source as a framework around it. 01:48:55 if you really want your code for everyone, make it public domain 01:48:58 LGPL allows that. 01:49:09 Right. 01:49:15 You can get your novel idea to the public faster that way, and you can still profit from your proprietary piece of it. 01:49:29 With GPL that's not possible, so at least some of those innovations just wouldn't be deployed. 01:49:34 dave0: But making things public domain forfeits your copyright grounds, right? 01:49:55 siraben: yep 01:50:11 The difference is that in public domain I could use open source code in my product and not reveal any part of it. 01:50:26 LGPL requires I still reveal the open source parts of it, while keeping my private part private. 01:50:36 GPL says I have to reveal all of it, including my novel idea part. 01:50:45 GPL contends that I don't own my own ideas. 01:50:52 siraben: but OTOH anyone can use it 01:50:56 That's going a little too far if you ask me. 01:51:12 I do believe that one should be able to profit from one's own intellectual work. 01:51:16 Hm. I suppose. 01:51:22 Depends on what the software does, too. 01:51:23 siraben: you can mix it with anything too 01:51:24 I actually think that should last only a period of time, like with patents. 01:51:43 I'm fine with games being proprietary, because they're more like art works in that regard, but not with core cryptographic libraries being proprietary, for instance. 01:51:46 I think after I've had an opportunity to profit for a reasonable period, I've been "compensated," and my knowledge should go to the public domain. 01:51:54 The core idea of the patent system is a good one. 01:51:58 The GPL hasn't been long enough to have expired for any thing, right? 01:52:03 been around* 01:52:03 I think we've got sort of a shit implementation of it, but it's the right basic idea. 01:52:10 remember also that copyright is time limited, and your code will fall into the public domain (but after a long time like 80 years) 01:52:23 dave0: Right - and I think that's appropriate. 01:53:16 Code hasn't been around long enough for us to start seeing it being public domain automatically 01:53:16 GPL is early 80's i think 01:53:16 When I sell the fruits of an idea, I am enjoying the benefits of participating in a community economy. 01:53:16 Not in the same way art works and photos have 01:53:16 I should give something in return for that benefit, and having my creations go public at some point in time is that "giving back." 01:53:16 And plus, how knows if we can even read the damn thing 80 years from now. 01:53:16 1980-something is when RMS started the GNU project 01:53:26 Ah, Lisp is almost 60 years old, but it's nothing like Lisps now. 01:53:27 RMS has pretty radical ideas - he's just not a "free enterprise" guy. 01:53:31 He's somewhat communist. 01:53:51 BSD and MIT style licenses seem to have the least strings attached while protecting your copyright. 01:53:54 If I build a house out of raw materials, I own it. 01:53:56 I can sell it. 01:53:59 That and the fact that he repeatedly talks about politics in unrelated areas. 01:54:02 Why is that different for software? 01:54:19 So I think the only rational basis for GPL is a general "non-capitalist" mentality. 01:54:28 Treating material things and software things differently is inconsistent. 01:54:33 Sure you can sell free software. 01:54:36 Debian sells CDs of their OS, for instance. 01:54:46 I.e., treating "creations of muscle" and "creations of mind" differently is inconsistent. 01:54:59 i heard a story that RMS wrote a pascal compiler, and a company asked to use it, and RMS said okay, but then the company made improvements to the compiler, and RMS said "can i see your improvements" and the company said no, which pissed off RMS and he wrote the GPL 01:55:09 What they're really selling is convenience and support. 01:55:18 I mean, he did own the compiler. 01:55:36 It's like hiring a contractor to your house to fix the pipes and you can't see what the improvements are? 01:55:47 KipIngram: Yeah, so you can sell services as well. 01:55:59 --- quit: dave9 (Ping timeout: 244 seconds) 01:56:02 Well, to me "improving what was already there" is different from "adding completely new pieces." 01:56:15 siraben: technically the company didn't have to share their code 01:56:23 I imagine many arguments could be had about how to draw that boundary. 01:56:27 But I see his upset there. 01:57:04 I think you should get a blueprint of the new piping. 01:57:04 RMS had copyrightover what he wrote, but also the company had copyright over what THEY wrote 01:57:14 But that doesn't mean you have to get tutorials on copper brazing and so on. 01:57:30 The plumber shouldn't have to give away his entire stock and trade. 01:57:37 I think high level descriptions of software suffice. 01:57:42 Instead of source code 01:57:48 Plus it's more lasting when your language becomes obsolete. 01:57:53 dave0: Right - RMS just made a poor bargain, and resolved never to do that again. 01:58:23 I like Forth not beause it's tied to a particular implementation, but because the high level definitions are well known, so in a sense it's "public domain knowledge" 01:58:27 I think it's good that we have all of these different licenses - each person can choose which one they like. 01:58:40 Right. 01:59:05 Ultimately it's about freedom - if you want to give your ideas away as a charitable contribution to humanity, you should be able to do that. 01:59:19 And if you want to require that others who use those ideas do the same, you should be able to do that too. 01:59:21 Thta's GPL. 01:59:45 On the other hand, if you're interested in trying to profit, it's not the license for you. 02:00:40 Going to get a new IRC client, later guys. 02:00:46 --- quit: rdrop-exit (Quit: rdrop-exit) 02:01:03 When IBM bought Texas Memory Systems back in 2012, they went through an elaborate procedure to ensure there were no GPL'd software modules in the TMS products. 02:01:14 It's a standard thing they do with all acquisitions - they call it "bluewashing." 02:02:40 LGPL modules were acceptable - they were prepared to handle those pieces properly. 02:02:58 GPL was totally disallowed, because it would require them to give away internal developments. 02:03:20 Huh. 02:03:53 I'm not as familiar with GPL as I could be. 02:04:05 Let's say your product uses an embedded Linux. 02:04:15 Linux can load and run different "executables." 02:04:28 i believe the GPL has not been tested in court 02:04:52 there have been lawsuits but i believe all turned out to have a settlement, rather than a judge make a ruling 02:04:55 Let's say your Linux itself isn't GPL, but ONE of your executables is. 02:05:00 Does that sweep up your whole system? 02:05:07 Or is their a boundary there, at the executable level? 02:05:45 This is an *embedded* linux - you don't actually have users typing commands and choosing what to run - that's all harnessed together by one "master executable" that runs other executables as needed. 02:06:09 On the one hand, those distinct executables exist. 02:06:17 But on the other hand, that level is totally hidden from the product user. 02:06:37 Ugh. "there". 02:06:42 I hate that kind of chat error. 02:06:57 I don't do that anywhere else, but I do it a lot in IRC. 02:07:06 It's like my mind thinks I'm talking. 02:07:15 There and their sound the same, so either will do, apparently. 02:07:29 Right. It depends on the application that you're building as well. 02:07:36 Well, I usually type at the speed of thought, perhaps a little slower. 02:07:43 Me too. 02:07:59 That's why I prefer typing to writing, because you can throw out more ideas and refactor as needed. 02:08:00 And I think IRC just "activates" a verbal mode in my mind, as opposed to a written one. 02:08:24 Oh yes, in emails I'm constantly "back-editing." 02:08:32 Sometime it shoots me in the foot - I wind up with some odd sentences. 02:08:39 Writing for more is more about going through things slowly, like when I was drawing diagrams to understand exactly how NEXT worked (which wasn't that intuitive for me initially) 02:08:44 where I back-edited but didn't check things carefully enough before hitting send. 02:08:46 for me* 02:09:07 I think that sounds similar to my "modes" mentioned above. 02:14:36 Anyway, I do have some thoughts of possible commercial use of my Forth. Yet I'd like to share it in some fashion at some point too. 02:14:53 But not until it reaches a state I consider "done." 02:15:02 Or at least "mature" - maybe that's a better word. 02:15:19 Mine's just a toy project, so that's why I GPL'd it. 02:16:03 Right - "why not?" 02:16:14 And, btw, when I first started to type that I typed "Write." 02:16:21 Caught it before I typed the next word, though. 02:16:30 :-( 02:18:54 Out of curiosity, what sort of music do you listen to? 02:19:04 I'm more of a classical/jazz fan. 02:23:16 I quite enoy some classical, especially Mozart, and also a lot of jazz, especially "smokey jazz." But I'm also frequently into classic rock (AC/DC, LED Zepp, etc.) 02:23:30 --- quit: dave0 (Quit: dave's not here) 02:23:34 I'd say the classical and jazz are "moods," and the classic rock is my mainstay. 02:23:51 Modern music largely sucks. 02:24:02 For one thing, you don't hear the electric guitar nearly as much as you used to. 02:24:26 And for another, it all feels "spun out with computers" to me. I think tech has brought a lot of "not really talented" people into the game. 02:24:46 Used to be you couldn't be in music if you didn't play an instrument. 02:24:51 Now you can fly a computer. 02:25:08 And you don't even have to have a good voice - it can be digitally processed. 02:25:15 You just have to look good on stage. 02:25:58 How you LOOK really should be irrelevant for music. 02:25:58 Oh my gosh, yes, exactly. 02:26:24 Not to say I haven't enjoyed looking at Katy Perry and Britney Spears and so on over the years. 02:26:43 Shakira. 02:26:48 Mmmm. 02:26:59 But I'm appreciating much more than just music there. 02:27:34 I can judge the change in emphasis intellectually without being "immune" to it. :-) 02:27:50 Being a musician myself I find modern music often distasteful. 02:27:51 People with absolutely NO SKILLS get praise and accolades 02:27:52 Adele certainty has talent, for instance. 02:27:53 certainly* 02:28:01 Yes. 02:28:36 Success is about what the masses respond to, and to a large extent the masses respond to what they're "told" to respond to by the media / industry. 02:28:46 People don't actually think much these days. 02:29:16 Being classically trained I'm currently self-learning jazz piano and improvisation, pretty interesting areas. 02:29:21 It's like programming in many ways. 02:29:30 They say that back in the day Elvis's manager planted ringers in the audience to get the screaming going. 02:29:39 And everyone else just fell into line, instead of looking at them like they were idiots. 02:30:00 I'm fascinated with the relationship between music and math. 02:30:22 On the other hand, my wife, who is also a talented engineer but very musically skilled as well, absolutely refuses to mix those things. 02:30:36 How so? 02:30:37 She almost runs away when I start mixing music and math. 02:30:45 How do you mix the two? 02:30:49 I usually don't as well. 02:31:21 Oh, well the notes of the musical scale, and what sounds consonant and dissonant, is heavily related to the theory of a vibrating string, ratios of small integers, and so on. 02:31:39 There's a very mathematical REASON a fifth, for instance, pleases us so much. 02:31:46 Why we find it "satisfying." 02:32:17 Ah, I'm not that into the mathematical relationship then. I just "feel" that a perfect fifth is pleasing 02:32:29 Right, that's built into our brains, apparently. 02:32:44 So that interleaving V chords with the root key is also pleasant.'= 02:32:47 But you can show what a fifth is using a vibrating string and its modes. 02:33:02 Bach's music is also particularly fascinating. Very complex yet it all works out. 02:33:06 And BTW, with an equal temmperment scale your "fifth" isn't truly perfect anymore. 02:33:09 It's just damn close. 02:33:17 "Close enough," apparently, for our minds. 02:33:23 Right, pianos are tuned as such 02:33:31 Within 1% margin of error 02:33:36 And that made transcription psosible. 02:33:38 possible 02:33:50 So do you play instruments? 02:33:54 yeah, every note is equally separated by ratio, such that 12 steps doubles the frequency. 02:34:02 I "play with" guitar and harmonica. 02:34:09 I'm not good enough at either one to claim real skill. 02:34:20 To claim to "play" as opposed to "play with." 02:34:24 I know some chords. 02:34:28 A couple of scales. 02:34:38 But I don't practice enough to really be any good. 02:34:44 I enjoy it, though. 02:34:57 Ah I see. 02:35:30 I have a Yamaha acoustic guitar (it was like $400 back in 1995), and a Strat electiric. 02:35:35 electric 02:35:38 I love the piano, been playing it for almost ten years now and it'll probably stick for decades. 02:35:49 I see. 02:35:59 Typically my daughters' boyfriends will be at the house and pickup my Strat and play it far better than I can. 02:36:02 A couple of them at least. 02:36:08 My wife is a piano gal. 02:36:20 Not as good as she was when she was a girl, but still pretty good to my ears. 02:36:50 She actually got a major scholarship to The University of Texas based on her music theory skills. 02:36:54 Then majored in engineering. 02:37:33 Interesting. 02:37:42 Glad I studied music theory, it helps to have some background in that as well. 02:38:02 I've done some music theory studying, off and on as a recreation. 02:38:32 I probably know more than 90+% of people off the street, but it's still far from being expert. 02:38:44 I tend to do that with a lot of things, though. 02:38:57 History, technology outside my field, etc. 02:39:29 I'm curious, so I read. And given the generally dismal state of public education, it doesn't take much to get into the front decile of the hpack. 02:39:32 pack 02:40:07 Astronomy, etc. 02:40:48 And junk areas too - I'm probably also in the top decile of "Star Trek knowledge." But no way could I compete with the really hard-core guys. 02:41:27 And my knowledge there is limited mostly to the original series, the original cast movies, and "Star Trek: Enterprise." 02:41:52 I know very little other than the vague outlines of TNG, DS9, and Voyager, and absolutely nothing about this new one. 02:43:15 Regarding history, I find it hard to understand why anyone wouldn't be interested. 02:43:19 It's "how we got here." 02:43:26 That seems "automatically interesting" to me. 02:43:58 Plus there's the whole "doomed to repeat mistakes" cliche - seems like we all should have some obligation to help protect the world from that. 02:44:23 Or at least not contribute to those errors. 02:44:56 If someone coughed up a proposal that voting should depend on having a reasonably decent knowledge of history, how our government operates, and so on, I'd feel like that deserved a debate - I wouldn't just automatically rule it out. 02:45:07 I don't know what I'd decide in the end, but I can see the case for such a requirement. 02:45:39 And such a requirement could easily be made to onerous and abused for purposes of bias - that would certainly have to be guarded against. 02:45:48 "too onerous" 02:46:34 But the basic question, "Should you vote for a Congressman when you have no idea what a Congressman even does?" is a valid question. 02:47:32 Should you cast an opinion on whether we should, say, sign some type of international treaty when you have no knowledge whatsoever of geopolitical history? 02:48:00 And I should say out loud that the other position - that everyone should have a voice, period, is also a valid one. 02:48:16 I just think that a discussion of such things should be considered acceptable. 02:49:06 Ancient history is also very interesting. 02:49:15 Precursor to civilizations everywhere right now 02:49:25 Yes, it's my favorite part of history, actually. 02:49:28 The really old stuff. 02:49:41 I recently found out that the Greeks had a geographer that went to India 02:49:56 Ancient Greece 02:50:02 I've got one history book upstairs in my little book room that explicitly discusses the ways in which technology drove world history. 02:50:08 As an engineer that's particularly appealing to me. 02:50:22 Guess what made it possible for civilization to spread out of the river valleys? 02:52:02 The *plow*. :-) 02:52:05 Fascinating. 02:52:09 Huh 02:52:21 Humans are fascinating 02:52:37 But I wonder how other civilizations would develop 02:52:48 Prior to invention of the plow, civilization was confined to the river valleys, because that's the only place where the ground stayed soft enough for widespread agriculture. 02:52:59 The plow made it possible to break hard ground. 02:53:01 The creation of say, a spaceship, implies a lot about the civilization behind it 02:53:09 Right 02:53:09 The history of military tech is really interesting too. 02:53:21 Gunpowder 02:53:33 Yeah - ended the era of "fortifications." 02:53:38 Gunpowder and artillery. 02:53:53 Fortifications (walls) lost their edge when faced with that. 02:54:11 One of the few species that kills each other at this scale 02:54:17 And trubechets are particularly fun. :-) 02:54:25 Right. 02:54:38 Our minds make a whole new set of thought processes possible. 02:54:52 Animals fight when they are threatened NOW, or hungry NOW. 02:54:54 We think ahead. 02:55:04 "You may be a threat to me someday, so I'll kill you now." 02:55:58 Weird. 02:55:59 Source of a lot of problems. 02:56:03 Yes. 02:56:06 And a lot of greatness. 02:56:14 You don't see animals enslave one another either. 02:56:25 Yeah 02:56:37 Apparently the idea that you can accomplish more by forcing others to do the work for you is just a bit beyond the animal intellect. 02:56:51 So is farming 02:56:57 Yes. 02:57:01 That's planning ahead again. 02:57:07 Of course, squirrels bury nuts. 02:57:21 Though some argue that's just instinct. 02:57:27 It's too bad there's only one species of humans today 02:58:06 Well, I guess if there were others we'd have more words than just "human." 02:58:07 Would have dramatically affect everything 02:58:21 But yes, the overlap between homo sapiens and Neanderthal would have been interesting to watch. 02:58:36 I suspect we weren't very nice to them, but on the other hand it may be no different than we are with each other. 02:58:38 Right 02:59:01 Just that homo sapiens had an advantage, whereas modern conflicts have the two sides more equally balanced. 02:59:13 I also think we've also been very lucky as a species, to have invented all this to survive 02:59:35 We could have died out early and leave no impact whatsoever. 02:59:45 Left* 03:01:25 Right. I think that's true. But so MUCH of our current technology has come in just the last few hundred years - I think we were already pretty "entrenched" at that point. 03:01:36 But your general point holds - I'm sure luck had something to do with it. 03:02:00 Interesting to see if we survive this climate change 03:02:08 We will. 03:02:13 The latest report says something like 12 years until the point of no return. 03:02:32 There's too much politics in all that stuff for me to have faith in any of it. 03:02:41 I am quite convinced that we are adding CO2 to the atmosphere. 03:02:50 That much is absolutely and undeniably measureable. 03:03:12 But I think the arguments about how that will affect long-term temperature are uncertain and hoplessly riddled with "axes to grind." 03:03:27 And in the REALLY long term perspective, we will have a new ice age setting in in a few thousand years. 03:03:46 We may be VERY GLAD for it to be a few degrees warmer - it could make a critical difference. 03:03:53 No one talks about that. 03:04:11 If the next ice age has the same temperature profile as the last one, there will be a massive die-off. 03:04:26 The planet just won't be able to produce food to sustain its current biological load. 03:05:01 Ultimately it's about energy arriving from the sun and being retained - that energy is what drives food production. 03:05:25 And that is a "ground floor calculation" - you just can't argue with it. 03:05:48 This will be the first ice age we've entered into as a technologically capable planetary biosphere. 03:06:17 Never before has Earth life had an opportunity to consider *affecting* the severity of the ice age. 03:06:43 if we had a crystal ball, we might be thinking we need to deliberately heat things up. 03:07:15 And even now, with our current population, I think people would have differing opinions of the desirability of a warmer climate. 03:07:28 Farmers in Montanna would likely be perfectly glad to have it five degrees warmer. 03:07:32 For example. 03:08:03 So I think for all of the above stated reasons we don't actually KNOW what the "optimum climate" and the "optimum climate trend" IS. 03:08:09 And yet we argue about it as though it's holy war. 03:08:37 I think that some part of the human psyche just likes to argue. 03:08:50 We like to have an "us" and a "them," and to "fight the good fight" against "them." 03:09:58 I think that's what fuels all of our racial and ethnic divisions - if "we" are "better" then "they," then "we" don't have to worry about being at the bottom of the heap. 03:10:20 So there's a security in allowing yourself to feel "superior." 03:11:20 I think such things are our "instinctive" reaction, and it takes embracing thought and reflection to move past them. 03:12:46 There's also Richard Dawkins' gene-based argument - that we instinctively favor individuals we perceive as sharing a lot of genes with us. 03:13:01 Family first, then (before the era of widespread travel) community, etc. 03:13:36 --- quit: nighty- (Quit: Disappears in a puff of smoke) 03:46:39 --- join: rdrop-exit (~markwilli@112.201.162.180) joined #forth 03:53:08 --- join: dave9 (~dave@90.20.215.218.dyn.iprimus.net.au) joined #forth 04:02:55 --- join: dave0 (~dave@90.20.215.218.dyn.iprimus.net.au) joined #forth 04:03:19 hi 04:03:58 Hello, replaced my buggy IRC client, learning a new one 04:21:04 KipIngram: Just got out of a meeting 04:31:59 The issue is that it's rapid warming now or a possible ice age in hundreds of years 04:32:12 We might be delaying it indefinitely 04:35:08 --- join: dddddd (~dddddd@unaffiliated/dddddd) joined #forth 04:43:36 Well, we won't "cancel the pattern." 04:43:56 The Earth just moves in its orbit in such a way that the amount of energy the earth receives fluctuates. 04:44:33 If it warms enough to significantly reduce the amount of ice that forms during the cold periods, though, it could mitigate the coldness to an extent, because that ice reflects energy back into space. 04:44:41 More ice == more energy reflected == colder. 04:45:05 That's why the boundaries of the ice ages are so sharp instead of smooth - the ice forming or melting produces a positive feedback. 04:45:13 So we tend to "snap" into and out of ice ages. 04:45:25 We'd still think it took a long time, but on the geologic scale it's sharp. 04:47:23 I don't honestly expect the human race to "get serious" about stuff that will be happening 5,000-10,000 years from now. I don't actually think we have that in us. 04:47:37 --- join: nighty- (~nighty@s229123.ppp.asahi-net.or.jp) joined #forth 04:47:38 Especially if it involves a tradeoff against shorter term things. 04:50:30 --- quit: wa5qjh (Remote host closed the connection) 05:22:54 Well in the grand scheme of things, things might get colder, but that wouldn't prevent the collapse of the biological ecosystem now should we continue warming 05:22:56 Yeah I think whatever happens life will survive 05:23:29 We could probably do nothing about climate change and still survive, but in the process risk the lives of billions 05:36:23 I just don't think we have any high certainty level of that. It's mostly FUD. 05:37:41 It's a political battle axe. 05:40:10 You can't trust either side - bothsides are too fixated on having the answer come out the way they want it to. 05:40:15 No one is trustworthy. 05:43:15 On the one side, you have people who care only about their business profits. 05:44:03 And on the other you have people who are totally committed to a socio-political system that involves strong central control. 05:44:36 For the one, "save the world" gets in their way, and for the other "save the world" is the perfect "battle cry," that will appeal even to people who don't share their sociopolitical views. 05:45:01 So I don't think we KNOW. And we can't have an intelligent conversation about it because of the above biases. 05:51:18 --- join: groovy2shoes (~groovy2sh@unaffiliated/groovebot) joined #forth 05:56:42 I don't care for (or trust) the corporations OR the statists. Neither prioritizes *me* and people like me. 06:03:29 rdrop-exit: Which one did you settle with? 06:27:09 Trying out irssi 06:29:21 I have to figure out how to get it to beep when there's activity on the channel 06:59:30 --- quit: rdrop-exit (Quit: Lost terminal) 07:20:56 * tabemann is happy that he's got a working [: ;] in his Forth 07:21:43 tabemann: not famliar what those two words do, can you enlighten me? 07:21:45 tabemann: What did you do to make it? 07:21:55 [: starts a nested anonymous word 07:22:02 ;] ends a nested anonymous word 07:22:33 note that my implementation depends on the internal details of my Forth (e.g. to be compatible with my implementation of SEE) 07:22:53 ;] puts the xt of the anonymous word on stack right? 07:23:04 actually [: does 07:23:14 ;] saves it as literal 07:23:19 [: & BRANCH HERE 0 , 0 , LATESTXT :NONAME ; IMMEDIATE 07:23:33 right 07:23:40 ;] & EXIT 0 , ROT HERE SWAP ! & (LITERAL) , >LATESTXT ; IMMEDIATE 07:24:09 the extra 0 , are because my Forth uses 0 to mark the end of a function for decompilation purposes 07:24:42 and >LATESTXT is so that after the nested compilation the following words see LATESTXT as returning the parent function and not the child one 07:25:11 I should get going to work though 07:25:40 see ya guys 07:31:03 --- quit: tabemann (Ping timeout: 260 seconds) 07:48:40 --- quit: pointfree (Excess Flood) 07:49:17 --- join: pointfree (sid204397@gateway/web/irccloud.com/x-odxfdtuymqrlxybo) joined #forth 08:51:19 --- quit: dave0 (Quit: dave's not here) 11:51:44 --- quit: sigjuice (*.net *.split) 11:51:44 --- quit: WilhelmVonWeiner (*.net *.split) 11:51:52 --- join: WilhelmVonWeiner (dch@ny1.hashbang.sh) joined #forth 11:52:02 --- join: sigjuice (~sigjuice@107.170.193.86) joined #forth 11:52:15 --- nick: WilhelmVonWeiner -> Guest88256 11:54:49 --- quit: john_metcalf (Ping timeout: 252 seconds) 12:37:10 --- join: dys (~dys@tmo-096-30.customers.d1-online.com) joined #forth 13:52:39 --- quit: Zarutian (Read error: Connection reset by peer) 13:52:47 --- join: Zarutian_2 (~zarutian@173-133-17-89.fiber.hringdu.is) joined #forth 13:53:06 --- nick: Zarutian_2 -> Zarutian 14:10:09 --- quit: dys (Ping timeout: 240 seconds) 14:11:21 --- join: dys (~dys@tmo-098-130.customers.d1-online.com) joined #forth 15:12:40 --- join: wa5qjh (~quassel@175.158.225.215) joined #forth 15:12:40 --- quit: wa5qjh (Changing host) 15:12:40 --- join: wa5qjh (~quassel@freebsd/user/wa5qjh) joined #forth 15:25:09 --- quit: dys (Ping timeout: 240 seconds) 15:40:15 --- join: Mat4 (~eh@ip5b409c40.dynamic.kabel-deutschland.de) joined #forth 15:53:24 --- quit: Mat4 (Quit: Yaaic - Yet another Android IRC client - http://www.yaaic.org) 15:55:44 --- quit: Keshl (Read error: Connection reset by peer) 15:56:17 --- join: Keshl (~Purple@24.115.185.149.res-cmts.gld.ptd.net) joined #forth 16:24:46 --- quit: ncv (Remote host closed the connection) 16:31:57 --- join: [1]MrMobius (~default@c-73-134-82-217.hsd1.va.comcast.net) joined #forth 16:35:13 --- quit: MrMobius (Ping timeout: 264 seconds) 16:35:14 --- nick: [1]MrMobius -> MrMobius 16:55:00 --- quit: nighty- (Quit: Disappears in a puff of smoke) 17:15:45 --- join: dave0 (~dave@90.20.215.218.dyn.iprimus.net.au) joined #forth 17:19:29 hi 17:33:19 --- quit: dave0 (Quit: dave's not here) 17:52:56 Hi Dave. 19:09:20 --- join: tabemann (~tabemann@162-225-198-161.lightspeed.milwwi.sbcglobal.net) joined #forth 19:39:27 --- join: tabemann_ (~tabemann@172-13-49-137.lightspeed.milwwi.sbcglobal.net) joined #forth 19:41:13 --- quit: tabemann (Ping timeout: 252 seconds) 19:50:38 Morning. 19:51:12 I just thought of a userful word 19:51:27 a word like CREATE, but which takes the address the word is to be created at 19:51:44 and which creates an anonymous word 19:53:16 what should I name it 19:57:11 Oh so it's like defining a new anonymous word at a different location? 19:57:21 Why not call it LAMBDA ? 19:57:24 yes 19:57:46 Can you show how you might use it? 19:58:00 Whatever the name it should be recognizable to you. 19:58:22 this is to allow temporary :nonames but with your own memory management so you don't grow the dictionary? 19:58:44 it is specifically meant to be used with DOES> 19:58:49 to allow creating closures 19:59:41 and the reason why an address is specified as an argument is to, as you mention, allow allocating them in the heap so they can be freed 20:00:01 which is also why they have to be anonymous 20:00:23 because otherwise freeing a word in the middle of the dictionary structure would corrupt it 20:00:59 if you have a system where your execution tokens are just pointers, then maybe xtdoes> or so? 20:02:32 or ehm, some word for setting the current definition for use by compile, et al 20:02:48 current! ? 20:03:38 CURRENT! is too close to SET-CURRENT, which is used in my Forth for specifying the wordlist into which new words are to be defined 20:04:14 I'm not sure I'd want to use LAMBDA because I'd want to reserve that for the high level user word that uses this word 20:04:38 CREATE-AT 20:05:12 well, that doesn't work, because CREATE parses a word and this does not 20:05:27 MAKE-WORD-AT 20:06:17 and LAMBDA would be defined as: 20:08:28 : LAMBDA ( u -- xt addr ) CHAR+ HEADER-SIZE + ALLOCATE IF DROP ABORT THEN DUP MAKE-WORD-AT SWAP CHAR+ HEADER-SIZE + ; 20:15:35 all the possibilities that come to mind depend on implementation details that might or might not hold 20:17:06 well this is a Forth that runs on Linux which is indirect threaded and holds all its data in the glibc heap 20:19:03 --- quit: dddddd (Remote host closed the connection) 20:20:24 How would you use LAMBDA ? 20:21:52 tabemann_: is there any special magic in the XT format or header requirements, or can you just start laying down XTs (and any associated) in memory somewhere and have the start of that be a valid XT? 20:22:42 there's no special magic about xts 20:22:48 xts can be anywhere in memory 20:23:03 the only trick is that the name of a word comes *before* the xt 20:23:25 which for an anonymous word would be a single null byte before the header 20:23:25 but does that ever get used for anonymous definitions? 20:23:52 it only gets used when someone tries to find the name of an anonymous definition 20:24:51 siraben: : FOOBAR ( u -- xt ) 1 CELLS LAMBDA ROT SWAP ! DOES> @ ; 20:25:46 the purpose of LAMBDA is to create a closure 20:25:54 Yes. What does FOOBAR do now? 20:26:07 A closure implies there's captured variables? 20:26:15 yes 20:26:34 it seems like one way would be to make the compiler behavior stateful at let you point it wherever you like in memory 20:26:44 that might or might not be too bletcherous depending on other consideratoins 20:26:47 *considerations 20:26:47 255 foobar execute . 255 ok 20:27:33 (how did you make it underlined?) 20:27:49 255 foobar dup >body 256 swap ! execute . 256 ok 20:28:02 with control-U in hexchat 20:28:18 maybe bundle current definition, HERE, wordlist if applicable, etc into one structure and have the compiler use that when compiling? 20:28:25 test test test 20:28:30 Does it show up too? 20:28:35 yes 20:28:38 foobar 20:28:49 Looks funny in the log http://bespin.org/~nef/logs/forth/18.10.22 20:28:52 foobar 20:28:54 I think these are terminal escape characters 20:29:04 foobar 20:29:19 they are 20:29:38 So how would you describe FOOBAR> 20:29:40 ? 20:29:42 well technically not terminal escape characters but mIRC escape characters 20:29:43 I mean FOOBAR 20:29:51 Right. 20:31:22 FOOBAR takes a single cell argument and creates an anonymous word that returns that argument when executed; this anonymous word can also be freed with : FREE-WORD 1 CHARS - FREE IF ABORT THEN ; 20:33:00 So you made a word that makes words 20:33:21 --- quit: wa5qjh (Quit: http://quassel-irc.org - Chat comfortably. Anywhere.) 20:34:37 yes 20:35:38 Can't you do the same with DOES> 20:40:11 does> by itself can only create named words that cannot be easily freed without marker or forget 20:40:35 this allows creating arbitrary words anywhere where you want them to be, including on the heap 20:42:35 I just realized that although I cannot create new words with address larger than $C000 my "programs" can be, because they're just lists of addresses. 20:43:02 With a little bit of hacking I can make my own "sub interpreter" that allows words to be "defined" but all stored as a program 20:43:36 The idea is this: words are like subroutines so I'll wrap the word body around branch instructions in the program, so it doesn't get executed 20:43:49 tabemann_: typically does> just patches a jump into the most recent definition 20:43:59 So you would be able to do stuff like : DOUBLE DUP + ; but it'll use a different threading model 20:44:07 i.e. it doesn't normally append the whole does> body contents 20:44:12 Since I can't use indirect without slowing down by 50% 20:44:22 Yes, what koisoke said. 20:44:26 does> in my implementation just changes a pointer in the word header 20:45:01 well, two pointers 20:45:08 right, so changing where does> gets the pointer to the current word header will solve your problem 20:45:36 Here's my DOES> https://github.com/siraben/ti84-forth/blob/master/forth.asm#L2358 20:46:10 Well there's (DOES>) and DOES> 20:46:34 DOES> compiles (DOES>) into the current word, and (DOES>) does some extra trickery 20:46:44 It all works out. 20:47:32 : CONSTANT WORD CREATE DOCOL_H , DOES> @ ; 20:48:17 DOES> in my Forth changes the code pointer in the header to point to the (DOES>), for lack of a better name, primitive, and the secondary pointer to the next interpreter pointer address, while replacing the IP with the top of the return stack afterwards 20:48:24 is a performance hit, but premature optimization and roots of all evil 20:48:33 (re: constant) 20:49:30 secondary pointer? 20:50:03 the pointer to the actual indirect-threaded code body of a word 20:51:47 ah right 20:52:18 now, in the past two days I've implemented nested functions and closures... now I just need to figure out how to combine the two 20:52:46 tabemann_: i will gesture at what i said in 03:27 utc and then shut up :) 20:52:47 In a way Forth makes functional programming easy. 20:53:22 e.g. in Haskell: twice f x = f (f x) in Forth, : TWICE DUP EXECUTE EXECUTE ; 20:53:40 Wait not 20:53:55 as a Haskeller, Forth makes functional programming masochistic 20:54:29 : TWICE 2DUP EXECUTE SWAP EXECUTE NIP ; 20:54:36 forth gives good-enough-for-most-purposes currying by just making a definition with one of the arguments prepended to the word you want to curry 20:54:47 which is low-status but really handy 20:54:57 ha ha ha 20:55:02 I just realized something 20:55:02 tabemann_: Where are my functor instances? 20:55:24 to create nested lambdas, I need a new primitive 20:55:28 DOES-AT> 20:56:01 Nested lambdas? 20:56:05 so I can do DOES-AT> (address-after-branch) BRANCH (after-nested-function-address) 20:56:29 so you can create lambdas inside other functions 20:56:33 (\x -> (\y -> (x + y))) ? 20:56:40 yeah 20:56:40 (\x -> (\y -> (x + y))) :: Num a => a -> a -> a 20:56:44 Yeah 20:56:59 Then you could make something like the y combinator. 20:57:37 ((\x -> (x x)) (\x -> (x x))) 20:58:05 Well there's function application going on there, not sure how you would w rite it in Forth. 20:58:05 unless you care about scoping for locals i don't see the use. if the definitions are all anonymous it doesn't matter if they are defined nestedly or separately at the same level 20:58:08 because I named my normal nested functions as [: ;] I will name my nested closures as <: ;> 20:59:56 the syntax will be : .... LAMBDA (set up enclosed values) <: (code) ;> .... ; 21:00:59 ok, i think there are scoping rules in your forth i don't know about to take into account and i should be quiet 21:01:34 I'll worry about scoping rules once I implement local variables 21:01:49 but right now local variables seem like too much of a headache to implement to be worth it 21:08:49 --- join: wa5qjh (~quassel@175.158.225.215) joined #forth 21:08:50 --- quit: wa5qjh (Changing host) 21:08:50 --- join: wa5qjh (~quassel@freebsd/user/wa5qjh) joined #forth 21:15:06 I just use the stack for "local" variables 21:15:17 Sure, not elegant but it gets the job done. 21:17:40 same here 21:23:26 --- quit: wa5qjh (Remote host closed the connection) 21:31:08 Though I find myself writing SWAP 1+ sometimes when a 1 !+ would be abetter 21:31:09 better* 21:31:36 SWAP 1+ SWAP 21:36:23 yes my lambdas aren't crashing 21:39:03 wait a sec now they are again 21:39:23 https://en.wikipedia.org/wiki/Wirth%27s_law 21:39:32 Thought that it'd be relevant to this channel. 21:49:39 oh that's why my code was crashing 21:49:57 I was assuming my word was returning an xt, when it was actually executing the xt itself 21:50:16 so when I called execute after the word foobar, it crashed, because foobar did not return an xt 21:55:00 --- join: dys (~dys@tmo-100-224.customers.d1-online.com) joined #forth 22:48:31 --- join: pierpal (~pierpal@host247-234-dynamic.18-79-r.retail.telecomitalia.it) joined #forth 22:48:57 --- quit: pierpal (Client Quit) 22:52:15 --- join: pierpal (~pierpal@host247-234-dynamic.18-79-r.retail.telecomitalia.it) joined #forth 23:15:07 --- quit: pierpal (Read error: Connection reset by peer) 23:27:00 --- join: pierpal (~pierpal@host247-234-dynamic.18-79-r.retail.telecomitalia.it) joined #forth 23:59:59 --- log: ended forth/18.10.22