00:00:00 --- log: started forth/18.11.12 00:16:48 --- join: wa5qjh (~quassel@175.158.225.197) joined #forth 00:16:48 --- quit: wa5qjh (Changing host) 00:16:49 --- join: wa5qjh (~quassel@freebsd/user/wa5qjh) joined #forth 00:24:19 --- quit: smokeink (Quit: bye) 00:34:26 nite all 00:34:52 --- quit: dave0 (Quit: dave's not here) 00:45:45 --- quit: wa5qjh (Remote host closed the connection) 00:58:51 --- quit: nighty- (Quit: Disappears in a puff of smoke) 01:12:41 --- join: smokeink (~smokeink@42-200-189-163.static.imsbiz.com) joined #forth 01:43:34 --- join: dddddd (~dddddd@unaffiliated/dddddd) joined #forth 01:46:31 --- join: nighty- (~nighty@s229123.ppp.asahi-net.or.jp) joined #forth 02:03:19 --- quit: ashirase (Ping timeout: 272 seconds) 02:11:00 --- join: [1]MrMobius (~default@c-73-134-82-217.hsd1.va.comcast.net) joined #forth 02:13:45 --- quit: MrMobius (Ping timeout: 245 seconds) 02:13:45 --- nick: [1]MrMobius -> MrMobius 02:18:39 --- join: ashirase (~ashirase@modemcable098.166-22-96.mc.videotron.ca) joined #forth 02:27:25 --- quit: xek (Remote host closed the connection) 02:28:21 --- join: xek (~xek@apn-31-0-23-80.dynamic.gprs.plus.pl) joined #forth 04:26:00 --- join: john_cephalopoda (~john@unaffiliated/john-cephalopoda/x-6407167) joined #forth 05:24:57 --- join: proteusguy (~proteus-g@cm-134-196-84-56.revip18.asianet.co.th) joined #forth 05:24:57 --- mode: ChanServ set +v proteusguy 05:26:55 https://thecutecuttlefish.org/tmp/example12.jpg 05:28:12 --- part: SopaXorzTaker left #forth 05:30:23 --- quit: rdrop-exit (Quit: Lost terminal) 05:36:44 john_cephalopoda, you make any progress on utf-8 support and I'd be interested. 05:37:49 --- quit: john_cephalopoda (Read error: Connection reset by peer) 05:41:13 --- join: john_cephalopoda (~john@unaffiliated/john-cephalopoda/x-6407167) joined #forth 06:17:27 --- join: john_metcalf (~digital_w@host81-136-80-199.range81-136.btcentralplus.com) joined #forth 06:21:40 --- quit: john_cephalopoda (Quit: Trees can see into your soul. They lurk everywhere.) 06:30:43 --- quit: smokeink (Remote host closed the connection) 06:31:14 --- join: smokeink (~smokeink@42-200-189-163.static.imsbiz.com) joined #forth 06:39:52 --- join: john_cephalopoda (~john@unaffiliated/john-cephalopoda/x-6407167) joined #forth 06:40:04 --- quit: smokeink (Ping timeout: 272 seconds) 07:14:08 wow terminal escape codes support macros. 07:15:46 forth inside terminal macros?!? 07:19:28 https://bjh21.me.uk/all-escapes/all-escapes.txt 07:25:34 --- quit: tabemann (Ping timeout: 252 seconds) 07:26:15 pointfree: why not? 07:37:11 Zarutian: Maybe something useful can be done for a microcontroller forth by storing macros on the terminal-side. Something like cookies and client-side storage. 07:38:06 pointfree: basically what RIPscrip aimed to do, no? 08:03:10 --- join: pierpal (~pierpal@host192-32-dynamic.1-87-r.retail.telecomitalia.it) joined #forth 09:16:52 SopaXorzTaker: cat-v is a bunch of disenfranchised programmers, mad with the world. 09:21:21 I find many pieces hosted there very interesting though 09:23:33 well yeah 09:23:49 I also think Chuck Moore deserves his own folder there 09:59:06 suckless is similar to cat-v imo. 09:59:44 same venn diagram of people 10:01:14 I kind of understand the people in suckless. 10:02:20 Considering that software from the 80s on computers with singlecore CPUs in the low MHz range doesn't really have much less features than today's while being way smaller... 10:03:01 Some things they do are a bit strange though. Like making a browser based on webkit. Or only having compiled-in configuration files. 10:04:11 configuration files SUCK. 10:04:11 I'm not saying it is the case with all of that, but sometimes getting something "acceptably" and getting something "right" is a huge difference (computation-wise) 10:04:28 I hate having 10,000 different dotfiles 10:04:36 an infinite depth of folders under .local 10:04:36 for instance take fixed-width glyphs with one-byte codes vs truly unicode truetype fonts (with kerning etc) 10:04:39 absolute shit 10:05:22 Compiling makes sense with software stacks that don't suck, because they don't take weeks to compile 10:05:43 at worst give me a lua or a forth way to script the program 10:06:33 there are programming languages which have compile and eval available as functions at runtime 10:10:38 such as Forth 10:12:02 yes, my point being, that at best scripting languages as "additions" to the programs written in X just compensate for X having a broken design with this regard 10:12:23 well, that didn't come up very intelligible, two thoughts mixed in one sentence 10:13:09 [1] at best you "script" your program in the language program is written not as a script, but rather an extension; [2] additions compensate … 10:22:13 what forth was it that only had very minimal core that loaded and interpreted Forth source code at startup? 10:23:08 jonesforth does that, though that's probably not what you're thinking of 10:23:22 bare metal one I think 10:24:08 took five seconds iirc, so boot time on the i386 was 35 seconds. 30 of which was POST. 10:28:24 ciforth? 10:28:52 WilhelmVonWeiner: There are issues with compiled-in configs. Every single time you update it, you have to make sure that you put your custom config.h in-place. 10:29:15 that's only an issue if you don't know how to `cp config.h.bak config.h` 10:29:27 When you use a package manager, it is not that simple. 10:29:59 with portage, palaudis, I think it is 10:30:18 If your package manager doesn't support a feature, that's your fault 10:30:34 Also when you have multiple users on one computer, you need multiple programs. 10:31:03 ~/bin is one option to solve that 10:32:03 Also when you want to change your configuration, instead of just changing one line of text, you'll have to recompile the whole program. 10:32:30 part of the suckless philosophy is small programs that aren't a pain in the balls to recompile 10:32:41 Recompiling is always a pain. 10:32:43 *at worst* you're on a really slow, old machine and have to cross compile 10:33:25 or the 'build enviroment' is brittle as hell 10:35:46 Updating i3wm is "Run the update command of your distro.". It will use the config file from .i3/config for each user. 10:36:34 i'm gonna be real and say "how many desktop computers do you think exist with multiple users and i3" 10:37:45 Even with only one user, the package manager must be configured in a way that it takes the config.h from a directory, copies it in and then builds dwm. 10:38:03 It's literally a configuration file now, that is in some random location. 10:38:13 It's a configuration file sure 10:38:16 but it's written in C 10:38:20 the rest are written in C 10:38:25 the program is written in C 10:38:59 Do you want to recompile wpa_supplicant every time you want to add a new wifi network? 10:39:20 and you're not learnign 13 different configuration languages for random programs at .config/arbitrary/gtk-bloat3/GooseEggs.conf 10:39:46 Simple key-value config files are enough. 10:40:32 john_cephalopoda: for that, configuration languages exist. command line arguments exist. {ba,k,z,}sh, lua, Forth exist 10:41:26 dotfiles were a mistake 10:42:10 What are configuration languages stored in? 10:42:46 dotfiles are not very different from configuration languages. 10:45:06 keep it all in /etc. Classic UNIX style configuration. `cat /etc/urxvt.conf` "fg=#434343" 10:45:18 But don't do that. give me a config.h. 10:45:52 if your program can't reasonable be recompiled, it's probably doing too much in the first place. 10:47:03 Unix is a multi-user OS. 10:47:27 And when there are multiple users, then they probably have different needs. 10:48:10 When I am on a shared server, my .gitconfig is completely different from anybody else's .gitconfig. 10:48:19 Being a multi-user OS doesn't mean there's going to be multiple users. Unless it's a server, I'd suggest it's incredibly unlikely. 10:48:23 My .profile is adjusted to my needs. 10:48:37 Plan 9 solved this by having your home folder include bin,lib, and etc 10:48:56 Plan 9 had this all solved really 10:49:31 I think most UNIX-machines are servers. 10:50:47 **arguably** android phones are also a candidate for the title of "most UNIX-machines" (because they run linux) 10:51:12 (but with a not-very-unixy-feeling userspace) 10:51:50 I have no clue how their config works. It's all strange Java stuff. 10:51:52 john_cephalopoda: I think most servers are *n*x, jn__ is right though 10:52:12 but most servers are still single-user systems, actually 10:56:15 Hmm, welp. 10:57:08 i don't expect webservers to be running more than the root user and some `web` user 10:57:21 and `admin` maybe if someone doesn't want to be logging in as `root` 11:01:10 18:55 < john_cephalopoda> Hmm, welp. 11:01:23 SORRY didnt mean to paste that 11:01:34 sensitive mouse selected the wrong piece of text 11:02:07 Heh. 11:03:11 What could be an alternative to dotfiles that allows people to have own configurations for every program? 11:03:33 etc/ in $HOME 11:05:11 I'm looking at Forth code examples and I can see why people think it's unreadable 11:05:27 why do people insist on putting every word on a new line 11:05:28 There is .config/ which is basically etc/ in $HOME. 11:06:00 It is a standard set forth in the "XDG Base Directory Specification". 11:06:11 (Though not all programs use that) 11:06:23 what is it with standards being shit 11:06:29 https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html 11:07:32 That standard is quite nice. 11:07:44 Not the standard's fault if people just throw their dotfiles anywhere. 11:15:40 exponent: `: (**) ( n m --)OVER SWAP 0 DO OVER * LOOP NIP ;` just don't pass it a 1 11:16:08 ...that stack comment is wrong 11:18:38 that's also a slow way to exponentiate 11:18:52 what's the mathy way 11:19:16 https://en.wikipedia.org/wiki/Exponentiation_by_squaring 11:19:29 i don't pretend to understand it, but i have implemented it 11:19:56 we need a quote bot I can save that to 11:20:18 john_cephalopoda: I used DO..LOOP here so you win... sometimes 11:28:51 >:D 11:31:21 https://gist.github.com/cmtptr/d1c9ab453da1a3cec94135f2b1178a1b ^ and log2 in my bizarro forth 11:31:50 lovely table you have there 11:32:36 that one I understand even less than the ^ 11:32:58 http://graphics.stanford.edu/~seander/bithacks.html#IntegerLogDeBruijn 11:34:36 you fill in all the bits under the highest-order 1, and then you multiply it by some magic number and somehow the top 6 bits of the result contain a unique value 11:35:07 which you then use as the index to a lookup table, ofc 11:37:02 oh wait there's something more to it that i forgot because there's a subtraction in there 11:37:15 anyway, whatever. it's magic. 11:37:43 recursive exponentiation by squares, foiled by the smudge bit 11:38:05 well, in my code style, anyhow. 11:38:31 What's NIP? 11:38:35 swap drop 11:38:51 Ah, ok. 11:39:49 --- quit: john_metcalf (Ping timeout: 240 seconds) 11:41:18 inversely, tuck is dup -rot 12:10:28 zy]x[yz: and how is -rot defined? : -rot ( a b c -- c a b ) swap >R swap R> ; \ ? 12:13:11 rot rot would also work. 12:13:59 Not sure if it would be faster than swap >R swap R>... 12:14:27 rot is >R SWAP R> SWAP 12:15:29 Depends on the implementation. 12:16:32 : OVER >R DUP R> SWAP 12:17:44 I really have to make a list of all ANS core functions and make up commands that can replace those, so I can find out the minimal amount of words I have to define. 12:17:54 john_cephalopoda: well there is also issue of space. The rot rot version takes fewer cells. 12:18:34 2 instead of 4. Not sure if that's a big gain though. 12:21:44 john_cephalopoda: http://tunes.org/~iepos/joy.html 12:22:04 the minimal amount of words can be considered 2 12:24:42 john_cephalopoda: in MCUs and other constrained devices it adds up over other words too 12:25:53 for instance I am been writing 'Forthy' assembly in AVR assembler and most if not all words end in a jump to the last word used in that definition. 12:26:18 subroutine threaded code if anyone is wondering. 12:30:49 that means the amount of redundant 'ret's (returns) is kept to minimum and the cells thus saved can be used for something else. 12:35:53 WilhelmVonWeiner: You surely need more than 2 to do memory operations, arithmetic operations and stack operations. 12:42:50 sixteen is what I mangaged to get the primitive word count down to 12:43:23 oh right, yeah. Memory ops aren't covered in that theory of concatenative stack operations 12:44:13 Zarutian: Have you got a list of those? 12:49:29 --- quit: zy]x[yz (Ping timeout: 240 seconds) 12:51:30 --- join: zy]x[yz (~corey@unaffiliated/cmtptr) joined #forth 12:54:53 john_cephalopoda: lesse from memory: >R R> SKZ @ ! EXIT DROP DUP SWAP UM+ AND XOR 1LBR 1+ RX? TX! 12:57:14 the memory I was using is cell addressed but you could replace @ and ! with C@ and C! and implement the former with the latter 13:10:05 john_cephalopoda: btw, SKZ stands for SKip if Zero and LBR stands for Left Bit Rotate 13:41:20 Until when would SKZ continue? 13:41:32 Or would it only skip one instruction? 13:42:34 skips the next instruction/word after it 13:42:58 Hmm, seems like a nice starter set. 13:43:20 What does 1LBR do? 13:43:51 Ah, wait, Left Bit Rotate. 13:43:56 And UM+? 13:45:09 if we numbered the bits in a cell like this FEDCBA9876543210 then the result of 1LBR would be EDCBA9876543210F 13:45:40 UM+ ( unsigned unsigned -- sum carry ) 13:45:56 see eForth sources where ever you find them. 13:46:22 Do you actually only use those or are you implementing *, / etc also low-level for performance? 13:47:44 only using those. Plus I drop RX? and TX! out as the i/o is memory space mapped 13:48:36 Where exactly can I find eForth? 13:49:29 I selected those as I can easily implement them in boolean logic circuitry 13:49:55 pointfree had a good link but try googling for eForth and see if it doesnt turn up 13:51:56 john_cephalopoda: Ting's website https://sites.google.com/offete23.com/eforth/home?authuser=0 13:51:56 ...eforthCD backup: https://hub.darcs.net/pointfree/eforthCD 13:54:18 I should probably just finally go and write a minimal Forth to get started.. 13:57:58 welp 13:58:11 why don't people write more Forth as opposed to write more Forths 14:25:30 Well, writing Forths is FUN. 14:25:53 It's a "writing a languge" project that you can actually think about finishing in some tangible amount of time. 14:27:25 I really do have high hopes that this one I'm working on now will become a tool I use to a significant degree. 14:27:40 KipIngram: always thought of it as growable language project. Like a garden one can weed and grow things in but with the bonus it doesnt die if you get busy because of other things. 14:27:41 Probably more in the context of embedded projects, though, rather than in a desktop environment. 14:28:31 I have different mindsets when I work on Forth than when I program at work. 14:28:39 At work I always have some sort of time pressure. 14:29:01 Write a forth for each project. 14:29:13 I need to get my results as quickly as possible, and it always seems more expedient to use some other tool, rather than try to get, say, GForth to do the job. 14:29:28 When I work on my Forth I go slow and take my time and try to do things in a very clean, graceful way. 14:29:41 KipIngram: often due to arbitrary deadlines set by people that have no idea how to scope programing projects? 14:30:37 Yes, that fits. Though the stuff I write is generally a tool of some kind for use by me only. I did write a post-processor for data that came out of us instrumenting a big piece of software a year or two ago. 14:30:42 That got used by other people on my team. 14:30:52 KipIngram: basically, as someone whose name I do not recall at the moment put it, 'gluing together kitbash blocks'. 14:31:11 I've gravitated toward Python for such things over the last few years - I think largely because there's such a rich library of packages available for it. 14:31:45 Yes, I don't particularly enjoy that kind of programming, even though I do it when I'm in a hurry. 14:32:02 I can polish on my Forth until I get an "Ahhhhh...." feeling from it. 14:32:15 If I decide I don't like how I've done something, I can rip it out and redo it. 14:32:22 No pressure not to because "it works." 14:32:56 yeah, I have seen too much of "it compiles! ship it!" mentality 14:33:10 I just decided a week ago or so I wasn't really happy with how I'd implemented "page ownership tracking" in my Forth. 14:33:19 Memory pages from the "simple heap." 14:33:26 So I'm in the process of tearing it out. 14:33:38 I just felt like it had brought something of excessive complexity into the system. 14:34:04 Like this ugly piece sitting there next to all of the much cleaner pieces. 14:34:32 or continously changing requirements in waterfall programming model. 14:35:17 Yeah, I get to see plenty of lame project operation at work. 14:35:47 I think the root of the problem is that no one is really in charge. 14:36:33 It is amazing how throoughly "no one is in charge," in fact. 14:36:44 the project manager is one that must be in charge. Having a requirements deadline that freezes what is going to be built helps too. 14:36:49 They actually take votes on stuff. 14:36:51 Formal votes. 14:37:47 KipIngram: just why? too much CYA culture or? 14:37:53 Yes. And in my humble opinion (well, how humble I am may be debatable), that project manager should be a technical expert and should have one of the deepest understandings of the thing under development of anyone around. 14:38:19 I just do not believe in technical development being run by non-technical people. 14:39:26 KipIngram: he or she then should have an competent secretary that intermediates for him and his team when bosses, client or such have an 'idea'. 14:39:30 Well, there is plenty of CYA if you look around for it. 14:39:44 But I think it's mostly just because "that's the company culture." 14:40:25 Well, the management shouts: "I won't let my most competent programmer waste 5 hours a day managing a team instead of coding!" :þ 14:40:31 I did a lot of managing earlier in my career, and was largely successful at it (in terms of products getting out the door on time). But I could never be a manager at IBM. 14:40:41 I just don't know how to "operate" in that way. 14:40:56 I'm not particularly diplomatic or anything like that. 14:42:52 I once had to explain the difference of legal liability and, lets call it, axe liability. The former can be bribed off and calculated in as an expense while the latter, well someone could go after the CEO and rest of the company with an axe. 14:43:57 the latter is very hard to get into some managers and accountants heads when they are wanting to skimp on crucial safety features. 14:44:52 Blame the operator. 14:45:51 john_cephalopoda: not an option. The operator could be having a seizure or whatever and yet the system must fail safely. 14:46:22 If it is a system that must have functional safety, there are a lot of rules in place. At least where I am. 14:46:55 Complete tracability, from the requirements to the line of code. 14:47:22 Extensive documentation. Tests. Coding standards like MISRA. 14:47:56 john_cephalopoda: yebb. Plus electormechanical control system diagrams and so on. 14:48:58 I had two internships in a company that focuses on functional safety. I only did some simple, non-safe stuff but I saw what the employees were doing. So much work. So much certification work. And a lot of money being shifted around. 14:50:36 well, it is either that or complete discharterment of the company and personal liability for all the managers and c-levels. 14:50:44 It's expensive but you want to make sure that the severe industrial accident wasn't due to your code but either an operator's mistake or a wrong specification that was implemented in the right way. (E.g. customer wanting something that works well from 0 to 100 degrees celsius and then freezes it) 14:51:06 I heard those Volks-Wagen execs are barred from anything executive for the next twelf years. 14:52:38 hmm... if there is any operational temperture range specified, many systems have sensors (hey cheap NTCs or PTCs) to check if operation is being attempted in those tempertures. 14:53:30 Zarutian: Are you sure? I didn't hear anything about consequences after the Diesel scandal. 14:53:47 (The Volkswagen thing) 14:55:16 john_cephalopoda: it isnt widely talked about nor advertised. They got the option of going to prison for that amount of time or be barred. 14:55:36 Who exactly is? 14:55:57 Some mid-level executives who have to pay for decisions they didn't make? 14:57:06 john_cephalopoda: the managers and their executives and so on all the way to top. Well the topmost ones are on very short leash but not barred. 14:57:28 Somebody programmed it and somebody ordered for it to programmed. 14:57:40 I think you have to take accountability to the top like that - if you don't it becomes like the Mafia pre-RICO. 14:58:12 Without that kind of accountability, then the big shots can just sacrifice "cannon fodder" folks down the ranks. 14:58:59 That's exactly what RICO did - it made the dons responsible even if they didn't commit the crimes. 14:59:03 not sure but I heard that german company law has the option of stripping the company of all assets, dischart it and thus make the shares in it worthless. 14:59:40 dischart? Meaning void their corporate charter? 15:00:13 yebb 15:00:35 I have mixed feelings about all these detailed tracking systems. All the stuff you guys just said - that points up the good side. 15:00:51 But I've seen it get so bad that someone can't even fix a typo in a message without it going through the whole process. 15:01:21 Massively inflates the cost of trivial changes. 15:03:04 depends, perhaps the typo fix made that message string slightly longer requiring shifting of everything after it and so on. But that points to bad allocation of where things should be. 15:03:15 Zarutian: The German government actually owns huge parts of Volkswagen. 15:03:42 So damaging the company is something the state wants to avoid. 15:04:33 john_cephalopoda: yeah, but often the mere existance of the option to do so is the point 15:05:27 In the End the tax payer would pay for it. 15:05:56 KipIngram: so, regarding your managing teams, you would basically make a good sergant, if you know what I mean. 15:06:35 john_cephalopoda: for discharting VW? howso? 15:10:55 Yes, Zarutian. That was the nature of the culture in the company where I best succeeded at that. 15:11:14 Dismantle the state with Forth! 15:11:23 The Minarchist programmer's choice. 15:11:39 I ran engineering at that company; about 65 people, and they weree thoroughly beholden to me for their career success. Promotions, raises, hire/fire decisions, etc. - all that was in my hands. 15:12:32 I tried to pay attention to what everyone had to say (though you figure out pretty quickly who typically has good things to say and who doesn't), but once I made a decision that was what we did. 15:13:37 The owner of the company would sit down with me, and a few of the senior engineers, and we'd brainstorm around high-level architectural ideas he brought to the table. But he worked pretty much totally at the conceptual level - it was my job to turn whatever we walked away with into actual circuitry and software. 15:14:27 I loved it - I was happier there than anywhere else I've ever been. Because I got to create things, but didn't have to grind out ALL of the details myself. 15:14:50 I usually took some part of it to handle in detail myself as well, but the projects were a lot bigger than any one person could have done in those time frames. 15:16:42 And we had specialists for a few things, such as PCB layout and similar stuff. 15:40:10 Zarutian: Imagine the state would take actions against VW. The stocks would fall, the state would earn less money with the VW stocks they own. There is a loss and it has to be compensated with tax money. 15:45:57 --- quit: nighty- (Quit: Disappears in a puff of smoke) 15:47:36 KipIngram: You are talking in the past form, why did you leave that company? 16:01:14 The tech recession of 2001 came along. Our revnues were connected with the growth rate of the tech sector. Our revneue history was roughly 1995: $4 million, 1996: $10 million, 1997: $15 million, 1998: $21 million, 1999: $32 million, 2000: $50 million. Then, 2001: $11 million. 16:01:41 if you just from 30m to 50m 16:01:59 Suddenly we were much larger than we could afford to be - I had to preside over two layoffs in 2001. The first one was mostly eliminating "luxury employees," but the second one was painful - we sent away some damn good engineers. 16:02:13 and everyone else jumps a similar percentage 16:02:14 The whole atmosphere changed, and the owner started to feel the money pinch. 16:02:24 maybe you should invest in risk protection 16:02:53 Yeah, no kidding. Anyway, during 2001 pretty much the entire senior management staff was either let go or resigned, generally in salary order. 16:03:13 I resigned in mid-2002, but I suspect I would have been courteously bid farewell before too many more months. 16:04:09 It was a combination, in my opinion, of financial necessity for the owner as well as a bit of "freaking out." He started the company in the early 1990's as a graduate right out of Rice U - he never held a regular job. 16:04:21 And the revenue had never done anything except go up, the whole time. 16:04:30 So he just wasn't well-prepared emotionally to deal with hard times. 16:05:17 Your comment about risk protection is right on, I think; if the right plans had been laid in prior years (when there was plenty of money to lay them), things might have been different. 16:05:44 I'm not in any way saying I could have done better, or think I know what he should have done. 16:05:55 He was a quite brilliant guy - one of the smartest people I've ever been around. 16:06:14 It's hard to think about "hard times" when your company just gains and gains. 16:06:17 It was just a bad time economically, and for better or worse he hadn't prepared for such a th ing. 16:06:24 Right - exactly. 16:06:41 Off for the night. See y'all tomorrow. 16:06:43 I think all of us were giddy on success. 16:07:06 Night John. 16:07:22 --- quit: john_cephalopoda (Quit: Trees can see into your soul.) 16:09:50 I think that revenue growth came almost completely from Moore's Law. We made semiconductor programming equipment, for programming microcontroller, plds, and especially NOR flash chips. Software for cellphones, and that sort of thing. We made desktop units for engineers to use, but the real revenue came from big production caliber units that could program thousands of parts an hour. 16:10:03 Automated - pick and place machine moved the parts through the programming units. 16:10:23 So every year the flash got bigger, took longer to program, and the volume of flash moving through the industry grew. 16:10:33 The customers still had the equipment they bought last year, but they needed more. 16:10:50 Then in 2001 they stopped needing more - their installed base was enough. 16:11:39 A huge fraction of that $11 million in 2001 came from the desktop "engineering development" units - that market stayed mostly stable (or only shrunk a little), whereas the production machine market almost disappeared. 16:12:14 The company never really came back - it's still here in town, but it's a shadow of those days. 16:12:28 The other thing that happened there in the early 2000's was that they started making parts easier to program. 16:12:51 In the 90's you had to carefully control the voltages and currents applied to the pins - in somes cases you had to ramp the current and things like that. 16:13:02 So a company like us that made the equipment that knew how to do that prospered. 16:13:16 Later on you could more or less just assert a pin and write the data in like you'd write anything else. 16:13:30 The need for that highly specialized equipment just eroded. 16:14:29 So the place's days were numbered in any case, I think, but the tech downturn turned it into a cliff instead of a "downhill." 16:15:52 Maybe if it had been gradual the owner guy would have seen it coming and figured something out - he was pretty visionary. But the way it went by the time any of us saw it coming we were already in free fall. 16:17:06 For a few years after that I ran a consulting practice, but I only ever made just enough money to keep me from giving up. Around 2007 or so we wanted to move to a bigger house, and I realized I needed to go get a real job again. :-) 16:18:09 Went through three seismic / downhole tools companies and finally landed at IBM, via an acquisition. 16:32:39 --- join: rdrop-exit (~markwilli@112.201.162.180) joined #forth 16:56:39 --- quit: moony (Excess Flood) 16:57:02 --- join: moony (moony@unaffiliated/moonythedwarf) joined #forth 17:00:01 Good morning Forthwrights :) 17:04:35 --- join: nighty- (~nighty@kyotolabs.asahinet.com) joined #forth 17:09:44 #octets Number of significant bytes of . 17:09:48 --- join: [X-Scale] (~ARM@60.57.158.5.rev.vodafone.pt) joined #forth 17:09:53 : #octets ( u -- # ) log2 3 arshift 1+ 1 umax ;inline 17:09:53 --- quit: X-Scale (Ping timeout: 244 seconds) 17:10:33 --- nick: [X-Scale] -> X-Scale 17:11:26 arshift 17:11:28 ? 17:11:38 Arithmetic right shift 17:12:00 ah right 17:16:29 --- quit: pierpal (Ping timeout: 246 seconds) 17:17:33 pow2? Is a power-of-2? 17:17:44 : pow2? ( u -- -1|0 ) reset-low-1 0= ;inline 17:18:38 --- join: smokeink (~smokeink@42-200-189-163.static.imsbiz.com) joined #forth 17:23:40 reset-low-1 Reset lowest 1 bit. 17:23:51 : reset-low-1 ( x -- x' ) ddec and ;inline 17:24:41 ddec is a primitive, its stack picture is ( x -- x-1 x ) 17:25:21 i.e. Duplicate and post-decrement 17:28:30 an equivalent definition would be: : reset-low-1 dup 1- and ; 17:29:16 since and is commutative 17:34:32 mpn Most positive 2's complement number. 17:34:54 : mpn ( -- +n ) -1 shr ;inline 17:35:08 mnn Most negative 2's complement number. 17:35:20 : mnn ( -- -n ) 1 ror ;inline 17:37:11 --- join: tabemann (~tabemann@rrcs-162-155-170-75.central.biz.rr.com) joined #forth 17:38:35 min Signed minimum. 17:38:35 max Signed maximum. 17:38:46 : min ( n1 n2 -- n ) pivot drop ;inline 17:38:46 : max ( n1 n2 -- n ) pivot nip ;inline 17:39:00 hey guys 17:39:11 Hi tabemann 17:39:37 Still half asleep, morning coffee 17:39:55 umin Unsigned minimum. 17:39:55 umax Unsigned maximum. 17:40:03 : umin ( u1 u2 -- u ) upivot drop ;inline 17:40:03 : umax ( u1 u2 -- u ) upivot nip ;inline 17:40:09 I'm still wondering how to have some kind of timer interrupt in linux 17:40:37 because I have to rely on a stupid while(counter--){} loop to determine when to change task 17:41:11 which is stupidly expensive processor time, as it's an extra conditional branch and an extra unconditional branch for *every* word executed 17:41:16 Why don't you let Linux take care of it, Linux is preemptive 17:42:09 because then forth itself has to be thread-safe, whereas with what I have right now forth words are atomic 17:42:25 and also Linux threads are too heavy-weight 17:43:17 I'm thinking of something more like Haskell threads, where they're very lightweight 17:43:21 I prefer cooperative Forths, I avoid preemptive Forths 17:43:49 Someone yesterday answered your question, look into signal() and alarm() 17:43:50 I'm thinking of writing code so one can implement cooperative forth on top of my preemptive forth 17:43:59 WHY? 17:44:44 because it's stupidly easy with a minimal amount of runtime support 17:45:00 multiple preemptive tasks which each can contain multiple cooperative tasks 17:45:31 Sounds complicated 17:46:06 the main thing I'd have to do is to make it so the user can change the current stack base and top 17:46:59 why? 17:47:17 --- join: dave0 (~dave@47.44-27-211.dynamic.dsl.syd.iprimus.net.au) joined #forth 17:47:29 It all seems like unecessary complication to me 17:47:42 yes 17:47:44 hi 17:47:45 ualarm is what I want 17:47:52 Hi Dave0 17:48:02 hey dave0 17:48:13 hi rdrop-exit, tabemann 17:50:05 My Forths usually have only 2 tasks, a foreground task, and a background task. Any additional concurrency I handle with coroutines. 17:50:16 *2 cooperative tasks 17:51:00 You don't have any interest in running on high core count boxes? 17:51:32 I have thought of N:M concurrency as an option 17:51:45 The only Forth I run on a desktop is the host IDE for my umbilical. 17:51:56 my current Forth runtime is designed so it could be easily repurpose to N:M concurrency 17:52:15 however, if I switch it to using ualarm() it will necessarily have to be single-core 17:53:03 I'm trying to figure out how to change tasks with ualarm() without any extra branches outside of task switch time 17:53:18 I tend to just write the Forth I need today, if tomorrow I need multiple cores I will write a new Forth for it. 17:54:20 :-) Fair enough. I embrace that basic philosophy. 17:54:42 dammit, ualarm() seems like it will be too complex with too little benefit, without rewriting my forth in assembly so that words call one another with jumps rather than subroutine calls 17:54:58 because I'll still have to run my words in a while loop 17:55:00 I'm at least trying to have this one be something that can "go there," but we'll see how well that turns out. 17:55:31 tabemann: You're in C currently? 17:55:37 so all I'll get out of it is eliminating a subtraction and compare, and turning a conditional jump into an unconditional one 17:55:41 yes 17:55:59 With gcc's "pointer to label" extension you can get the C to use jumps if you want to. 17:56:02 If I were to leverage multiple cores, I'd probably have a single Forth on each, communicating with each other. 17:56:05 hi KipIngram :-) 17:56:15 I've done that - it works just fine. 17:56:20 Hi dave0. 17:56:26 that's what I'd do too 17:56:48 my Forth is designed so one Forth runtime can be on each core, within the same Linux process 17:56:51 Well, I'm close to that. They all link to a common core dictionary, but other than that they behave as separate ones. 17:57:00 I just managed to avoid having to have actual copies of the core words. 17:57:29 I would have them be independent, spin one up for each core. 17:57:59 The advantage of that would be that each one could reside in memory NUMA local to its core. 17:58:18 Right 17:58:54 okay, I've gotta go; bbl 17:59:10 ciao tabemann, good luck 17:59:26 --- quit: smokeink (Remote host closed the connection) 17:59:48 --- join: smokeink (~smokeink@185.189.254.154) joined #forth 18:03:23 --- quit: tabemann (Ping timeout: 246 seconds) 18:08:37 BTW Kip, we were chatting about circular stacks the other day, have you by chance read my reddit post on the subject? 18:10:05 https://www.reddit.com/r/Forth/comments/957i86/fun_with_circular_stacks/ 18:14:06 Gotta go, chat again tomorrow. 18:14:17 --- quit: rdrop-exit (Quit: Lost terminal) 19:06:47 --- quit: dddddd (Remote host closed the connection) 19:46:03 --- join: tabemann (~tabemann@2602:30a:c0d3:1890:2db1:4ef6:126b:d5ee) joined #forth 20:03:50 --- quit: dave0 (Quit: dave's not here) 20:16:43 --- join: pierpal (~pierpal@host91-236-dynamic.22-79-r.retail.telecomitalia.it) joined #forth 20:20:32 --- quit: ncv (Remote host closed the connection) 21:03:40 yes! got rid of the garbage infesting the data stack upon startup 21:14:09 --- quit: jedb (Ping timeout: 240 seconds) 21:24:49 --- join: jedb (jedb@gateway/vpn/mullvad/x-iixiaymxlazzleli) joined #forth 21:50:57 --- quit: jedb (Ping timeout: 244 seconds) 21:59:50 --- join: jedb (~jedb@162.219.176.251) joined #forth 22:08:41 --- join: dave0 (~dave@47.44-27-211.dynamic.dsl.syd.iprimus.net.au) joined #forth 22:08:52 re 22:13:18 --- quit: proteusguy (Remote host closed the connection) 23:06:42 --- quit: Lord_Nightmare (Ping timeout: 246 seconds) 23:29:01 --- quit: dave0 (Quit: dave's not here) 23:59:59 --- log: ended forth/18.11.12