00:00:00 --- log: started forth/02.06.04 00:38:17 --- quit: I440r ("Reality Strikes Again") 01:18:22 --- join: davidw (~davidw@adsl-238-74.38-151.net24.it) joined #forth 04:17:25 hi 05:13:39 --- join: sif (~siforth@ip68-9-58-81.ri.ri.cox.net) joined #forth 05:13:39 Type sif: (or /msg sif to play in private) 06:34:11 --- join: cleverdra (julianf@0-2pool111-42.nas2.florence1.sc.us.da.qwest.net) joined #forth 06:50:21 --- quit: davidw (Read error: 113 (No route to host)) 07:46:10 --- join: davidw (~davidw@adsl-ull-66-108.42-151.net24.it) joined #forth 07:48:14 hi 07:48:53 hi 07:48:59 whats up? 07:50:41 * cleverdra shrugs. 07:50:54 Has anyone here used any of the PalmOS Forths? 07:51:45 ja, ja, koszi. mar rajta vagyok az ugyon 07:52:05 cleverdra: i tried them 07:52:35 curiously onetom, what did you think? 07:53:02 quartus, dragon & an experimental 1 07:53:18 ppforth? 07:53:22 cleverdra: what should 1 think? 07:53:31 aha, probably that 1 07:54:04 what is also available 4 linux (or what) 07:55:00 gforth, kforth, pfe, ficl, iforth(commercial), pforth, eforth, 4th. 07:59:45 cleverdra: what is the quiestion? 08:00:27 onetom - there isn't one. I just answered what I thought was your question. 08:02:00 pfe seems nice 08:02:55 I haven't used any of the linux Forths except for gforth for any length of time. 08:04:59 don't forget I440r's isforth 08:05:48 oh, yeah. 08:11:28 a distro war langja sose fog teljesen kialudni asszem 08:11:41 errol kb annyi ertelme van vitatkozni 08:29:34 * rob_ert screws hungarian. :-) 08:33:01 I thought that maybe he had a cat walking on his keyboard 08:33:25 davidw: :) no, not really 08:56:11 --- join: I440r (~mark4@1Cust216.tnt3.bloomington.in.da.uu.net) joined #forth 09:07:46 Hey ho 09:08:29 rob - who you callin' a ho, ho? 09:18:57 heh 09:18:59 lol 09:19:32 whats the name of that russian guy that comes in here, with the "bell whistle dive dive" quit message 09:19:50 he was in here last nite talking about writing code to trash peoples hard drives 09:20:24 I440r: lol 09:21:48 if he is serious about writing that sort of code i do not want him in here 09:21:53 gforth: sh echo hello world 09:22:03 he wasint saying it jokingly 09:22:33 well, confront him, and take a minute to tell him you don't want criminals here 09:22:44 before you boot him 09:22:58 i told him last nite i did not like people who wrote destructive software 09:23:00 and he left 09:30:56 i fixed a bug in isforht last night that would NEVER have slipped by if there wasnt a stupid bug in the linux kernel 09:31:13 linux allows you to READ stdout and WRITE to stdin 09:31:19 i had stdout and stdin reversed 09:34:43 hehehe woops! 09:35:27 I bet it's not a bug 09:35:28 or at least not considered one 09:35:50 i bet not too 09:38:28 Serg_penguin :} 09:40:43 I440r - that's interesting. 09:41:00 I440r - how did the bug manifest? 09:41:43 clev i was reading from stdout and writing to stdin. this works perfectly when reading keyboard and writing display 09:41:52 but any files PIPED to isforth were ignored 09:41:52 and i couldnt pipe OUT 09:50:34 --- quit: I440r (Read error: 104 (Connection reset by peer)) 09:51:38 --- join: I440r (~mark4@1Cust216.tnt3.bloomington.in.da.uu.net) joined #forth 10:03:22 by the way 10:03:27 ZOG has been sort of released 10:03:30 ZOG? 10:03:41 it's available at http://www.dedasys.com/freesoftware/ under the projects heading 10:03:59 the name is explained on the web page:-) 10:30:42 --- join: kc5tja (~kc5tja@stampede.org) joined #forth 10:30:42 --- mode: ChanServ set +o kc5tja 10:31:29 kc5 hi 10:31:39 i discovered a bug last nite in my isforth kernel 10:31:39 a REALY stupid one 10:31:58 but if there hadnt been a bug in the LINUX kernel it would never have slipped by 10:32:04 I was on the #hamradio channel last night, and we got into a big bsd versus Linux war, which was quickly quenched when I pointed out several observations that, frankly, "the user almost never cares." 10:32:40 That conversation quickly evolved into how source distribution methods are vastly superior to binary distributions (which few object to, but most feel that binaries are more convenient, for rather obvious reasons). 10:33:10 :) 10:33:33 kc5 forth pioneered open source :) 10:34:11 I shut the whole thread down when I said, "I can't wait until I finish FS/Forth. Forth offers pure source distribution model with near zero-compilation time, and performance on par with unoptimized C for even the most naive of compilers. Just chmod 755 the Forth program source, and make sure the #! line has the correct path for the FS/Forth environment, and away you go." 10:34:29 isforths bug is that it was reading from stdout and writing to stdin. the linux kernel bug was that it didnt flag these as an error but "interpreted what i realy meant to do" 10:34:30 I then said that I was going to take extreme advantage of that with Dolphin, my operating system. 10:34:40 --- quit: gforth (Ping timeout: 14400 seconds) 10:35:03 Needless to say, nobody said anything more on the topic thereafter, and I had wonderful peace and quiet ever since. 10:35:05 kc5 - hee. 10:35:30 kc5 lol 10:35:41 lol 10:35:41 spoilsport :P 10:36:05 Hey, I wasn't about to argue a fruitless battle with them. 10:36:33 I mean, with both sides being right, there's no better way to end the fight than with the only solution I'm aware of that fulfills both source distribution freedom and binary target efficiency. 10:37:02 hehe 10:37:11 ya... isforth definatly does that now 10:37:42 At almost a megabyte per second of compilation speed, that's quite impressive. FS/Forth will not be able to compete in compile speed. 10:38:59 i had a friend do an extend on his 50 mhz 486. it did 117k of soruces in .5 of a second 10:39:12 kc5 sure it will just do what i did 10:39:20 What source are you using to measure this with? 10:39:23 will fs/forth be able to memorymap the entire source ? 10:39:34 I440r: No. 10:39:40 the extend 10:39:43 I440r: And no, in that order. :) 10:39:57 printf "fload isforth.f\n" | time ./kernel.com 10:40:07 kc5 oh 10:40:57 The use of hashing for vocabularies is unbearably difficult for me, and actually prevents me from implementing MARKERs and FORGET in any efficient manner. 10:40:59 the above printf works now because i fixed the aforementiond bug :) 10:41:37 I'd have to maintain the state of all 64 buckets in each MARKER. 10:41:49 And that's for all vocabularies. 10:41:56 It's just too much. 10:42:01 forget is a bitch when you use hashing 10:42:14 even without it its still a bitch if you use vocabularies 10:42:37 FORGET is a bitch if you use multiple vocabularies too, because you need to adjust the LAST for each vocabular you've ever defined. 10:42:39 you have to check every vocabulary to see if its above the forget point 10:43:29 Depends on how you do vocabularies. 10:43:32 kc5 just have a single thread vocabulary. eaach voc remembers its own last 10:43:52 FORGET is a bitch if you use multiple vocabularies too, because you 10:43:52 need to adjust the LAST for each vocabular you've ever defined. 10:44:04 :) 10:44:09 but if you forget THE VOCABULARY itself you need to make sure that its not in context. if it is you need to reomove it 10:44:09 and if its CURRENT you need to remove it from crurent too! 10:44:32 Removal is automatic by the adjustment of LAST in each vocabulary. 10:44:47 Yes, CURRENT is another issue. 10:44:59 Better to let the Forth programmer shoot his own self in the foot with context/current. 10:45:05 oh yea - i see where you get that... isforth wont have that problem eventually 10:45:09 One of the ideas I was thinking of using for vocabularies is a B-tree. 10:45:33 because the definitions of the various vocabularies wont be interleaved 10:45:41 The key for each node is (containing vocabulary xt,word name) 10:46:11 I440r - how will they not be interleaved? 10:46:17 The nice thing about this structure is that the whole dictionary exists as a single meta-vocabulary; forgetting is made trivial. 10:46:25 cleverdra: if i forget a vocabulary its unchained from the vocabulary chain (each voc points to the previous one) and i also remove it from context/current 10:46:28 Yes, they'll be interleaved with a B-tree too. 10:47:03 cleverdra: because ever voc will have its own memory block 10:47:29 this will allow me to mark various vocabularies as being TRANSIENT. 10:47:29 transient vocabularies will not be saved on turnkey 10:47:54 i.e. i can totally discard the entire contents of the compiler vocabulary 10:48:06 not just the headers, he code too 10:48:19 COMPILER is immediate words, IF THEN? 10:48:35 cleverdra: Typically, yes. 10:49:49 compiler is the creating part of if/else/then and loops etc, plus : ; does>. all creating words and those words that have no application other than inside creating words 10:49:52 discarding words doesn't seem like a problem for turnkey apps to me -- one thing you can do is just pick a single 'entry point' word and only put words that this word depends on in the resulting binary... though this would depend on a distinct codespace to be easy. 10:50:13 Not just immediate words, then. 10:50:16 for isforth thats everything inside compile.1 10:50:25 At any rate, my vocabulary system employing B-trees (or, at the very least, binary trees), should simplify the implementation of words like FORGET significantly, while simultaneously speeding up compilation speed. 10:50:32 including find ' ['] 10:50:32 etc 10:50:41 no point in haveing a word to search headers if there are none :) 10:51:33 kc5 i never understood what a b-tree was heh 10:51:33 i know what a binary tree is tho 10:52:02 B-trees are the most efficient searching data structure on the face of the planet. 10:52:36 * cleverdra just keeps all this in his special memory that handles undefined terms. 10:52:46 and i know what a BSP tree is :) 10:52:55 They are multi-way trees that are very, very wide, but, very short -- so to find a node in a database of 262144 nodes using a 2-3-4 B-tree, typically takes 4 to 6 "hops" in the tree to find it. 10:53:13 cool 10:53:29 thats better than hashing does :) 10:53:39 The effective definition of a B-tree is that all the leaves are precisely at the same level in the tree. 10:54:01 i was trying to think how i could implement a binary search ona given thread hehe 10:54:23 So you have a number that says "second part of database, third part of the remainder, fourth part of that" -- which leads you to the node? 10:54:33 No. 10:54:40 s/remainder/part/ 10:54:50 Each node has a set of ranges associated with each link. 10:55:16 If a <= key < b, take link 0. If b <= key < c, take link 1, ...etc... 10:55:38 In a 2-3-4 tree, each node can have two, three, or four links. 10:57:07 Nearly every major filesystem today stores its meta-information (and often, the payload data) in B-trees for very rapid retrieval. 10:57:33 B-trees are damn hard to implement though. 11:05:32 --- quit: cleverdra ("Leaving") 11:07:21 Uhm 11:07:24 A little question... 11:07:34 Can the FPU stack on an x86 overflow? 11:08:45 Or is st7 destroyed when something new is pushed? 11:09:29 st7 is destroyed 11:09:55 It has an interrupt for overflow and underflow, but it doesn't save enough context to do anything useful, so it's never actually used. 11:15:27 --- join: XeF4 (atmzeb@12-245-116-85.client.attbi.com) joined #forth 11:15:30 I see. 11:15:31 Thanks. 11:16:30 Hmm...skip-lists might prove to be an interesting data structure for the vocabulary. 11:26:16 --- quit: I440r (Connection timed out) 11:27:43 --- join: XeF4_ (~XeF4@dsl-XIV-106.kotikaista.weppi.fi) joined #forth 11:28:19 I just LOVE how Adobe Acrobat reader totally destabilizes my computer. 11:28:22 brb -- rebooting. 11:28:37 I just *LOVE* how a certain OS lets itself be destabalized 11:36:46 --- join: I440r (~mark4@1Cust216.tnt3.bloomington.in.da.uu.net) joined #forth 11:36:57 back 11:37:34 :) 11:37:48 damned sister wanted me to drive her to do here community service :P 11:38:11 woohoo!!! i got 40k of 650 !!! lol 11:38:11 eta 999:59 11:38:23 40K of 650 what? 11:38:44 * kc5tja is researching the skip list data structure now. 11:41:59 downloading fbsd iso 11:51:09 41k now 11:51:38 You mean, 41MB... :) 11:51:47 41K is less than 49152 bytes. :) 11:54:57 I440r: isforth 1.07 can compile about 900KB/sec on what machine? 11:58:39 on my k6-3/550 11:58:50 on a 486/50 it compiled about 117k in half a second 11:59:34 erm yes. i mean i got 42 megs so far hehe lol 11:59:43 43 now 11:59:53 thats $c000 to you :P 12:00:23 i know $c000 is 49152 because that was a memory block above the basic rom in a c64 that you could use for machine code stuff :) 12:01:18 --- join: futhin (~thin@h24-64-175-61.cg.shawcable.net) joined #forth 12:01:51 $c000 to $dfff :) 12:02:02 futhin bleh! 12:02:17 Actually, $C000-$CFFF; $D000-$DFFF was reserved for I/O, unless you mapped it out. 12:02:23 futhin bleh? :P 12:02:26 bleh is my last name! 12:02:45 xef4 the extend on isforth is 117k of forth source. on my machine that gets done in .15 of a second. i had guestimated it at a tenth of a second 12:03:08 so 100k in a tenth of a second is about a meg a second. i downgraded that to 900k tho :) 12:03:30 dont want to show off ;) 12:04:09 you should've just said 999k :P 12:04:13 =P showing off would be "900K in 0.1sec on a 486-33" without mentioning that every line begins with \ 12:04:41 lol 12:05:01 not every line dood! come on... just every other :P 12:06:22 I440r: 117KB in 0.15s yields a compile speed of 780KBps 12:06:27 (according to my calculator) 12:07:33 kc5 well then i didnt downgrade it far enough. i rounded the 117 to 100k and 100k in a tenth of a second is a meg a second 12:07:33 i geustimated a tenth of a second 12:07:55 and 780k per second is STILL awesome! 12:08:17 Yes, it is. That's 0.75MB per second. 12:08:33 0.76, sorry 12:09:04 i just wish i could download at that speed :P 12:09:04 lol 12:09:47 --- mode: ChanServ set +o futhin 12:10:07 --- topic: set to 'Actual Project: To design the easiest, simplest and mightiest 32bit Virtual Foth Machine for x86/ARMthumb/PowerPC possible -- CrowKiller / Auto-Op level has been changed to 30 for the hell of it' by futhin 12:10:20 Heh. 12:10:58 Once again, Forth is bound by I/O limitations... 12:11:00 :) 12:11:12 what kind of i/o limitations? 12:11:17 anything out of the ordinary? 12:11:25 compared to any other language or executable? 12:11:44 How long does it take GCC to compile a five line Hello World program? 12:11:54 Substantially longer than 0.15s. 12:11:57 a second 12:11:59 or so 12:12:07 More than a second on my 800MHz Athlon. 12:12:09 About 2. 12:12:15 hm 12:12:24 well it's doing a lot of other stuff 12:12:29 Larger projects have header file access amortized of course. 12:12:31 Of course. 12:12:57 But, the point here is that GCC is bound by I/O -- it has a lot of I/O going on. 12:13:15 But most of that I/O is not reading in the source to be compiled. 12:13:44 For larger projects, one would think this would be amortized. However, in practice, it's not really. Most source files in a large project are relatively small. 12:13:47 futhin its not doing alot of other stuff 12:14:14 Forth just takes the source code and compiles it straight into the dictionary, without doing a lot of I/O. In fact, it has almost *no* I/O going on while compiling. 12:14:20 its includint header files that include header files that include header files and you can expect it to try include the same header files at least 24837652987435698237465982659243 times each for that 5 line hello world program 12:14:53 Hence, if it's compiling a file from harddrive, or from a stream over a socket, Forth spends most of its time waiting for source to compile, rather than actually compiling. 12:15:02 I440r: That is "other stuff" in this context. 12:15:30 heh 12:15:53 but in THIS context, the "other stuff" is i/o which backs up your claim that its bound by it :) 12:15:53 i woudl say teathered by it myself 12:16:07 I'm willing to bet you that isforth will compile substantially faster if it explicitly read in program source into malloc()'ed memory and compiled from there, since mmap() still requires I/O to "page in" the mmap'ed file. 12:16:35 Tethered is not used for this purpose in the computer science arena. 12:16:52 thats what it does 12:16:58 You have I/O bound processes and CPU bound processes. The difference between them is whether or not one spends more than 51% of its time doing I/O or processing. 12:17:03 it memory maps the source files 12:17:11 oh 12:17:19 Right, but mmap() doesn't load the file's contents until it needs to. 12:17:43 it would be the same - i malloc using a syscall, then i do a read of the entier file into that malloc'd buffer 12:17:58 Well ... that's not mmap()ing the file then. 12:18:05 i affect the same thing with one syscall 12:18:05 oh! 12:18:05 now THAT i didnt know 12:18:20 You told me you "mapped" the file into memory, which to me, is using mmap() to create a "memory mapped file." :) 12:18:34 maybe i should add a mmap filesize bounds do i c@ drop loop to it hehe 12:18:43 i did use sys mmap 12:19:26 I would just try loading a file into memory using read() instead of mmap(), and actually time the compile speed from there. 12:19:35 I don't see that mmap should be much shorter than reading everything to memory first. 12:19:36 That will give you the true speed of your compiler. 12:19:47 in either case, each 4KB source chunk gets read from disk exactly once. 12:20:03 XeF4_: But I/O time is interleaved with compile time. 12:20:19 If you want to measure the compiler's highest performance, you must exclude I/O time from that measurement. 12:20:24 xef4 doing lots of 4k reads is slower than doing one 50k read 12:20:35 however, MOST of the kernel source files are LESS than 4k 12:20:42 This means doing all the I/O up front, starting the timer, then launch the compiler, and then report the duration spent compiling. 12:20:47 so i think the statistics will be close 12:21:05 *nod*, for benchmarking just the compiler, it makes sense 12:21:20 Right, and as I'm currently understanding it, that's what is the goal. 12:21:21 --- mode: futhin set +q serg_penguin!*@* 12:21:27 but for reducing the actual wait times for the user, it doesn't make much(any?) difference 12:21:33 From a pragmatic sense, mmapping the file to be compiled is a brilliant solution. 12:21:46 No, the user won't see any difference at all. 12:22:03 the values i have now are close ennuff heh, an exact measurement is meaningless on every other machine in the world 12:22:08 --- mode: futhin set -b serg_penguin!*@* 12:22:14 Hah. 12:22:15 so an approximate measure is all thats realy required 12:22:16 What did he do= 12:22:23 Except an immeasurably small performance boost because, as I440r mentioned, reading 4K at a time is somewhat less optimal than reading 64K chunks at a time. 12:22:36 kc5: unless memory is nearly full, then he will see a difference because the malloc()ed approach will swap and get read from disk twice 12:22:48 (just experimenting with the +q mode :P 12:22:59 s/get// 12:23:03 futhin: pff.. ;) 12:23:07 Right. 12:23:23 whats +q ? 12:23:52 every time you nest an fload you create a new mmap too 12:23:52 dunno 12:23:55 The person in question can't speak. 12:23:58 for the new file 12:24:02 if FS/Forth's compile speed is too slow for my needs, I'll recompile it using Skip Lists instead of a singly linked list. 12:24:03 Set +q in I440r. 12:24:08 And show him ;) 12:24:26 +q is +b 12:24:34 hehe 12:24:36 except different in how the list is maintained or something 12:24:38 evil! 12:25:05 I440r: btw, is there some reason you don't currently support blocks, since it seems you do it that way on the low level anyhow? 12:25:55 xef4 the reason is i always considerd blocks to be archaic. but since having chuck in here ive been thinking of adding support for them 12:26:11 as a means of doing structures mainly 12:26:27 blocks FORCE you to code smaller & presumably better 12:26:35 that's the main feature imo :P 12:26:37 no they don't 12:26:51 s/force/encourage 12:27:40 futhin they force you to code in a more horizontal manner thus disallowing proper commenting 12:27:49 you try CRAM as much as you can into a block. very bad 12:28:10 ah screw commenting 12:28:17 and i hate the concept of shadow blocks 12:28:18 heh 12:28:27 yeah that's true 12:28:40 it doesn't encourage good commenting 12:29:19 they also let you SCATTER sources arround fragmenting the flow of the code on the eye 12:29:35 you cant read block files very easilly OUTSIDE the forth environment 12:30:17 brb 12:30:23 bbl in an hour 12:31:21 I440r: dd if=blockfile cbs=64 conv=unblock 12:31:36 --- join: cleverdra (julianf@0-1pool37-189.nas2.florence1.sc.us.da.qwest.net) joined #forth 12:32:23 xef4 heh i never thunked of that! 12:32:24 Well, if you code according to extreme programming practices, you don't need comments anyway, so blocks are quite nice. 12:32:41 but it still means you have to SORT the blocks by load sequence 12:32:52 However, I do like the relative compactness of files when it comes to organizing things. Blocks are rather wasteful of space when you want to organize your words by function. 12:33:16 kc5 im sorry but i will NEVER agree that comments are redundant in ANY method of coding 12:33:39 I440r: Then you're ignorant, and refuse to even learn about extreme programming, so don't even bother arguing about it. 12:33:40 : this-word-takes-two-cells-and-returns-their-sum + ; 12:33:47 what comments does that word need? =) 12:34:07 clev: plenty, none of them very nice. 12:34:18 OK, whatever. 12:34:20 * cleverdra nods. 12:34:28 cleverdra: none but the author needs shooting :) 12:34:47 In the meantime, whiling I'm banging out projects faster and easier to read than anyone else, you'll still be hacking away on documentation for your code, which is inherently hard to read and difficult to maintain. 12:34:56 kc5 - could you give us an example of extreme programming code that doesn't need commenting? 12:35:04 xef4 lol 12:35:13 xef4 expletive deleted ? 12:35:14 kc5 - don't be so defensive. 12:35:27 kc5 - for one thing, it bodes ill of XP. 12:35:53 No, because you would need to sign an NDA with Hifn, inc. to see the code. 12:36:17 I'm defensive because people tell me I'm full of shit, without taking the time to even *READ* about what XP is even about. 12:36:21 kc5 - XP isn't something you can do on the fly? 12:36:29 woohoo i got 47.33 megs of this 650 12:36:35 cleverdra: No -- it's something you have to adopt on a project-by-project basis. 12:36:36 kc5 - I440r has very strong opinions, but I didn't see him say that you were full of shit. 12:36:42 kc5 - OK. 12:36:45 I do. 12:36:52 X <-- my signature 12:36:52 heh 12:36:58 kc5 im sorry but i will NEVER agree that comments are redundant in ANY method of coding 12:37:13 * cleverdra gasps in indignation! 12:37:36 And since XP very strongly discourages commenting in favor of self-documenting program code, that, to me, is outright "You're full of it." 12:37:46 Oh, wait, I think I can give an example...let me dig something up. 12:37:49 (it's written in Python) 12:38:11 kc5 - he'll never agree. He says that he doesn't agree. How does this translate to an attack? 12:38:20 OK. 12:38:55 It's not an attack. 12:39:00 But it is a refusal to learn. 12:39:06 I can't deal with that. 12:39:12 OK. 12:39:16 Anyway, prepare for a flood. 12:39:59 def JDGCmd(): 12:40:00 return "d:\work\pst\src\host\jdg\jdg\debug\jdg.exe" 12:40:00 def JDG_tn(): 12:40:00 return "-tn %s" % ( BaseTestName() ) 12:40:00 def JDG_ts(): 12:40:00 return "-ts 0xAEF" 12:40:02 def JDG_jc(): 12:40:04 global jobCount 12:40:06 return "-jc %d" % ( jobCount ) 12:40:08 def JDG_rs(): 12:40:10 return "-rs %d" % ( rnd( 0x7FFFFFFF ) ) 12:40:12 def JDG_dx(): 12:40:14 global maxDuration 12:40:16 return "-dx %d" % ( maxDuration ) 12:40:18 def JDG_dn(): 12:40:20 global minDuration 12:40:22 return "-dn %d" % ( minDuration ) 12:40:24 def JDGOptions(): 12:40:26 return JDG_tn() + " " + JDG_ts() + " " + JDG_jc() + " " + JDG_rs() + " " + JDG_dx() + " " + JDG_dn() 12:40:28 def JDGCmdLine(): 12:40:30 return JDGCmd() + " " + JDGOptions() 12:40:32 def RunJDG(): 12:40:34 print JDGCmdLine() 12:40:36 os.system( JDGCmdLine() ) 12:41:11 That almost looks like it could be replaced with a JDG class and several methods. 12:41:27 But why? 12:41:32 It offers no significant advantages. 12:41:41 My job is to run the JDG tool. 12:41:41 I agree, just noticing. 12:41:50 What, curiously, is the JDG tool? 12:42:03 Now, if I had useful state to associate with it, then I would agree, a class would be better suited. 12:42:18 Any programmer will look at that, and recognize immediately what I'm doing. 12:42:22 No need for comments. 12:42:23 Zero. 12:42:44 WHY i need to run the command is discovered by reading the code that invokes RunJDG(). 12:42:59 That, however, is definitely Hifn proprietary, and I can't post that. 12:43:16 Notice it's also very Forth-like. 12:43:38 EXTREME factoring (One of XP's heavy hitting points is factor, factor, factor, and then factor some more). 12:43:52 XP also is about repeatable, automated unit testing. 12:44:12 The code above isn't unit-tested, for it cannot break (XP rule #1, beyond even factoring: Unit test all that can break.) 12:44:37 The other trick to coding using XP style is to write the function as if its dependencies already existed. 12:44:47 I wrote RunJDG() first, long before I write anything else. 12:44:53 (I code Forth in exactly this same way) 12:45:01 * cleverdra nods. 12:45:21 um, how else do you write the functiobn? 12:45:45 Well, the typical Python programmer will look at that and be totally grossed out. "That's slow," they'll say, because Python's function call overhead is immense. 12:45:56 So they'll write RunJDG() in one big Python function. 12:46:17 They'll build the command line up using various methods, then call os.system( cmdline ) right in that one function. 12:46:55 Not very well factored, and for my uses especially, not optimal. Note the JDG_ts() function returns a fixed string. It will not always do that. 12:47:03 In fact, that's one of the modifications I need to put in today. 12:47:40 kc5tja: why is your way better than that, though? 12:47:50 Uh huh. I agree that no comments are needed here. The only extra information you might want, if someone pasted it to you in an IRC channel, is what the various arguments mean to whatever jdg.exe is -- but that's just (jdg.exe --help) 12:48:28 prolly. 12:48:35 Etaoin: Source is more managable, and the code is more re-usable. 12:48:55 Well, I can't do that, because it's Hifn proprietary information. 12:48:57 as it's factored into smaller parts 12:49:00 Also, if this were Forth, kc5 could just flip a switch and everything would inline. 12:49:09 Etaoin: Yes. It also aids in code self-documentation. 12:49:24 Note that the code is written in an almost functional style. 12:49:44 JDGCmdLine(), for example, returns what you'd expect: JDGCmd(), a space, and JDGOptions(). :) 12:50:08 kc5 - how is it in an almost functional style? 12:50:28 Well, within that context, I guess it is functional -- the code has no side effects. 12:50:37 Ah. 12:50:46 Functional in the functional programming language sense. 12:51:03 kc5: hm yes, so why on earth do XPers use python&c instead of {lisp,forth,erlang}? 12:51:05 Yes, I'm just not very familiar with that sense =) 12:51:51 XeF4_: Because XPers don't care what language they program in, what they care about is their paychecks. Many XPers are quite well versed with Smalltalk and Lisp, for example. 12:52:54 * cleverdra notes that the above could be written in basically any language with minimal differences. 12:52:58 cleverdra: Functional languages are interesting in that variables are assigned once and once only in the program or function (and in the case of a function, only by passing it as an argument). Hence, data flow through the program is deterministic and predictable, even from static analysis. 12:53:19 cleverdra: And that is why XP isn't language specific. It's a generic process that is applicable to a whole slew of other languages. 12:53:49 Good Forth programmers have been doing 80% of XP since 1969. :) 12:54:03 It's just that XP is a formalization fo the whole process. 12:54:12 What's the 20% they haven't been doing? 12:54:23 And it's a reaction to all the bloated software development methodologies employed in the majority of software development houses today. 12:55:18 Repeatable and automated unit tests, regular interaction with the product's customer, automated acceptance testing, paired programming, and maintaining project velocity. 12:55:57 XP also promotes very frequent integrations and releases -- typically every other week. 12:56:05 But that is obviously project dependent. 12:56:16 * cleverdra nods. 12:56:27 So when do you use comments, if at all? 12:56:33 When I optimize. 12:56:40 And only when I optimize. 12:56:58 kc5 frequent releases means that for any given release you wont have introduced many NEW bugs, less to undo! 12:57:23 If I were to replace that portion of code above with a blindingly fast implementation that sits in one function, but the logic of which is difficult to follow, I write a comment explaining how it works, and if necessary, WHY it works. 12:57:43 # The following uses a B-Tree for quick retrieval of... 12:57:51 I440r: Not only that, but unit tests ensure that bugs which are fixed stay fixed forever. 12:58:08 rite 12:58:24 recuring bugs are silly heh 12:58:39 cleverdra: Actually, not that. The use of a B-tree should be transparent to whoever is using the data structure. However, the implementation of that B-tree will include gratuitous comments on how the search algorithm is optimized. 12:58:44 "i know! lest put that bug back in, i had fun finding that" :) 12:58:45 * cleverdra notes http://www.extremeprogramming.org/ 12:59:07 I440r: Well, Mozilla is a great example of bugs being fixed for two versions, then re-appearing in the third version after it was originally fixed. 12:59:23 Most annoying. 12:59:39 mozilla is a perfect example of how NOT to code 12:59:48 i abandoned netscape and mozilla for opera 12:59:49 kc5: but it's "shorter" to say "there have been some regressions, this is normal" than to write unit tests :\ 12:59:56 ill suffer the banner adds 13:00:17 XeF4_: But you can never, ever be sure that those regressions are still true, unless you constantly run those regressions. 13:01:10 I've had PLENTY of times when I've coded a quick program, tested it interactively and worked, then coded something that used that program, and it failed. 13:01:15 An automated unit test is just a program that calls your functions and checks that they return the correct values, produce correct output, etc.? 13:01:34 A quick check of the original program shows a problem where I changed *one thing*, and that caused the whole house of cards to come tumbling down. 13:01:42 Yes. 13:01:54 JDG itself has 945 unit tests. It will not be failing any time too soon. 13:02:13 EVERY time I build it and check it into CVS, I make sure ALL of my unit tests pass. 13:02:18 If they do not, it is not checked into CVS. 13:02:57 JDG has never regressed in its capabilities because of that, and because most of the functions are very small, I've refactored it many, many times. 13:03:07 Unit tests are useful because you DO refactor so often. 13:03:13 They guarantee the correctness of the refactoring. 13:03:38 Would you comment Forth any more than Python, as above? 13:04:07 The only comments I use in Forth are the block headers: ( 02jun2002 saf2 FS/Forth: Kernel Character Output ) 13:04:11 That's it. 13:04:40 OK =) 13:04:46 I let the remainder of the Forth program describe itself. 13:05:01 : QUIT ResetStacks, BEGIN FSForth$InterpretLine AGAIN ; 13:05:30 : FSForth$InterpretLine .PROMPT FSForth$GetLine FSForth$DoLine CR ; 13:05:33 .. etc .. 13:05:35 I've just had a feature idea for värikäs(colorforth derivative): allow a wordlist to exist in paralell with the compilation list. successful compilation of a word executes the word of the same name in the paralell list 13:05:38 Better than most QUITs I see 13:05:49 kc5 - you've replaced .OK with .PROMPT ? 13:06:18 (I would just use shadow blocks, but I do not use blocks at all just now) 13:06:22 Yes; .PROMPT is a DEFER'ed word which points to .OK by default. However, I want the ability to change it under certain circumstances. 13:07:14 Unidiomatic to .OK before evaluation of input :-/ But I get your point; this is very good code. 13:07:57 XeF4_: This is similar to how ColorForth currently works, and PygmyForth and FS/Forth, as all three of those are derived from cmForth. There's a compiler wordlist and an interpretter wordlist (Chuck might use MACRO instead of COMPILER, but that's just the name). Words found in COMPILER are automatically executed at compile time, whereas words found in the FORTH wordlist are compiled. 13:08:43 cleverdra: I prefer it in front instead of after, because it gives me a better idea of what the computer is doing. :) It's visually cleaner. To me at least. 13:09:23 * kc5tja has considered making two words: .ForePROMPT and .AftPROMPT, so that the user can configure it whichever way they want. 13:09:27 kc5: but afaik in colorforth, execution of in COMPLER implies nonexecution of in FORTH 13:09:29 But for now, I just have one. 13:09:38 or was it the other way around? either way, it's not suitable for unit tests. 13:10:08 s/nonexecution/noncompilation/ 13:10:09 XeF4_: You don't need it for unit tests. After each colon definition, include a bunch of interpretted tests of that word. 13:10:18 For example: 13:10:23 : 2* 2 * ; 13:10:42 that's what I do now, but I want to reduce visual clutter 13:10:48 1 2* 2 = ASSERT 13:10:52 Ahh. 13:10:58 Right now, I use include files. 13:11:10 I put the program definition in one file, and the unit tests in another. 13:11:20 The unit test file includes the program definition as a matter of course. 13:11:29 xef4 - yes, it's done by searching COMPILER first, and then executing an XT or searching FORTH -- or the current order, depending on how colorforthy you want to get. 13:11:32 This way, I include either the unit test file to test, or the program file to run. 13:11:49 xef4 - it's trivial to do this in any Forth. 13:12:40 Anyway, I think I might be in need of food, so I'll get going here pretty quick. I'll be back in about an hour or so. 13:12:43 --- nick: kc5tja -> kc-food 13:13:04 clev: trivial, but I don't see it done. (and in "any" forth, you could just put the unit tests in shadow blocks) 13:13:19 xef4 - I was speaking of a MACRO wordlist. 13:13:39 clev: that's not what I'm doing. 13:14:23 xef4 - whatever. I was continuing my previous comment, which was an answer to your previous question. 13:16:00 I asked a question? 13:16:25 lol 13:17:09 * cleverdra notices the clock. T-10 minutes until continuation of back-breaking donkey labor. 13:18:10 lol 13:18:22 get a donkey! 13:20:25 Whilst the work seems better when done by anything but me, only humans seem capable of using a crowbar and mallet to reduce wooden pallets to wood blocks, and only I am here to do it. 13:26:17 --- quit: XeF4_ ("pois") 13:27:36 heh 13:27:36 lol 13:53:48 --- quit: davidw (Read error: 113 (No route to host)) 14:05:31 http://www.muq.org/~cynbe/muq/muf2_toc.html#TOC76 14:05:35 oooh 14:06:37 woopsy, this page only *appears* interesting. 14:07:10 lol 14:08:38 --- join: CrowKiller (Vapo_Rulez@cnq5-233.cablevision.qc.ca) joined #forth 14:08:53 hi 14:09:05 hello disturbing-name person. 14:09:23 --- nick: kc-food -> kc5tja 14:11:20 back 14:11:25 re CrowKiller 14:12:00 thats not a name, only a handle ;p 14:12:20 Really? 14:12:31 I though you was Mr Vapo Rules :( 14:12:47 --- nick: CrowKiller -> MrVapoRulez 14:13:13 --- nick: MrVapoRulez -> MrVapoRules 14:14:15 :) 14:14:24 --- quit: cleverdra ("Leaving") 14:14:32 I am! in fact more today than any other day, bcause its my birthday and i managed to get hold of some "honey oil", wich is a yellow THC precipitate from a supercritical butane extraction process 14:14:48 quite the finest i may have here 14:15:09 Citric oil is fun -- more flammable than Ethanol. :) 14:15:09 and I've completed my virtual machine design 14:16:06 it uses a w register that fetch 32 bits at a time, executing the 8 bit aha function tokens inside it, it acts like the main sequencer 14:16:13 ive got a PC and a PC+1 register 14:16:36 also a T and S for the top and second item of data stack 14:16:48 R and Q for top and second item of return stack 14:17:02 with 4 otehr registers 14:17:23 Stream Read, Stream Write, Array Read and Array Write 14:18:02 they hold base address for the @+, !+, +@ and +! opcodes respectively 14:18:35 the @+ and !+ fetch or store from the base address in their register and increment it 14:19:35 +@ and +! fetch or store into the register+T address, thus making lookup table a lot easier 14:19:53 also got @- !- etc etc 14:20:04 ill just code them into macros and see wich one is used the most often 14:20:59 anyway its great, ill try to implement it on the x86 as soon as possible 14:51:31 --- join: CrowKiller (Vapo_Rulez@cnq5-233.cablevision.qc.ca) joined #forth 14:51:31 --- quit: MrVapoRules (Read error: 104 (Connection reset by peer)) 14:51:49 damn unreliable internet connection 14:52:27 i missed everything on this chan since the last time i entered something before the connection reset 14:55:20 CrowKiller: dont forget clog. "he" is always here 14:57:20 !!!!! 14:57:32 didnt know i was logged so blatantly lol 14:57:51 thanks for the tip onetom 15:01:55 hm i think the register set is flawed, ill put the finger on the problem soon 15:06:47 since adresses are relative with @+ and @- i can implement two arrays using a single base address... 15:16:15 That's because not much has happened since you logged on. 15:23:43 --- quit: I440r (Read error: 110 (Connection timed out)) 15:27:08 --- join: jamc (~dne@as3-6-8.asp.s.bonet.se) joined #forth 15:30:06 --- join: XeF4_ (~XeF4@dsl-XIV-106.kotikaista.weppi.fi) joined #forth 16:08:24 --- quit: jamc ("[x]chat") 16:13:28 Man, the more I read about skiplists, the more I want to use them for everything. This is one kick-butt data structure. I'm definately going to be using them for my filesystem. 16:15:08 --- join: thefox (fox@adsl-209-182-168-45.value.net) joined #forth 16:15:08 --- mode: ChanServ set +o thefox 16:19:17 re thefox 16:20:39 thefox: You might want to check up on a data structure called the "Skip List". Let me fetch you a URL: 16:21:02 http://www.cs.umd.edu/~pugh/ 16:21:28 At the bottom of the page, there is a link to his document on skip lists. Print that document out (it's only 8 pages), and sit back and enjoy the read. 16:21:43 B-tree class performance with the simplicity of a linked list. 16:22:09 For small datasets, it's performance is on par with red-black trees (slightly worse, but not much). 16:22:27 For datasets involving millions of records, though, it's performance literally blows the doors off of red-black trees. 16:30:11 --- join: davidw (~davidw@adsl-ull-66-108.42-151.net24.it) joined #forth 16:38:41 haaaaaa I was not prepared to that! lol 16:39:01 reading papers when im frost up is kind of splippy territory ;p 16:39:14 slippy 16:41:08 * CrowKiller will try anyway ;p 16:42:20 i love trying to decipher the concepts in the paper 16:42:24 by looking at the diagram 16:42:45 its really hard sometimes and long, when you can do that 16:43:52 you know the paper is good ;p because if not, the author make you work mentally too long just for that little piece of information 16:44:16 anyway enough, ill finish reading it promptly, at least ill try ;p 16:48:35 --- join: I440r (~mark4@1Cust216.tnt3.bloomington.in.da.uu.net) joined #forth 16:49:32 thefox! 16:49:53 CrowKiller: Let me know how it works out for you. Skiplists are niiice data structures. 16:50:04 been mowing lawn, i got TOO MUCH lawn heh 16:50:46 kc5 whats a skiplist 16:50:55 maybe ill discover exactly what register i need ;ppp 16:51:12 --- nick: CrowKiller -> MrVapoRules 16:51:30 I think it will be a more reprensentative handle ;p 16:55:23 what's the ping? wondering if your connection died? 16:55:56 no im badly lagged because im also downloading fbsd iso 16:56:09 wanted to know HOW badly lagged heh 16:56:35 ack 16:56:42 http://www.cs.umd.edu/~pugh/ -- all the way at the bottom of the page, there is a link to a PDF file describing skip lists. 16:56:50 The PDF is only 8 pages. 16:57:02 i want isforth to work in fbsd 16:57:21 It's a data structure that offers comparable performance to B-trees, but is incredibly simple to implement. 16:57:40 It typically consumes around 15% to 30% less memory for well-populated databases as well. 16:57:51 aha 16:58:04 This is one of those things that should have been obvious to me, but it's so simple, that it was completely overlooked. 16:58:11 Fortunately, it's not patented. 16:58:11 i did a lot of drawings of huffman binary threes and a lot of representations in my head, and the patterns are pretty much the same 16:58:39 Huffman trees are not at all the same. 16:58:55 i say the patterns in drawings 16:59:05 Well, there's only so many ways to draw a tree. 16:59:06 not in algorithm sense 16:59:32 Man, I *really* need to find my Glidepoint and install it here... This mouse is getting annoying. 16:59:57 glidepoint? 17:00:17 I use a 300$ dollar mouse form the company, it doesnt work in their windows software 17:00:23 autocad 17:00:29 so they gave it to me ;p 17:00:44 because i was in the formation classes 17:00:45 lol 17:00:58 i I talked always about free software and programming and logical stuff 17:01:02 An Alps Glidepoint -- a touch-sensitive replacement for the mouse. 17:01:37 i got a pad with a batteryless and wireless contact mouse and stylus 17:01:47 with a plasma screen I would be in paradise lol 17:01:54 a small thin screen or something 17:02:17 anyway it works great 17:02:51 i never used laptop pads very much, but I liked it everytime its well adjusted 17:02:55 LCD; plasmas are typically monochrome, and they burn out after a while. 17:03:12 lcd is too tick 17:03:17 the tablet would not work 17:03:34 unless not without a major upgrade 17:03:35 Yeah, MacOS touch pads are horribly calibrated, I think, for my style of use. And the system preferences don't go "fast enough" for my tastes. Windows gets it just about right with their drivers. 17:03:38 on the analog side 17:03:44 OS/2 was the best in my opinion for mouse acceleration support, though. 17:03:56 LCD isn't thick... 17:04:02 never tried it at all 17:04:03 Ever look at a Apple PowerBook G4?! 17:04:11 The *WHOLE LAPTOP* is only 2.54cm thick. 17:04:22 ha a laptop screen! 17:05:31 I have always the alpha numeric hobby lcds in mind when saying LCD 17:05:36 It's a wonderful screen too. I'm really thinking of getting one myself, just so I can use it for viewing my X desktops at home. :) Thank goodness for VNC. 17:06:18 Nothing like a $4000 15" monitor that runs Unix and has its own CD-ROM drive... :D 17:06:34 vnc is cool 17:06:40 vnc? 17:06:43 i saw once an article 17:06:45 about vnc 17:06:46 but they didnt implement my compression method 17:06:55 the guy used it to hack media companies 17:06:58 lol 17:07:01 very kewl stuff 17:07:11 virtual network computing 17:07:23 allows you to connect to your desktop at home from ANYWHERE 17:07:34 the vnc project is a free "graphical remote 1:1" windows and unix program 17:07:36 you see your normal desktop ina windows window 17:07:36 the window being your home machine 17:07:52 using what technology, under the buzzwords? 17:08:07 didnt read the source 17:08:17 yes 17:08:17 thefox: Brute force. 17:08:17 always thought i could do better in forth if i needed it 17:08:18 lol 17:08:41 but its a shame because i never actually used that 17:08:46 is it just remote terminal technology? 17:08:48 yes 17:08:53 thefox: It works by transmitting a graphic representation of your desktop "over the wire". It's intelligent in that it sends only those portions of the screen that change, however. 17:09:19 thefox: Mouse pointer and keyboard events are also supported. The whole protocol is very, very simple. 17:09:25 thefox: Almost too simple. 17:09:39 its small 17:09:57 thefox: Look up "remote framebuffer protocol" on the web, and you should be able to find a PDF file describing it. 17:10:02 the guy used it to visualize his target when he hacked 17:10:20 it slso sends the changed parts in compressed blocks 17:10:20 he had access to every gui fonctions "over the wire" 17:10:52 a really small solution could be embedded into a kind of virus or something 17:11:00 not a harmful one 17:11:05 Or, better yet, go to this URL: 17:11:07 http://www.uk.research.att.com/vnc/docs.html 17:11:14 but a really funny one lol 17:12:45 do they support multiple remote users at once under windows with wideband? 17:13:39 in other words is it cleaner and faster than xwindows 17:13:45 VNC allows multiple *viewers*, but only one controller. 17:13:54 --- join: I440r_ (~mark4@1Cust216.tnt3.bloomington.in.da.uu.net) joined #forth 17:14:06 ok, just wondered 17:14:09 Many VNC servers can be configured to allow one and only one user (e.g., no viewers) at a time. 17:14:32 MrVapoRules: Interesting that you ask that question. 17:14:44 In my experience, over a LAN, I find VNC to be faster than X windows for most things. 17:15:00 --- quit: I440r ("[BX] BitchX is as BitchX does") 17:15:05 a virus vnc server, hmmmm hmmmm... a virus remote desktop viewer, hehe lol ;p 17:15:26 MrVapoRules: IIRC, BackOrifice had something like this, if not VNC itself, integrated into it. 17:15:45 yeah the plugin infrastructure was cool 17:15:51 des encryption etc 17:16:47 --- quit: davidw (Read error: 113 (No route to host)) 17:17:25 --- join: Fare (fare@samaris.tunes.org) joined #forth 17:17:48 isforth segfaults if it aborts on compile now 17:17:49 i saw something somewhere about dns encapsulation 17:18:08 since implementing the balzingly fast floads heh 17:18:16 imagine a trojan using dns in a completely sthealth fashion 17:18:27 to communicate with the outside world 17:18:54 l440r you worked with the dns protocol? 17:19:44 some 17:19:59 was getting isforht to do dns queries 17:20:06 put that on hold tho 17:20:36 My forth will be good to code exploits, i assure you of that lol 17:21:00 enough it could metamorph itself into a worm 17:21:07 humping trhough computers 17:21:26 i almost added one person to the ban list in here for talking about desctructive software 17:21:32 putting his code in another system, and by leaving a stealth server opened behind 17:21:39 you want to code exploits you do it elsewhere 17:21:41 period 17:21:42 erasing itself from the old system 17:21:55 destructive? 17:22:01 its for education purpose only 17:22:09 and i mean it seriously 17:22:09 i dont give a flying fuck 17:22:25 thats the rationalization behind virus coders too 17:22:34 i didnt want to offend you, im no kind of megalomaniac 17:23:07 i think we are responsible enough to not misuse this technology 17:23:26 viral coding is a kewl subject, its the best subject of all when you do asm coding 17:23:32 kc5: this is very good indeed. (skiplists) 17:23:44 XeF4: :) 17:23:44 smart, efficient, clean, simple 17:23:52 i tried to understand it 17:24:07 i think ill go read a little 17:24:38 * MrVapoRules 's shuting up 17:24:45 MrVapoRules: :) 17:25:10 thefox: VNC might be something of use for F21-based devices, especially if they're used in an embedded environment. 17:26:43 yes 17:28:27 a virus could patch windows' habit of letting the ring0 accessible anytime anywhere, and thus scrap a lot of malicious viruses 17:28:35 a "good" virus 17:28:42 Can't do that. 17:28:51 Windows doesn't allow ring 0 from anywhere anytime. 17:28:56 LOLOLOL 17:29:00 virri practises 17:29:01 i sent the vnc developers details of a compression method i invented about 10 years ago, does realy good on large areas of contiguous pixles of the same compur. both horizontal and vertical compression 17:29:03 maybe old 17:29:12 i dont know if its working now 17:29:15 but they never used it :) 17:29:21 But it's core API is completely open and unsecure -- you can, for example, as a ring 3 application, read another process' memory space. 17:29:21 but i saw it working 17:29:48 l440r lol 17:30:00 do you have a web page detailing it 17:30:01 * kc5tja would use wavelet compression for stuff like that. 17:30:13 wavelets like in jpeg 2000 17:30:24 nope 17:30:30 Haar wavelets are incredibly agile for image compression. 17:30:32 just some old assembler code doing it heh 17:30:34 wavelets work almost exactly like forth 17:30:42 factorising big waves into smaller intelligent chunks 17:30:44 They produce outstanding results, and are very easy to implement. 17:30:47 thats what i understood 17:31:15 Haar wavelets, in particular, can be implemented purely with shifts and subtractions. 17:31:21 Decoding wavelets involves shifts and additions. 17:31:37 forth code should be produced for that 17:31:47 i dont know the theory enough damnit lol 17:32:01 There are plenty of resources on the web detailing Wavelet theory. 17:32:19 Unless, however, you have a background in signal processing theory, you probably won't understand it. 17:32:43 thats pretty much the case lol 17:32:46 Yes, wavelets would make a great application for Forth too. 17:32:49 kc5 my compression method compressed MOST pixles down to 1 bit 17:33:27 For run-length encoding, you can do better -- 0 bits. 17:33:29 could you explain it? 17:33:38 Just alternate between black and white, and store only counts. 17:33:59 kct only if you have large runs :) 17:34:08 Gakuk! 17:34:17 There's no possible way to compress an arbitrary pixel sequence into one bit. 17:34:19 of corse, with my method if you have large areas of different coloured pixles your going to have negative compression :) 17:34:21 run length is very good with low color counts 17:34:22 in the skiplist paper 17:34:43 there isnt any binary or even byte picture of a "node" 17:34:44 thefox: why has there never been the forth equivalent of Genera or NativeOberon? 17:34:56 or something i can barely understand 17:34:58 MrVapoRules: There doesn't need to be. 17:35:53 i compressed each scan line on a line by line basis. the first scan line is compressed horizontally. the first n bits are the first pixle. if the next bit is a 0 the next pixle is the same colour. if the next bit isa 1 the next n bits are the pixle 17:35:58 MrVapoRules: Follow the pseudocode listed in the document. 17:36:23 the next scan line is either compressed horizontally as above or vertcially as follows, which ever gives best results 17:37:02 if a pixle is the same colour as the one above it, output a 0 bit, else output a 1 bit followed by n bits of pixle colour 17:37:11 l440r: good tokenization process 17:37:23 fare: ? my guess is something drained people's efforts and 'squelched any spirit of innovation.' 17:37:25 after every scan line has been compressed horizontallyor verticaly run lenght encode the whole lot 17:37:47 sounds like pixels closer to the lower-right corner would take progressively more&more space 17:37:50 i compressed 640x480 window with text down to 90 bytes with that 17:38:03 Actually, there has been an environment similar to NativeOberon: cmForth and ColorForth are both native Forths. 17:38:04 thefox: I find it a weak excuse 17:38:22 thefox: how is multiperson forth hacking organized at iTv ? 17:38:27 does iTv still exist? 17:38:34 Fare: I'm working on something vaguely similar to Genera for colorforth, fwiw. 17:38:55 iTv got the word money between their legs IMHO 17:39:08 here on #forth we dont need money ;o) 17:39:16 I don't know if itv is dead. It more or less died in 98 when most people were layed off and no one remaining was full time. 17:40:32 how long can they be MIA before they are assumed dead ? 17:41:11 thefox: is there any future to MISC ? 17:41:12 MrVapoRules: I don't understand the idiom and what you mean about itv, but that's ok. 17:41:21 I mean, industrial future... 17:41:53 fare: who knows, not if it require me investing more money 17:42:50 the itvc.com website doesn't say dead, it says, 'maybe under construction?' ie. presumed dead but not officially declared dead. 17:43:14 They have been more difficult than ever to reach year by year. 17:43:31 I think it's safe to assume that they're dead at this point. 17:43:46 aha 17:44:02 but they still have investors wanting something for their investments and the 'prefered' investors have control over any assets. 17:44:04 probably not safe to start producing stuff thats legally theirs tho 17:44:54 not worse than LMI 17:44:57 They had planned to make their software open source, but after production of a hardware product. 17:45:29 not worse than lmi? 17:45:53 (LMI died, and no one knows who has the assets, but tens of different former investors will have a claim the minute you try to resurrect the technology) 17:46:12 if for any reason, intellectual property is EVIL because it *kills* good technology 17:46:35 Yep; that's why I'm sorely against IP. 17:46:52 In My Humble Opinion, hardware should be developped after only describing the most efficient vm concept possible 17:47:31 IP means greed and fear to me 17:47:32 MrVapoRules: In the case of iTVc, that VM was already around and proven technology (MuP21 --> I21) 17:48:02 that's sort of what we did, simulating variations for years, but you also need to define what exactly efficient means to have a target in the first place 17:48:18 http://fare.tunes.org/articles/patents.html#dead 17:48:29 hmmmm maybe it was fast, but i think things could me made clearer and easier, like the A register 17:48:35 it should have a lot more instructions 17:48:37 shboom -> p20 -> p21 -> f21 and i21 17:48:41 logic is cheap 17:49:06 transport isnt, because time is included in the first place 17:49:35 if the factor out analogy is put to the extreme, chip making is a even more finer art if the best software practise arent conceived 17:49:42 MrVapoRules: Logic isn't as cheap as you make it out to be. 17:49:51 good logic yes 17:49:58 its a bold ratio comparasion 17:50:04 between cathode tubes and transistors 17:50:19 in theory a million transistor 17:50:24 you need to either start with a problem or better yet a problem and a basepoint implementation to have any meaning to efficient because there are so many dimmensions, speed, power, ease of programming, speed of design, portability of design, etc. etc. 17:50:27 could me made to look like a lot of thing 17:51:05 portability, if we want the best system must be factored out 17:51:07 MrVapoRules: Transistors take time to switch from on to off. They draw power. The faster they switch, the more power they draw, so the hotter they get. A lot of factors goes into the design of a chip. 17:51:18 best is meaningless 17:51:27 yeah we need logic that do a lot 17:51:38 hm the ebst chip for me 17:51:42 would be omsniscinet 17:51:51 i mean small and everywhere 17:52:00 I think you meant to say omnipresent. :) 17:52:02 good for powerhouse or little computing problems 17:52:18 zero power zero cost 17:52:55 zero power+zero cost== eliminate the problem entirely (usuallypossible) 17:53:00 omsniscient matbe, who knows ;p lol (thanks for the spell error, your right) 17:53:02 Well, that's a different problem all-together. Computing powerhouses require a lot of resources to be able to execute their programs quickly. Whether it's one mammoth million-transistor CPU, or 1024 2000-transistor CPUs, you still have all those transistors. 17:53:26 if the transistors mean something implied 17:53:39 that doesnt need to be transfigured into transistors 17:53:54 imagine the a register 17:53:57 Transistor is the most atomic circuit element of any computing device. 17:54:08 A single bit of a single register takes up on average eight transistors. 17:54:13 in fact the concept of a register being a computing unit could be axtended to have a address coprocessor 17:54:32 Already done. 17:54:47 My friend Billy designed a stack machine specializing in sorting using such a concept. 17:54:48 in the form of logic surrondounding a register? 17:54:59 Memory access is accomplished by loading a value into the A register, and then reading or writing the D register. 17:55:12 Logic is made up of transistors. 17:55:17 Just as molecules are made up of atoms. 17:55:22 i know 17:55:34 A NAND gate is made up of four transistors. 17:55:43 but why loose tiem writing to the d register 17:55:53 He didn't lose time. 17:55:55 funny I thought it was all just quantum states 17:56:04 the command should go straight line from rom-> execution 17:56:14 thats efficiency, no temp storage 17:56:19 The timing is equivalent to A! @A or A! !A or some similar code sequence. 17:56:35 MrVapoRules: Why did Chuck choose that route? 17:56:49 Clearly he desires efficiency above all else, and yet, you're claiming his solution is inferior? 17:57:04 i mean the minimum temp storage possible 17:57:12 What do you think the A register is though? 17:57:55 the a register is where the address for some future operation is stored 17:58:03 like @+ and all 17:58:03 Is it not temporary? 17:58:14 (you said it yourself! Some future operation) 17:58:15 it can be accessed with a and a! i think 17:58:18 i know 17:58:21 but i mean 17:58:33 from rom to execution with the les storage required 17:58:43 the smalelst possible number 17:58:54 I give up. 17:59:13 why? 17:59:28 Mr: having the pointers for reuse (think successive array accesses) is very useful. 17:59:42 i know 17:59:53 in my vm I thought 17:59:55 even if it wasn't, you would still need temorary storage because the incoming value from @ needs to occupy the same TOS register as the pointer 17:59:57 the a register could do 18:00:05 You said that extending a register to serve as an address coprocessor is a "good thing," did you not? 18:00:23 so there is temp storage either way, but with your method you just can't see it to use it to your advantage 18:00:24 successive array access is basically how forth works hehe 18:00:40 @+, @- etc etc a@, a!, +!, +@ etc 18:01:26 im new to chip design 18:01:29 and its complex 18:01:53 so i want to simply things to the maximum before knowing stuff about one another so im slow learning the basics 18:02:08 i thought about simplifying the processor 18:02:31 you only need a PC register, a PC+1 register and some sequencing logic 18:02:35 one can certainly mask the steps of addressing, including base+offset operations, by building it into the hardware and instruction set. 18:02:41 from a very special register named X let say 18:03:02 the x decorticate 8 bits tokens froma 32 bit word 18:03:25 and then transfer control of the system to another piece of logic 18:04:04 so let say you have the a register 18:04:23 and imagine the most efficient table lookups method implemented in hardware 18:04:49 thats why I tried to come up with something new with +@ and +! word and to extrapolate on that 18:05:01 i dont at all if its easly possible 18:05:07 or if it would work in fact lol 18:05:52 the +@ word would add the tos to the register content in logic and fetch the thus indexed value 18:06:11 the -@ would be made of the minus add and fetch circuit correclty wired 18:06:25 etc etc 18:06:33 all grouped into one A register 18:06:51 what we tried to do was focus on what was possible and seemed promising then run extensive simulations of all the things that seemed possible to see which really worked. The instruction set changed a lot from P20 TO P21 but very little from F21 to c18. 18:06:59 ...which means you can't run the ALU at the same time as the array access operations 18:07:19 Fine. I understand this. But in trying to explain how my friend utilized the concept several years ago in his processor, you asked why he wasted a cycle for the register? THAT is what confused me, because now, you're advocating the use of a similarly equipped register! 18:07:44 about all you can do is work out idea and see what implemenations would actually do. 18:07:45 ok excuse me i misunderstood thats clear 18:07:51 XeF4_: You wouldn't do that in a stack processor anyway. 18:08:28 im not in 100% percent analytical capacity, sorry 18:08:41 Analysis is my forte. :) 18:09:33 I would like to see you with the THC level I have ;o) 18:09:42 THC? 18:09:53 mr VAPOrules 18:10:23 search "vaporizer", youll understand quite fast ;p 18:10:45 No, a search on THC level was quite sufficient. 18:12:09 im sorry if I misinterpreted or interpreted too fast your statement 18:12:24 so first you obstinately insist your 1/256-baked processor idea is the One True Way. Now you're saying you're too drugged to function properly? 18:12:26 choose one. 18:12:49 about your friend's machine 18:13:03 XeF4: Is there really a distinction?? ;P 18:13:19 hmmmm because i think it is, disaprove me i want that to happen in fact 18:13:36 if im taking too much visual bandwidth sorry then, 18:13:46 MrVapoRules: The way his processor worked is this. 18:14:07 You loaded the A register with an address. This caused the CPU to perform a memory fetch on that address, and load the D register. 18:14:15 WHILE this is occuring, the CPU is still executing other instructions. 18:14:30 When the CPU reads the D register, the data has already been fetched, and is placed immediately on the stack. 18:14:59 Actually, that is the AR register (Address Read). 18:15:13 If you wanted to write something, you loaded an address into the AW register, then wrote something to the D register. 18:15:25 Again, the CPU wrote the data to memory while the CPU was busy doing something else. 18:16:04 lol why am i catching all this flack on CLF for saying recusion sucks :P 18:16:06 i think i wanted to say that putting it into another register than the stack is not approriated in forth's ways. 18:16:19 its kind like an embbeded dma controller 18:16:51 Yes, that's essentially exactly what it is, and with good reason. It's a chip that is optimized towards sorting. It can sort any arbitrary 16 elements in only four instructions. 18:16:54 1440r: because that's what clf is for? 18:17:15 I440r_: Yeah. thefox and I often fight on the newsgroup. We're perfectly at home here... :D 18:17:31 oh yea 18:17:39 mayeb i should use the word "copied at the right place" when talking about combining operatiosn in terms of forth "digital circuit parts" 18:17:40 lol 18:17:40 silly me :) 18:17:52 mrvapo: that has been the attitute of those who accept the 40 year old Forth virtual machine without careful analysis and comparisons 18:18:07 lol 18:18:52 i dared to post my itterative hanoi solution lol 18:18:56 History has shown that the simpler the individual steps are, the faster you can run them. This is evident in both MISC and in CISC/RISC processors with 12 or more pipeline stages. 18:19:23 people tend to talk at odds about different things and at different times in usenet and there is more immediate context in a chat 18:19:47 i think i have a potential hanoi improvement 18:20:30 I440r_: Also, recursion isn't always a bad thing. Chuck uses recursion in his OKAD product to trace out transistor interconnections. :) 18:20:41 yea? 18:20:46 Yes. 18:20:51 It's on his colorforth.com website. 18:20:59 Speaking of which, there are a lot of broken links on that site. 18:21:04 f21 and c18 internally have about 12 stages to an instruction, and overlap of instruction prefetch with the execution of instructions. 18:21:37 i cant THINK recursivly 18:21:41 thefox what improvement ? 18:21:44 That's logic stages, not pipeline stages, though. The instructions execute through those stages in about 1.5 to 2ns IIRC. 18:21:54 a simplification 18:22:10 The instructions are already so simple that pipeline stages would actually be a detriment to their execution speed. 18:22:12 always an improvement :0 18:23:36 hmmm maybe if its an intelligent pipleine with enough (sane amount here) logic around the registers 18:23:44 it could be efficient 18:23:56 hm I recall where i saw this 18:23:59 to the extreme 18:24:16 I had a wooden towers of hanoi toy. I learned to do the thing faster than anyone else. I practiced it obsessively until even I could not see my hands. But while watching the overall pattern, I suddenly saw one day a very simple overall pattern. 18:24:20 hmmm Sun Microsystems fleet zero 18:24:36 Pipelines are great for taking a complex operation and breaking it down into smaller, simpler components that must execute in sequence. If your instruction set is already small and simple, pipelines offer no real advantages. 18:25:30 fleetZERO is a processor ive encountered while in my present state of mind lin the last 2 months 18:25:53 maybe you should take a look 18:25:57 hmmm 18:26:00 ìll get a link 18:26:06 i got like that with a rubics cube. i could solve it in 3 or 4 looks 18:26:49 http://www.research.sun.com/async/ group 18:27:45 --- quit: XeF4 (Killed (NickServ (Ghost: XeF4_!~XeF4@dsl-XIV-106.kotikaista.weppi.fi))) 18:27:47 --- join: XeF4 (ebixst@12-245-116-85.client.attbi.com) joined #forth 18:27:56 they have patents on some technologies, but its great to see asynchronous logic in action 18:28:05 my hands were like two tasks running in sync in opposite directions and I was just counting to some power of two (or in machineforth left justified arithmetic terms was waiting for carry (sign on c18) -if. 18:28:11 --- quit: XeF4 (Killed (NickServ (Ghost: XeF4_!~XeF4@dsl-XIV-106.kotikaista.weppi.fi))) 18:28:11 --- nick: XeF4_ -> XeF4 18:28:15 --- join: XeF4_ (bufwdi@12-245-116-85.client.attbi.com) joined #forth 18:29:12 l440r: look at this, your compression algorythm make me think of that: http://www.research.sun.com/async/Publications/KeyPapersPD1.html tHe Square fifo paper 18:29:34 "Squarring the FIFOs in GasP" 18:29:56 i invented and used that compression method at least 15 years ago heh 18:29:59 there is also the paper on fleet zero 18:30:26 its great, imagine that applied to stealth vnc 18:30:38 even misconfigured firewalls could be bypassed 18:30:50 and intrusion detection system dont look at dns traffic 18:30:52 its too dense 18:30:58 unless they have a cache server 18:31:14 anyway ;p 18:31:50 I440r: have you considered moderation of this channel? 18:31:56 to return to fleet zero, its an asynchrnous chip based on "ships" acting like to me as intelligent register 18:33:17 each ship is made with the number of step it requires nothing else 18:33:47 xef4 i dislike the idea of moderation but i also dislike the idea of talking about denial of service attacks, virii and stealth methods of gaining access to do harm to others 18:34:14 thats what the fox made me think when he talked about stages 18:34:19 ok i understood 18:34:37 im sure thats not what HE was thinking 18:34:39 no more, of this I promise then 18:35:12 i almost lost 15 years worht of assembler source file library to a ROOTING 18:35:27 i WOULD have lost them if my father hadnt had them on HIS box too 18:35:58 as I would have my linux system right now if i had a backup 18:36:13 but its too big so i couldnot do one 18:36:26 so i understand what Data loss of this kind means 18:36:40 /clear 18:36:56 and my intentions are not to make it happen to other people damn it! 18:37:01 I couldn't make heads or tails of anything, except that the FleetZERO processor is a MOVE architecture CPU. 18:37:28 later dudes. 18:37:33 See you later, thefox 18:37:38 --- quit: thefox () 18:37:52 luer tf 18:37:52 later even 18:38:05 mental note: must learn to type 18:39:27 Heh 18:39:39 * kc5tja is reading up on Sun's work on designing "fast asynchronous logic." 18:39:50 Seems pretty interesting, and I wonder if it's applicable to TTL as it is to CMOS. 18:40:21 no 18:40:30 because of non unifrom propagation delay 18:40:49 the physical dimensions are only calculated 18:40:54 near the end of the design process 18:41:08 I disagree with that completely. 18:41:16 The output of a gate is a well-formed waveform. 18:41:17 maybe with high quality parts 18:41:27 Well, on a chip, what else will you have? 18:41:32 Do you even know what TTL is? :) 18:41:42 transitsor to transistor logic 18:41:48 Not quite. 18:41:50 thresold from 1.4 v to 5 18:41:59 no 18:42:06 transistor transistor logic 18:42:13 Transistor transistor logic -- describes the use of totem pole output instead of diode-transistor logic. 18:42:42 ha my god i thought there was a to between, i feel SO ashamed 18:42:49 Heheh :) 18:43:10 kc5 you talked 18:43:23 about your homemade logic devices 18:45:12 anyway misunderstateemnt again sorry 18:45:37 misunderstanding in fact lol 18:47:13 Well, I have always wanted to play with the concept of asynchronous logic, and building circuits that employ that technique, because discrete component TTL circuits are a pain to design and clock. 18:47:31 The smaller the critical paths, the faster they run; however, the longer the critical signal path, the slower they run. 18:47:41 I thought "i would not mind having a 4'x8' computer if it was asynchronous and fast" 18:47:45 As you build the circuit, you have to downclock, or at least predict ahead of time the maximum speed. 18:48:11 I'd like to see how asynchronous logic would apply to a more macroscopic scale. 18:48:17 the critical path ca be eliminated by factorization 18:48:27 its kind of the same thing 18:48:28 No, it can't. 18:48:34 in the macroscopic world 18:48:53 i mean superflous paths 18:49:12 The critical path is the path a signal takes from input to desired output. 18:49:17 There is always a critical path. 18:49:26 You can never eliminate it, or else you do no useful work. 18:49:34 but it can be diminished by factorizing out 18:49:52 No, it increases critical path. 18:50:11 Factoring increases wire load and capacitance, and that lengthens the propegation delay of a signal. 18:50:36 multypling by zero is an elegant factorization 18:50:40 ;p 18:50:41 The only way to minimize the critical path is to design very simple circuits. 18:51:01 Forgive me, but you're being irrational. 18:51:02 too analytical for me, is hall be more explicit in what i think 18:51:05 and say 18:51:24 im a lazy english writer, i factor out words lol 18:51:32 Your thoughts as well. 18:51:41 just the expression 18:51:56 i dont find it funny to say dumb things 18:52:01 Vap: you seem to eliminate them indiscriminately. quite different from factoring 18:52:04 i say them because i have a sensible reason 18:52:07 most of the time 18:52:07 ;p 18:52:23 Multiplying by zero is clearly not an option. 18:52:29 sorry i thought factoring out was multiplying by zero 18:52:38 If you multiply by zero, code the software to not even try; otherwise, you need something to help multiply with. 18:52:49 LOL 18:52:55 ill make it clear from n ow on 18:53:02 Factoring is the process of breaking a complex problem into simpler components. 18:53:04 in every statement you dont deserve it 18:53:21 i know that but i thought that the OUT meant out of the system 18:53:34 out of the equation, out of the way 18:53:55 and you do that to superflous things, thus making simple circuits 18:54:03 Right. 18:54:04 that do what you do on a 1:1 copy in software 18:54:20 I call that process "reduction", not factoring out. 18:54:29 As in, reducing circuit complexity. 18:54:34 ok reduction then 18:54:53 we learned in chemical class the oxidoreduction reaction 18:55:02 Mr: factoring is splitting a large problem into several small problems 18:55:45 by factroring out unecesssary number crunching 18:56:03 like a square, it the sum of all odd numbers 18:56:08 hmm 18:56:40 to be more clear 25= 1+3+5+7+9 18:56:51 the first 5 odd numbers 18:56:57 i was astonished when i learned that 18:57:04 on pic list by looking at some code 18:57:11 to do 8 bit square roots 18:57:22 I give UP 18:57:44 im not talking about the code... 18:57:54 anyway fuck that ill just shut up 18:58:54 i wont pollute your idle sessions, or monopolize your brain anymore, sorry bout that 19:00:01 --- nick: MrVapoRules -> }ShutforaWhile{ 19:05:46 --- quit: XeF4 ("pois") 19:22:12 --- quit: I440r_ (Remote closed the connection) 19:22:52 <}ShutforaWhile{> Address Coprocessor I was talking about previously implements a!, a@, +@, -@, +!, -!, @+, @-,!+, !- : all the mechanism of brainfuck 19:23:12 <}ShutforaWhile{> the little language of a miniaturized computer 19:23:52 <}ShutforaWhile{> but with the stack it happens that it could maybe yield much, but im not sure if it wasnt tried before 19:24:14 <}ShutforaWhile{> by Jeff or people at iTv 19:24:32 * kc5tja is still trying to crack the secrets of asynchronous logic. I think I'm getting closer, but I'm not sure of it yet. 19:25:05 <}ShutforaWhile{> did you read about GasP? 19:25:21 Yes, but it didn't tell me anything useful. 19:25:39 <}ShutforaWhile{> look in the previous papers 19:25:43 <}ShutforaWhile{> or in references 19:25:53 <}ShutforaWhile{> ive come across such papers you might interested at 19:26:03 <}ShutforaWhile{> more technical on the electrical point of view 19:26:13 I did. About 9 (?) papers down, I saw an asynchronous logic block implemented using more "traditional" chip designs, and that's what I'm going on. 19:27:07 It expressed their micro-pipeline stage in terms of an R/S flipflop and an AND gate. Instead of Q and /Q, they have F and E (e.g., full and empty). That sort of made sense to me; now I'm trying to apply that to actual data processing instead of just propegation of data from one stage to the next. 19:29:03 <}ShutforaWhile{> in the gasp circuits i see classical cell registers as examples, but only imagination is what you put between those stages 19:29:28 <}ShutforaWhile{> i dont all their constructs 19:29:47 <}ShutforaWhile{> i tried to think of system for that and forth came in ;p 19:30:36 By my estimations, implementing these structures in discrete component TTL gives me a micropipeline stage delay of around 18ns or so. So maximum pass-through of data is around 55MHz. 19:31:19 So if I were to implement an asynchronous logic CPU, it'll probably run at around 25MHz or so, at least internally. 19:33:19 <}ShutforaWhile{> the "designing fast asynchronous circuits" paper was why i thought it could get difficult to implement using macroscopic components, because of the wire lenght calculations and all 19:34:11 <}ShutforaWhile{> the three inverters clock is great 19:34:22 <}ShutforaWhile{> never tried it really though 19:36:15 <}ShutforaWhile{> does somebody here knows the jean-louis naudin website? 19:36:17 <}ShutforaWhile{> i think there some great alternative science stuff there, one of them is a circuit that can run indifinetly, ill pick the exact link 19:36:54 <}ShutforaWhile{> http://members.aol.com/jnaudin509/ Main Site 19:37:55 <}ShutforaWhile{> look down the controversial papers by tom bearden 19:42:51 <}ShutforaWhile{> http://jnaudin.free.fr/html/torsion.htm is great also 20:00:03 zetetique.ldh.org 20:00:04 --- quit: }ShutforaWhile{ (Read error: 104 (Connection reset by peer)) 20:05:49 --- quit: kc5tja ("THX QSO ES 73 DE KC5TJA/6 CL ES QRT AR SK") 20:24:11 --- quit: Fare ("3053") 20:33:03 --- join: CrowKiller (Vapo_Rulez@24.212.5.233) joined #forth 20:33:31 http://willware.net:8080/agj/ag.html is an interesting paper 20:33:42 --- quit: CrowKiller (Client Quit) 21:30:46 --- quit: sif (Read error: 110 (Connection timed out)) 21:51:52 --- quit: Soap` ("rebootles") 21:56:21 --- join: Soap` (~flop@202-0-42-22.cable.paradise.net.nz) joined #forth 22:19:36 if i was around when thefox was here, i would've asked "did you use metrics to determine what efficiency is in order to establish a target" 22:25:52 --- join: Serg_penguin (~snaga_NOI@nat-ch0.nat.comex.ru) joined #forth 22:26:01 hi all 22:37:23 --- join: pyro (~mgtp@dialup-49.158.220.203.acc01-high-pen.comindico.com.au) joined #forth 22:47:29 --- part: pyro left #forth 23:25:51 --- quit: Serg_penguin () 23:28:22 --- quit: futhin ("sleep") 23:35:06 --- quit: Soap` (Read error: 113 (No route to host)) 23:50:24 --- join: sbk_ (~500@dsl-65-184-98-221.telocity.com) joined #forth 23:59:59 --- log: ended forth/02.06.04