00:00:00 --- log: started forth/02.07.09 00:02:25 --- quit: ChanServ (carter.openprojects.net irc.openprojects.net) 00:02:44 --- join: ChanServ (ChanServ@services.) joined #forth 00:02:44 --- mode: carter.openprojects.net set +o ChanServ 00:04:33 --- quit: ChanServ (carter.openprojects.net irc.openprojects.net) 00:04:35 --- quit: n_ (carter.openprojects.net irc.openprojects.net) 00:04:35 --- quit: dsmith (carter.openprojects.net irc.openprojects.net) 00:04:36 --- quit: goshawk` (carter.openprojects.net irc.openprojects.net) 00:04:36 --- quit: Soap- (carter.openprojects.net irc.openprojects.net) 00:04:36 --- quit: rob_ert (carter.openprojects.net irc.openprojects.net) 00:04:36 --- quit: skylan (carter.openprojects.net irc.openprojects.net) 00:04:36 --- quit: cleverdra (carter.openprojects.net irc.openprojects.net) 00:04:36 --- quit: Fractal (carter.openprojects.net irc.openprojects.net) 00:05:20 --- join: ChanServ (ChanServ@services.) joined #forth 00:05:20 --- join: Fractal (pamixtbw@h24-77-171-228.ok.shawcable.net) joined #forth 00:05:20 --- join: rob_ert (~robert@h137n2fls31o965.telia.com) joined #forth 00:05:20 --- join: goshawk` (goshawk@panix1.panix.com) joined #forth 00:05:20 --- join: Soap- (~flop@202.0.42.22) joined #forth 00:05:20 --- join: skylan (sjh@Sprint270.tbaytel.net) joined #forth 00:05:20 --- join: dsmith (~dsmith@199.107.189.213) joined #forth 00:05:20 --- join: n_ (adlez@pcp01518417pcs.reding01.pa.comcast.net) joined #forth 00:05:20 --- join: cleverdra (julianf@0-1pool37-198.nas2.florence1.sc.us.da.qwest.net) joined #forth 00:05:20 --- mode: carter.openprojects.net set +o ChanServ 00:05:37 --- quit: ChanServ (carter.openprojects.net irc.openprojects.net) 00:07:49 --- join: ChanServ (ChanServ@services.) joined #forth 00:07:49 --- mode: carter.openprojects.net set +o ChanServ 00:08:12 --- quit: ChanServ (carter.openprojects.net irc.openprojects.net) 00:08:22 --- join: ChanServ (ChanServ@services.) joined #forth 00:08:22 --- mode: carter.openprojects.net set +o ChanServ 00:09:57 --- quit: goshawk` (carter.openprojects.net irc.openprojects.net) 00:09:57 --- quit: Soap- (carter.openprojects.net irc.openprojects.net) 00:09:57 --- quit: skylan (carter.openprojects.net irc.openprojects.net) 00:09:57 --- quit: rob_ert (carter.openprojects.net irc.openprojects.net) 00:10:07 --- join: skylan (sjh@Sprint270.tbaytel.net) joined #forth 00:10:07 --- join: Soap- (~flop@202.0.42.22) joined #forth 00:10:07 --- join: rob_ert (~robert@h137n2fls31o965.telia.com) joined #forth 00:10:07 --- join: goshawk` (goshawk@panix1.panix.com) joined #forth 00:15:53 --- quit: cleverdra ("Leaving") 04:32:53 --- quit: dsmith (Read error: 110 (Connection timed out)) 05:17:18 --- join: dsmith (firewall-u@cherry7.comerica.com) joined #forth 05:56:28 --- join: Etaoin (~david@216.251.197.132) joined #forth 07:24:24 --- join: cleverdra (julianf@0-1pool37-12.nas2.florence1.sc.us.da.qwest.net) joined #forth 07:51:33 --- join: kc5tja (~kc5tja@ip68-7-162-51.sd.sd.cox.net) joined #forth 07:53:38 * kc5tja is away: shower 08:23:16 * kc5tja is back 08:35:39 --- join: I440r (~mark4@1Cust172.tnt3.bloomington.in.da.uu.net) joined #forth 08:36:20 --- join: futhin (~thin@h24-64-175-61.cg.shawcable.net) joined #forth 08:41:38 OK, going to work now. 08:41:50 --- quit: kc5tja ("THX QSO ES 73 DE KC5TJA/6 CL ES QRT AR SK") 08:42:22 i440r 08:42:36 --- join: XeF4 (uvqlwx@12-245-116-85.client.attbi.com) joined #forth 08:42:40 i440r: i think you should write an outline for your tutorial 08:44:17 hi futhin! 08:44:28 yea that would help 08:44:47 it would help me a lot :P 08:44:52 heh 08:44:53 with editing.. 08:45:03 ive got the windowing thing almost 100% done now 08:45:04 unfortunately my urge to change everything is huge! 08:45:07 :P 08:45:13 just need to get pull down menus sorted out 08:45:16 well not that huge 08:45:41 but i do want it to be more easily readable 08:46:04 i'm fussy about that ;P 08:46:13 i440r: good to hear about the windowing thing 08:46:15 so am i 08:46:35 mouse control isnt built into it yet and i might not add it 08:46:41 undecided 08:46:47 nahh 08:46:52 mouse is lame :) 08:47:01 just implement keyboard stuff to control the windows 08:47:17 you can have overlapping windows NP but its easier if you dont heh 08:47:33 its not quite as fast as ncurses is at display updates tho 08:47:33 if you add mouse control, make sure that you can still do _everything_ without mouse 08:47:35 i440: is the tui in the latest isforth? 08:47:38 and thats confusing me alot 08:47:39 I enjoy using the mouse in console. 08:47:47 xef4 no - you wanna see it ? 08:47:52 rob_ert: mouse is slower 08:48:27 I440r: sure. An ms serial mouse driver is ~5 lines, so why not. 08:48:55 * futhin has some good ideas how to make a gui fully keyboard accessible so that one can operate in a gui at fast speeds from keyboard 08:49:18 it's faster overall, for one thing, never having to take your hands of the keyboard to touch the mouse saves some time 08:49:24 and there are lots of other advantages 08:49:27 --- join: Fare (fare@samaris.tunes.org) joined #forth 08:49:34 VOICE RECOGNITION! 08:49:34 hi fare! 08:49:35 scripting 08:49:36 etc 08:50:04 xef4 adding mouse support will slow down EVERYTHING 08:50:04 (+20 lines to deal with the brilliant foresight of the Unix serial port interface design) 08:50:21 i440r: i want you to create an outline and/or a table of contents.. and break up the tutorial with headings.. 08:50:22 you tell the console to send you mouse reports every time its moved or when a button is pressed 08:50:36 and you get them as ansi escape sequences from stdin 08:50:45 ALOT of shit thrown at you all at once 08:50:50 Gakuk! 08:50:53 I440r: Linux 2.2 seems not to obey those escape sequences. Xterm does, but I don't run X 08:51:00 futhin that works for me 08:51:21 XeF4: which sequences? to get mouse input? 08:51:27 XeF4: there's libgpm (ugh) 08:51:44 xef4 no - not "you send the terminal some escape sequcences" but "the terminal sends you escape sequences" every time the mouse moves 08:52:00 fare isforth will not be using ANY libraries heh 08:52:04 at all 08:52:05 I440r: you send the terminal some escape sequences to turn on mouse reporting 08:52:06 remember??? :) 08:52:22 xef4 yes and every terminal uses different sequences 08:52:26 almost 08:52:40 I440r: but is it forbidden to peer at the sources for libgpm 08:52:56 and the report sequences don't work for too-large terminals 08:52:59 fare its not allowed ? 08:53:09 nobody said that i440r is having trouble coding the mouse control 08:53:16 fare ohh no its not forbidden but i dont need to, i already know how to do mouse stuff heh 08:53:18 i440r said he was undecided in having mouse control in the first place 08:53:41 dns me 08:53:44 ftp in 08:53:50 tui.tgz is the code 08:54:05 i modified structs.f slightly 08:54:17 i put the new structs.f in the tgz there 08:54:28 xef4: i440r wanted to send you his windowing stuff because his display update isn't fast and it's confusing him 08:54:31 but keep the old one too 08:54:44 futhin no i know how to speed it up too hhe 08:54:50 ew 08:54:50 futhin: I asked him to send. 08:55:07 but i wont be able to speed it up till i can do CODED definitions 08:55:09 [09:47] xef4 no - you wanna see it ? 08:55:09 [09:47] rob_ert: mouse is slower 08:55:09 [09:48] I440r: sure. An ms serial mouse driver is ~5 lines, so why not. 08:55:33 anyone wanting to see the tui its in the root of my ftp on my current ip 08:55:46 that's a little misleading, xef4 seems to imply he's expecting to recieve mouse code 08:56:10 futhin no heh your the one getting confused here :) 08:56:28 heh 08:56:41 naw, i'm just telling you what it implies :P 08:57:12 Actually I didn't see i440r imply he was expecting anything. 08:58:04 tui.tgz: Permission denied. 08:58:13 oopts 08:58:14 hang on 08:58:32 ok try again heh 08:58:44 whee 08:58:52 the menu.f file is in progress 08:59:00 window and screen are mostly finished 08:59:13 foo.f is a bullshit example i am using to debug with 09:00:23 bah, you should've called it blah.f :P 09:01:05 fooblah :) 09:01:06 all real coders use blah for temp files ;) 09:01:45 i use foo, blah, foobar, fooblah 09:03:22 i have blah and bleh 09:04:45 zip zap zop zup 09:05:03 a b c d 09:05:59 if its directories, i and there's more than one, then i'll go 1 2 3 4 09:06:39 further evidence that Dr. Seuss was a real coder 09:07:06 but for files, blah and bleh are sufficient, if i run out i'll start giving them more meaningful names :P 09:09:42 i440r: you asked me to create content for your webpage.. i uploaded it into the incoming directory 09:09:49 i440r: it's REALLY basic 09:09:52 heheh 09:11:08 futhin i got a guy sorta doing the page 09:11:21 i440r: you asked me for content 09:11:26 the content needs work and he is only just learning html but he is making progress 09:11:27 don't you remember? :) 09:11:27 oh 09:11:30 rite content 09:11:31 yea 09:11:32 heh 09:12:14 i440r: it's probably easier for you to write some content first 09:12:19 i know 09:12:26 but i hate coding ascii :P 09:12:30 heheh 09:12:35 hey that's a good idea 09:12:40 just code it in forth 09:12:44 with lots of comments 09:12:54 and we'll just put it up in text form 09:12:57 :D 09:13:17 s/we'll/you! 09:17:55 ahh 09:18:01 i see that you are already coding it! 09:18:03 good work 09:18:13 err already coding what ? 09:18:13 heh 09:18:18 im not coding shit rite now :P 09:18:45 coding the content for the webpage in forth which you'll put up in text/ascii form!! 09:20:23 i'm free today to do something productive 09:20:29 coding in forth or something 09:20:45 and damned if i do, and damned if i don't! :P 09:21:47 write me that outline 09:22:37 okay 09:22:40 how big is the tutorial 09:22:42 what is the aim 09:23:04 --- join: kc5tja (~kc5tja@stampede.org) joined #forth 09:23:40 wb kc 09:23:56 start with basic forth tutorial stuff then lead into isforth specifics 09:24:14 and what audience is the forth tutorial aimed at? 09:24:34 err forth coder wannabe's ??? heh 09:24:42 and ppl who know forth but want to learn isforth 09:25:22 what about skeptics? 09:25:27 people who think forth is crap 09:25:29 C coders 09:25:34 theres no convincing them 09:25:38 they are beyond help 09:25:50 i started writing a forth tutorial a bunch of months ago 09:26:03 aimed at C coders and other losers 09:26:16 irrational people, stuff like that ;P 09:26:46 Where's the tutorial? I'd like to see it. 09:26:59 i only wrote a page heh 09:27:01 it's not finished 09:27:06 2 pages 09:27:16 it was turning into a 10 page essay 09:27:17 The best way to convince a C coder is to make things as pragmatic as possible (hence, it's not specifically targetted towards C coders, but rather, towards people who just want to do something useful). 09:27:28 yes 09:27:37 i was going into details of why forth is useful 09:27:43 but it's awfully tricky 09:27:48 If you write your tutorial so that it singles out languages, then you get a reputation for being a ball-buster and troublemaker. 09:28:00 to be readable, and to do a decent job of covering all the various advantages 09:28:10 yeah, the bad-boys of tutorial writers! 09:28:13 and to explain the advantages clearly and concisely 09:28:23 it's pretty tricky 09:28:33 to write an exceptional tutorial 09:28:46 futhin - I'd really like to see it, even if it's unfinished. 09:28:48 * kc5tja nods 09:28:54 that thoroughly covers all the really complex concepts of forth 09:29:08 what complex concepts? 09:29:14 even though forth is "simple" it is also full of highly complex concepts and paradigms 09:29:30 The simpler the language is, the more complex it becomes. 09:30:17 OK. What complex concepts? 09:30:18 complex concepts = all the concepts that C coders or "pragmatics" would disbelieve and discount at first glance if the tutorial doesn't carefully explain the forth concepts 09:30:32 it's just complex in relation 09:30:38 at the moment i can't think of the complex concepts 09:30:40 WHAT COMPLEX IN RELATION CONCEPTS? 09:30:41 of an example 09:30:43 Oh, OK. 09:30:46 lol 09:31:03 * futhin goes to look for his tutorial 09:31:31 A complex concept would be literally adding support for continuations and backtracking to the language in terms of the language itself. 09:32:09 It requires direct manipulation of the return stack in non-portable (but *super* easily fixed) ways. 09:32:23 C programmers will absolutely balk at such a concept, while in Forth, it's openly embraced. 09:32:25 a complex concept is how forth _is_ the language, the interface, the compiler 09:32:36 a complex concept is how forth is reflective 09:32:37 etc 09:32:51 It's reflective without actually supporting it. 09:33:00 yeah 09:33:12 hence i said "how" ;P 09:33:31 How is Forth "reflective"? 09:33:43 kc5 - ah. 09:34:09 The amount of reflection is dependent on the Forth in question, but one thing is quite common: you can always find a way to query the Forth environment for its list of words. 09:34:27 What do you mean when you say 'reflective'? 09:34:57 when i say reflective i mean that you can modify the language within the language easily, you can change the language freely into anything 09:35:00 The program is aware of its surroundings, is the best way I can describe it. It can detect and manipulate its surrounding program code. 09:35:43 OK. 09:36:00 * cleverdra notes http://forth.sourceforge.net/algorithm/backtracking/index.html 09:36:01 Logically, reflection is the logical opposite of encapsulation. 09:37:04 the forth paradigm is foreign to C coders 09:37:17 the paradigm is quite different than what they are used to.. 09:37:57 i assume that i accepted forth much more readily because i had learned assembly programming previously (a new paradigm).. 09:38:00 * kc5tja is really, really, really starting to come more and more to grips with exokernel philosophy. It's really in line with Forth concepts, I believe. 09:38:12 it's a lot easier to explain forth from assembly language 09:38:19 rather than from C 09:38:36 (refering to how forth behaves, macro assembler, etc) 09:38:45 futhin: Absolutely. This is why I'm very upset at colleges NOT teaching assembly language anymore. It's an absolute requirement if you ever want to be a free thinker in computer science. 09:39:13 my university teaches assembly but it's some pre-chewed version and the prof is anti-asm 09:39:34 it's in mips too, not that "useful" 09:39:54 i think computer programmers should serve an apprenticship periopd where the are not allowed to code in ANY language other than assembler for the first 15 years 09:39:56 exokernel? what's in it? 09:39:58 minimum 09:40:16 pre-chewed? 09:40:20 i440r: heheh, bit extreme 09:41:03 kc: tell us about the exokernel philosophy :) 09:44:04 In an exokernel, the only thing that sits in kernel space is a minimal kernel that provides resource protection. It does not, however, provide any form of management. 09:44:55 --- join: Mongrel (~ant@ool-435249eb.dyn.optonline.net) joined #forth 09:44:56 A "Linux" application, for example, would be an application that links against a user-space Linux library (liblinux.so for example), and runs under the exokernel entirely in user space. 09:45:07 hi mongrel 09:45:26 fare: yeah, school has a tendency to package up knowledge into little pre-chewed bits which retain a bare minimum of information, and then the school transmits it poorly to the students and hopefully with lots of bias 09:45:28 Performance of exokernels is competitive with traditional monolithic designs, but you have the relative modularity of microkernels, and a flexibility which *neither* possess. 09:46:36 hm? what's the diff between microkernel and exokernel? 09:46:55 i don't see the speed advantages of the exokernel like the monolithic kernel has 09:47:28 Microkernels puts the functionality in user-space server processes, which are self-standing processes in their own right. You request services from them using interprocess communications channels (message passing, pipes, sockets, whatever). 09:47:31 Exokernels don't do this. 09:48:03 With exokernels, the software to manage resources is literally linked right up against the application -- requesting a "system service" is a mere subroutine call (not even a kernel trap!). 09:48:27 What the exokernel DOES provide, however, is protection. 09:48:55 futhin - have you found your tutorial? 09:49:13 For example, if disk blocks 2 through 5 are used by a file owned by you, the exokernel will not allow my application (which may not even be running a Unix variant) to touch those blocks. 09:50:13 Exokernels expose all hardware and kernel resources at the lowest possible level while still maintaining protection. 09:50:18 kc5tja: is the library in user-space in system-space, protection-wise? 09:50:23 Microkernels tend to hide these resources behind interfaces. 09:50:30 User-space. 09:50:58 who schedules disk accesses? 09:51:17 how is the ownership map represented? 09:51:22 who manages it? 09:51:47 The exokernel guards access to the disk controller, but it's usually first-come-first-serve. 09:52:08 \quit 09:52:11 --- quit: Mongrel ("BitchX: often imitated, never duplicated!") 09:52:52 Ownership maps aren't natively represented in any given format. Individual protected entities are represented with downloaded code (e.g., code that is dynamically compiled into kernel space). These are called "predicates." 09:52:59 Individual applications manages their own resources. 09:53:56 kc5tja: have you read "LAMBDA, the Ultimate capability" ? 09:54:01 cleverdra: yes.. it's only one page, it's just the bare intro, hasn't gotten into any juicy details.. 09:54:09 aka "W7, a security kernel based on the lambda-calculus" 09:54:13 Thus, what basically happens is the exokernel grows and shrinks (at run-time) to accomodate the resource protection needs of individual applications and their library OSes. 09:54:44 Fare: No, because I do not understand Lambda calculus, and I really don't care to learn about it. 09:55:32 kc: there are nice tutorials, and you're missing something 09:55:48 who manages this downloadable code? 09:56:49 Fare: Again, the applications manage their own resources. The exokernel only provides protection. 09:57:13 That means if they install a predicate into the OS to guard against a certain set of disk blocks, then that application is responsible for managing it too. 09:57:41 The exokernel enforces the protection aspect of it: it cannot overlap with another predicate. 09:58:06 (ooh, and if the task quits or dies, it's predicates are removed as well, of course. Protection without basic garbage collection is useless) 09:58:18 kc5: I read the W7 paper not knowing uch about the lambda calculus, and it was still understandable 09:58:36 IOW the protection isn't effective against evil/buggy predicates 09:59:26 (which already narrows protection problems) 10:00:08 Not unless all the other predicates are also evil/buggy. 10:00:21 The exokernel will detect overlapping predicates, and will reject all of them. 10:00:30 cleverdra: you still want to see it? :) 10:00:58 If disk block 56 appears in multiple predicates, all predicates except the first will be flat out rejected (they won't even be considered for installation into the kernel) 10:01:34 how can it detect overlapping predicates? 10:02:00 That's exokernel specific. 10:02:11 If you want to know more about how Xok does it, I recommend reading Xok's papers. 10:02:28 IOW ? 10:02:38 is Xok still being developed? 10:02:41 In Other Words 10:02:57 One possible method would be to maintain a bitmap or something, and as each predicate is installed, it marks their associated bits (where each bit maps to a disk block). 10:03:11 Before installing a predicate, a check is made to ensure all mapped bits are cleared first. 10:03:34 Yes, Xok is still being developed. So is Aegis as far as I know. 10:04:25 what are xok and aegis ? 10:04:34 I440r: exokernel designs 10:04:35 exokernel oses 10:04:40 i440r: stuff done at the MIT 10:05:18 * kc5tja is seriously thinking writing Dolphin to use an exokernel instead of microkernel. 10:05:29 The advantages are just plain too enticing. 10:05:52 it's rather than microkernel is so dumb a concept, that anything is better, including exokernel 10:06:34 Well, the fact is, when you have several applications running with a single libOS, the exokernel approach is semantically equivalent to a full-block monolithic kernel design. 10:07:14 The nice advantage is that you can run "multiple OSes" concurrently with the exokernel approach (of course, you're not really doing that, but that's the end result as far as the user and applications are concerned) 10:07:17 kc: where along the development is Dolphin? you coded a target compiler or something? but you have not yet started on the actual os and the kernel? 10:07:45 Each installed resource protection predicate is like a fine-grained kernel module (usually expressed as a set of data structures instead of actual program code, for protection purposes). 10:08:39 futhin: The target compiler is still under construction. It's not yet finished, but it is producing 16-bit code. When I get a self-standing version of FS/Forth 16-bit running, I'll use it to make a 32-bit version, and from there, start writing the Dolphin (exo?)kernel. 10:10:25 I really like the concept of using an exokernel for another reason: I can write most of Dolphin under Linux, or some other environment that has reasonable fault tolerance. 10:10:49 The "exokernel" basically ends up being an emulation layer, which makes things much easier to debug. 10:12:22 My friend wanted me to consider making Dolphin a persistent OS too, but I haven't a clue as to how to go about doing that. 10:12:39 Every orthogonal persistent system I've seen really is fundamentally incompatible with what I want out of the OS. 10:13:14 * kc5tja may consider doing another OS which is based on Dolphin but which has orthogonal persistence in the future, but not right now. 10:13:45 can't an orthogonal persistent os still mimic a standard os's filesystem, etc 10:14:12 Yes, but the reverse is not true. 10:14:24 Plus, an orthogonally persistent OS has *major* problems dealing with removable media. 10:14:25 --- join: Herkamire (~jason@wsip68-15-54-54.ri.ri.cox.net) joined #forth 10:16:24 isn't that a solvable problem? 10:16:59 --- quit: XeF4 ("pois") 10:17:02 Nope. 10:17:03 hello herk 10:17:22 Nobody, and I mean nobody, has yet offered a truely satisfactory solution. 10:17:54 you were telling me about the problem, but i thought it should be solvable.. 10:18:03 The best they can do is treat the system's harddrive as a virtual memory store, and physically copy program images onto the harddrive -- a waste of space, especially if you're running software from another harddrive already. 10:19:08 I mean, the whole purpose of having additional volumes is to expand the virtual address space, not shrink it. 10:19:25 And that brings to mind virtual address space management with multiple volumes. 10:19:42 kc5tja: how is it worse for an orth persistent system than for another one? 10:20:05 if you remove whatever you mounted as / from a unix system, you lose 10:20:18 it isn't wors 10:20:19 You can't umount / in Unix. 10:20:25 Let me explain, please. 10:20:30 Don't just jump to conclusions. 10:20:49 Fuck, I forgot where I was going now. 10:20:53 See, I hate it when people do this. 10:20:56 * kc5tja thinks. 10:21:12 so the goal is to be able to add another harddrive to the computer and then turn the computer back on and it can handle the extra volume with no problems 10:21:22 futhin: Basically yes. 10:21:33 Suppose I have two boxes, each with a 250MB ZIP drive. 10:21:53 so why can't the start up treat the memory dynamically or something.. 10:21:55 you want to physically swap memory? 10:22:00 1. When I run an instance of a program, how do I tell the application to run in the ZIP's physical address space? 10:22:34 2. Assuming that problem is solved, how does the second host interpret the memory image on the ZIP? They may not necessarily appear in the same physical memory range. 10:23:13 The only way to alleviate both of these problems is to have some sort of API where the application can read and write memory regions as a separate address space from itself. 10:23:31 That secondary address space is essentially what a file is. 10:24:01 That is the only (efficient) way to handle the problem. Sub-optimal, yes, but to date, no other alternative has ever been proposed. 10:25:00 you could have system contexts whereby applications running in that context trust the ZIP disk to be in, and hang when it's not 10:25:18 That still doesn't tell me how to instruct the program to run in that context. 10:25:26 (the context controller, that must not trust the same condition, might get an exception in that case) 10:25:38 that's just a matter of additional syntax in your shell 10:25:54 * kc5tja shakes his head -- that won't do. 10:26:12 If you can specify one context, you must be able to specify multiple contexts. 10:26:22 using-memory-from ZIP1 my-program 10:26:23 Otherwise, "copy" type programs will not be possible. 10:27:14 copy programs are obviously at the meta-level, just like the context controllers, with respect to the store. 10:28:20 i.e. you can't do low-level operations on a disk you mounted 10:28:20 * kc5tja disagrees with the whole concept. 10:28:43 just like mounting in unix, except each process may have a different mounting context 10:29:01 Well, each process gets a different VM swap space. 10:29:21 so what's the problem with a different mount swap space? 10:29:30 It's unnecessarily limiting. 10:29:38 kc: i wouldn't worry about orthogonal persistence resembling too closely the old filesystem way.. as long as the orthogonal persistence advantages are still there.. 10:29:38 how that, limiting? 10:30:03 futhin: You still have to manage your data. 10:30:41 no you don't 10:30:41 Sure you do. 10:30:41 Absolutely you do. 10:30:41 you just add a mount somewhere in your initialization file, and there you are 10:30:41 What if I want to edit a text document I wrote in Notepad under a more sophisticated word processor now? 10:30:50 Am I expected to hand cut-n-paste it? 10:31:08 and every time you need a *specific* mount for a program, you wrap your program in a function that launches it in the proper context 10:31:28 Such a system is becoming increasingly more complex. 10:31:46 kc5tja: how is that different from moving files between Wordperfect and Word? 10:31:46 Everytime you need a wrapper, that's extra complexity. 10:31:57 Because the "file" exists in the program's address space! 10:31:58 kc5tja: of course, when you exchange data, you need a common file format 10:32:05 so what? 10:32:25 you can copy data from address spaces to another one. 10:32:41 That's right -- you need a common file format. That defeats the purpose of orthogonal persistence, yes? The whole idea behind it is to completely eradicate the traditional filesystem. 10:32:44 copy-to ZIP2 (somedatainZIP1) 10:33:09 with orth persistence, you don't need a common *file* format, but a common *datatype* 10:33:22 i.e. you don't have to worry about marshalling 10:33:27 you only worry about structure 10:39:58 Any translation from internal to external representation is still marshalling. 10:40:21 what external representation? 10:40:21 you don't need it 10:40:21 The common datatype. 10:40:21 it's not marshalling 10:40:21 A text editor will not just edit a flat buffer of bytes. It'll break it up into lines at the very least, to facilitate rapid response. 10:40:21 your question is about as stupid as the one some MP asked Babbage: "if we ask the wrong question, will it give the right answer?" 10:40:21 Yet, when transfering it to another program, you want that flat buffer of bytes. 10:40:21 if you run a program with a wrong parameter, it won't work 10:40:21 My question isn't as stupid, it points out a fundamental inconvenience of the otherwise very convenient system. 10:40:21 it's not an inconvenience of orth persist 10:40:21 it's an inconvenience of just any computer system 10:40:21 a type mismatch is a type mismatch in just any computer language or system 10:40:22 Now you're introducing language restrictions. 10:40:22 More complexity. 10:40:22 if you S" sdf" 1 2 F+ you lose 10:40:22 Well, no kidding. 10:40:22 But that's not orthogonal persistence! 10:40:22 if I edit a file, and move it to another editor, I convert it to character string first 10:40:22 Marshalling. 10:40:22 (or to some object that obeys some proper protocol) 10:40:22 no 10:40:22 Yes 10:40:22 it could be a "virtual" string 10:40:22 The definition of marshalling is to convert an internal data representation into an external, well-known format. 10:40:22 that just obeys the string protocol 10:40:22 no need to marshall anything 10:40:22 It does NOT matter if it's being stored in a file or in RAM> 10:40:22 no. 10:40:22 the definition of marshalling is to convert internal data representation into a stream of bytes. 10:40:22 Well, hell, /dev/random does that just fine. 10:40:22 But that doesn't make it marshalling. 10:40:22 Saving a spreadsheet document also does that, but unless you know what *FORMAT* that stream of bytes is in, it may as well have been from /dev/random. 10:40:22 you don't need copy or move anything around if you have a proper wrapper. 10:41:30 and if you need to copy something from a persistence space to another, that's just a one instruction that won't need do anything more with orth persist than with explicit persist 10:41:30 Sure. But if you want a program that actually runs with any respectible performance, you'll not use any wrappers at all until they're necessary. 10:41:30 * futhin is thinking that both of you guys have slightly different ideas of what orthogonal persistence IS 10:41:30 you're talking rubbish 10:41:30 * kc5tja laughs 10:41:30 Whatever. 10:46:17 the explicit persistence system is the one that uses a low-level wrapper 10:46:17 a forced one 10:46:17 around all applications 10:46:17 You can think what you want, but to date, you haven't given me anything to convince me otherwise about orthogonal persistence. 10:46:17 with orth persistence, most applications directly use objects in memory 10:46:17 and it's only when you have a type mismatch that you must convert things 10:46:17 Yes, I know full well what the differences are. 10:46:17 which might not be costly 10:46:17 But you yourself admit that you need common data formats. 10:46:17 no, not formats 10:46:17 types 10:46:17 big different 10:46:17 BIG difference 10:46:17 Not when the program manipulates the memory image directly! 10:46:17 what difference does that make? 10:46:17 all applications, text files, etc.. are objects 10:46:17 so what? 10:46:17 * kc5tja doesn't know how to respond to that. 10:46:17 and the objects have wrappers 10:46:17 as if explicit persistence was magic 10:46:18 (i'm talking out of context here) 10:46:18 I cannot believe you just asked that question. 10:46:18 why do they have wrappers? 10:46:18 Don't you have something like a Ph.D. in compsci? 10:46:18 kc: i think fare is implying that you are getting into unimportant details to the real problem by saying "so what?" etc 10:46:18 but i'm finding most of the conversation over my head :P 10:46:18 i came up with the "wrapper" concept on my own 10:46:20 but i wasn't thinking of "wrapper" 10:46:21 just object 10:46:29 containing some basic information on type, etc 10:46:31 kc: you still haven't explained any problem that orthogonal persistence has that explicit persistence doesn't have, in a worse form 10:46:35 and then containing the actual file 10:47:37 --- quit: cleverdra (Excess Flood) 10:47:47 --- join: cleverdra (julianf@0-1pool37-12.nas2.florence1.sc.us.da.qwest.net) joined #forth 10:48:17 futhin: I suppose what you mean is that the system must maintain dynamic type safety 10:48:49 futhin: which is indeed an important feature for an orthogonally persistent system, if you care about stability 10:50:04 Fare: With explicit persistence, you can save a region of memory to an explicitly named file. That name includes storage volume among other things. With OP, you can't do that (from within the program at least). 10:50:58 of course you can copy an object if you want to 10:51:10 most of the time you don't want to, that's all 10:51:29 you setup your storage dependencies once and for all 10:51:37 and your backup policies once and for all 10:51:50 and you only ever care to copy when modifying these policies 10:51:50 My problem isn't the technology, though -- it's the user interface for it. Maybe I didn't get specific enough for this. I think I see the crux of the problem here, since we're "mostly agreeing" and the differences are getting blown up into full-blown drag-down battles. 10:52:45 copy-object-to object storage-context 10:52:48 Those two points that I detailed above were the only two things that I have major issues with OP; the rest of OP is a glorious thing -- I'd use it in a heartbeat if I could. 10:52:50 or some other such thing 10:53:00 of course, that requires first-class storage-contexts 10:53:17 something simpler OP systems might not have 10:53:21 You still need a way of uniquely identifying those objects, and most of the OP systems I've seen do away with such things. 10:53:38 why "uniquely identifying" ? 10:54:02 OP is precisely about decoupling storage from naming 10:54:15 if you want your object registered in some context, register it explicitly 10:54:29 1 2 MY-COMPUTATION TO FOO 10:54:40 then the result of your computation is named FOO 10:54:55 in the current context 10:55:47 you indeed need some syntax to copy an object to another context then invoke a continuation in that foreign context with the object as a parameter 11:00:08 (apply-in-context new-context function arguments) 11:01:48 What happens if the volume that object sits in is removed from the system? Suppose I copied a file/object to a floppy, and wanted to view it, for example, in a picture viewer. What happens then? 11:02:08 We can't just "hang" the program. 11:02:18 The user will think something is horribly wrong with the computer that case. 11:17:59 * kc5tja really liked how PC/GEOS (GEOS for short, although the original GEOS was for the Commodore 64) worked as far as persistence. 11:17:59 It was explicit, but moved quite a bit away from the use of "files" as the unit of persistence. 11:18:00 if you didn't copy things before you moved the media, you lose 11:18:00 basically, the processes that depend on the media are hung 11:18:00 You still need to handle the case. 11:18:00 and if they have a controller, these get notified 11:18:00 you needn't handle the case in most cases 11:18:00 just wait for the media to be back 11:18:00 and/or kill the processes 11:18:04 (by default, they just sit and wait) 11:18:04 Anyway, with GEOS, you explicitly opened a virtual memory file, and in exchange you get a "global handle." 11:18:04 just like a unix process that accesses an unavailable nfs share is hung 11:18:05 Yeah, and the way NT hangs when it's waiting on a network resource. And everytime it does, I think the application has crashed. 11:18:05 of course, you may "prepare" a system for media removal by migrating all data back to remaining media 11:18:05 Once you have that global handle, you can allocate and free memory in that "global" space. Before actually using it, you locked it into memory, and you unlocked it when you were done. You also explicitly marked the object as being dirty if necessary. 11:18:05 the equivalent of an "unmount", except some kind of unmounting that preserves existing processes 11:18:05 when the system is done migrating the data, you can remove the media safely 11:18:05 * kc5tja will definitely have something similar to GEOS' VM file concept. 11:18:05 The only restriction with GEOS' method is that you could not store RAM pointers in the virtual memory regions, since they could be re-locked at a different address. 11:18:05 It worked VERY well, and I have to admit, GEOS was astonishingly fast at nearly everything it did because of it. 11:18:06 And for an OS that never touched the CPU's MMU, it was astonishingly fault tolerant for it too. 11:40:20 OK, I'm going for some food. I'll be back. 11:40:21 --- nick: kc5tja -> kc-food 11:59:01 kc5tja: You're talking about having OP on an operating system you're writing right? What sort of language would use this OP? 12:04:41 --- nick: kc-food -> kc5tja 12:04:47 Language makes no difference. 12:05:39 i think that forth would be able to handle OP very easily 12:05:54 OP is orthogonal; it is not dependent on any language. 12:06:19 yes :) 12:06:30 and i think it would be relatively easy to implement it in forth :P 12:06:36 Forth has "Nearly Orthogonal Persistence" with its BLOCK system, but it's not 100% transparent. 12:06:52 nop 12:06:56 ;) 12:07:18 I associate OP with languages that are entirely object oriented. 12:07:51 But that's just it; they don't need to be. 12:07:51 (and I don't know a hell of a lot about it) 12:09:06 I don't see how you could go without having a unique identifier (ie the block number) 12:09:26 unless the process is kept also 12:27:14 print "DIR: "; dir = gets.chomp; Dir.chdir dir; f = open '_index.html', 'w'; Dir.open(dir).each { |n| f.puts "#{n}" } 12:27:14 that's dirify.rb, a Ruby program. 12:27:15 What does it do? It's a step, a very important step, in transferring many documents to my Palm. 12:27:15 I just thought I'd share that. 12:27:15 I can't figure out what it actually is doing though. Creating an HTML index for AvantGo to read? 12:27:15 OK, that's what it's doing. I didn't see the _index.html file. 12:27:15 For Plucker, but yes. 12:27:15 This is mostly for FTP, which Plucker doesn't support. So I use ftp to mget a bunch of files, then use dirify.rb to create an index, and then run a different plucker program on the index, which creates a plucker document containing all the files referenced. 12:27:15 I'm pleased, because this began with me being annoyed at the plucker people, and at windows in general -- so I resigned myself to transferring the documents to my linux machine and reading them there -- except that I realized that I could easily create an index, and then did so, and then transferred them back to the windows machine where Plucker is. 12:27:15 Then I remembered that, golly gosh, I have a *programming language* on this horrible computer. 12:29:53 --- quit: Fractal (Killed (NickServ (Ghost: fractal1!fractal@evrtwa1-ar4-4-34-144-173.evrtwa1.dsl-verizon.net))) 12:29:58 why not get a handheld with linux on it? 12:31:18 --- join: tathi (~josh@wsip68-15-54-54.ri.ri.cox.net) joined #forth 12:32:05 I'd love to have one, but they're too expensive, and their support isn't as widespread as Palm's is. 12:32:32 I'd prefer a handheld with PalmOS, actually, even if I had money to buy a handheld with linux. 12:41:44 palmos is nice, but I can't stand all the licensing crap. and it's annoying that I can't program it for free. 12:41:44 Why can't you? 12:41:44 Licensing in what way? There are tons of GPL software available for PalmOS. There's even a version of GCC for it, and of course a version of Forth. 12:41:44 The only difference between commercial and non-commercial versions of Quartus Forth is the ability to make self-standing executables. 12:41:44 I probably can in C now that I have linux. The only forth I know of when I had a palm was Quartus and he wanted $75 12:41:56 Well, he put a lot of time and effort into it. Is it so wrong for him to charge money for his work? 12:42:41 * kc5tja would probably do the same. :) 12:42:41 no, it just makes me uninterested. 12:42:41 * kc5tja intended on making money with Dolphin too. Release the kernel completely for free, and encourage duplication. But release applications for it commecially. 12:47:02 I don't like the idea of paying or charging for software. That usually stops you from sharing what you've learned 12:47:02 I would like to make money with services 12:47:02 That model has been tried, and while it works somewhat, it doesn't live up to its fullest potential. 12:47:02 what model? 12:47:02 we make and host websites that do things 12:47:02 My philosophy is to charge for software, but not charge exhorbitant prices. Also, don't force users to upgrade, and make upgraded versions of software backward compatible with earlier versions whenever possible. 12:47:02 "Pay for services" model. 12:47:02 Herkamire: Fine, but that's a wholly different market segment than software distribution and marketing. 12:47:02 what sort of services are you thinking of? 12:47:02 I'm talking about writing Dolphin applications, and making money off of them so I can augment my current source of income. 12:47:02 I'm not interested in software distribution or marketing 12:47:02 got it. 12:47:02 Well, then why complain about those who are? :-) 12:47:02 I'm saying that in that situation 12:47:04 I would write server apps and charge people for web hosting 12:47:18 and for making them custom sites that use databases etc.. 12:47:20 I see; you're more of a .NET-philosophy person then. 12:47:36 * kc5tja doesn't like .NET -- too mainframe-like. 12:48:27 I don't know much of anything about .NET except I registered for a .NET passport or some such and they seemed to think it would be OK with me to give my e-mail address to everyone. 12:48:41 Well, that's a Microsoft policy thing. 12:48:51 MS can burn in hell 12:48:52 I used .NET because it's the only successful model of its kind. 12:49:13 You can have a successful .NET without following MS' policies if you wanted. 12:49:26 Several open source alternatives to .NET are being built to prove exactly that. 12:49:48 I personally don't think MS has contributed anything useful to the world. and if they have it's been more than made up for by all they've taken away. 12:50:12 I'm not really interested in .NET 12:50:19 But the basic philosophy behind .NET (and its bretheren) is the whole "software as a service" concept. For example, you don't actually have a spreadsheet installed on your box. You go to a website that has your spreadsheet already on it, and you're free to use it as long as you subscribe to the service. 12:50:47 I'm working for a successful little company that makes and hosts websites for people. and we don't have a thing to do with MS. 12:50:56 They have contributed COM, which is a rather nice component model. But you're right -- their contributions are more than made up for by their illegal activities. 12:52:02 I'm not talking about "software as a service" 12:52:17 Am I lagged? 12:52:30 no you're jumping to conclusions 12:52:53 No, you rather explicitly mentioned "charging for services." 12:53:00 In the context of software sales, at that. 12:55:29 yes. services such as web hosting 12:55:29 Given that information, software-as-a-service is a logical next-step. 12:55:29 But that's not software sales. 12:55:29 --- join: CrowKiller (Vapo_Rulez@cnq5-233.cablevision.qc.ca) joined #forth 12:55:29 (which we've already both agreed on) 12:55:29 and I think of making someone a website as a service, although maybe that's a product 12:55:29 fixing one would be a service 12:55:29 No, the website is the product. The making of it is a service. You must charge for both (even if it's hidden in the service charges). 12:55:29 * kc5tja ran two ISPs in the past. :) 12:55:37 I said I wasn't interested in paying or charging for software. 12:56:14 with your "software as a service" deal you are still paying for the software. it's just you're paying by the month instead of by the copy. 13:00:29 for example, right now (when I'm not blabbing in here) I'm writing some code to handle HTML forms. 13:00:29 if it's any good I will release the code to the world 13:00:29 and our customer will pay use because we made her a nice website with forms on it. 13:01:16 * kc5tja understands fully, now that your POV has been made clear. I'm just saying it wasn't at first. :) 13:01:24 brb 13:07:55 back 13:24:36 --- quit: cleverdra (Read error: 104 (Connection reset by peer)) 13:29:45 --- join: cleverdra (julianf@0-1pool37-12.nas2.florence1.sc.us.da.qwest.net) joined #forth 13:39:05 --- join: Speuler (~l@195.30.184.4) joined #forth 13:39:17 servus 13:40:11 Hoi! 14:00:08 --- nick: kc5tja -> kc-meeting 14:00:43 --- quit: cleverdra ("Leaving") 14:13:21 --- quit: tathi ("leaving") 14:14:03 --- nick: kc-meeting -> kc5tja 14:17:04 --- quit: goshawk` (".") 14:28:57 hoi 2 u 2 14:29:07 ;-) 14:29:19 onetom isn't even here. 14:29:57 prolly hit by heavy rain 14:30:23 passed 3 hours ago here 14:30:30 :) 14:30:47 camping site was a mess 14:31:19 only took 5 minutes to convert that place 14:33:24 --- join: indigo (~daboy@bgp01104776bgs.wbrmfd01.mi.comcast.net) joined #forth 14:33:30 :) 14:33:34 * indigo pokes #forth 14:33:42 * rob_ert purrs. 14:34:01 * indigo wonders if anyone other than rob_ert is alive 14:34:22 * CrowKiller is alive and well 14:34:29 ah 14:34:39 Speuler is, too. 14:34:45 well, i have a project and C++ is pissing me off...so i'm looking into forth 14:34:49 (Well, he was 3 minutes ago) 14:34:53 i'm writing a music synthisizer 14:34:54 Uhm. 14:35:00 Well, what kind of project? 14:35:01 Oh 14:35:18 my main concern is speed...how good are the availible forth compilers? 14:35:20 I can't imagine writing complicated algorithms in forth :) 14:35:29 specificly, ones i can afford, as in free 14:35:36 Optimising native code compiler...could get pretty good. 14:35:47 Forth isn't a speedy language, though ;) 14:36:01 You use it for flexibility, ease of developing etc. 14:36:13 well, if it's not speedy, and you can't write complex algos in it, what good is it? :P 14:36:17 (And of course the fact that it can be implemented almost everywhere) 14:36:26 You can write complex algos. 14:36:27 I'm just too lame. 14:36:28 :-) 14:36:31 ahh 14:37:09 well, personally i find stack based machines exelent for complex algos 14:37:09 i think my brain is stack based 14:37:35 Yeah, but with too many levels on the stack, everything gets messy. 14:37:36 --- quit: Herkamire ("leaving") 14:37:40 well, are there any free optimizing forth compilers out there? 14:37:44 But I admit it's THE thing for simple algorithms. 14:37:56 www.forth.org 14:37:59 Check their list. 14:39:36 --- join: gedamo (gdm@gedamo.demon.co.uk) joined #forth 14:39:51 Forth is speedy, it's just not the fastest language today. However, the commercial Forths produce code that's approaching fairly well optimized C code. 14:39:53 Hi, 14:40:24 hmm 14:40:29 "Traditional" forth, i.e. indirect or direct threaded isn't that fast. 14:40:36 kc5tja: you wouldn't happen to be a ham would you? 14:40:45 But sure, with an optimizing _compiler_. 14:41:11 (I think he is :) 14:41:15 hm 14:41:20 * indigo pokes kc5tja 14:41:33 --- nick: indigo -> indigo_kc5kcj 14:41:38 (gasp) 14:42:01 Oooo 14:42:13 What are those codes? 14:42:26 übercodes 14:42:27 Traditional Forths are as fast as unoptimized C. 14:42:35 Yes, I'm an amateur radio operator. :) 14:42:40 they are given only to the coolest people in the world 14:43:01 i see...me too, but i don't have any radios anymore :( 14:43:04 kc5tja: I don't want to see "unoptimized C" then ;-) 14:43:11 hm 14:43:17 well, phooey 14:43:28 Unoptimized C is pretty fast still. 14:43:34 pffffffft 14:43:43 optimized C isn't very fast :) 14:43:56 well, i'll save forth for my next playtime 14:44:02 Optimized C is the fastest you'll ever get -- it exploits the full archietcture of the underlying CPU. 14:44:02 but now i have to get a project done 14:44:05 Hmmm... direct threaded forth jumps back and forth alot... 14:44:14 kc5tja: nah, assembley can be faster 14:44:17 MUCH faster 14:44:22 indigo_kc5kcj: Not anymore. 14:44:48 kc5tja: that's a bunch of crap, and until you have programed in both C and assembley for 5 years, which i don't suppose you have, you shouldn't say that 14:44:57 indigo_kc5kcj: Humans can't possibly optimize their code to take full advantage of every CPU feature at all times. Today's CPUs are horrifically complicated when it comes to optimization, taking into consideration register windowing, and all sorts of other details. 14:45:09 pffffft 14:45:11 that's crap 14:45:15 indigo_kc5kcj: You're right; I have't programmed them both for 5 years. How does 20 sound to you? 14:45:25 * indigo_kc5kcj sighs 14:45:26 indigo_kc5kcj: (He got you there) 14:45:33 heh 14:45:38 now now children, play nice 14:45:43 * indigo_kc5kcj smacks kc5tja 14:45:47 gedamo: ;) 14:45:52 Sure, uncle. 14:45:56 Or...grandpa? 14:46:16 great grandpa? 14:46:16 Smack me all you want, but the fact is, all modern CPUs are designed specifically to run C code. 14:46:17 * gedamo slaps rob_ert 14:46:38 * gedamo slaps indigo_kc5kcj 14:46:49 kc5tja: nah, only intel designs theirs to run the benchmar^H^H^H^H^H^H^H^Hprograms of today 14:47:26 well, i have to get back to coding C++ :( 14:47:34 --- nick: indigo_kc5kcj -> indigo_kodiganta 14:47:40 you have my sympathies 14:50:57 Well...whatever. :) 14:51:06 * kc5tja also sympathizes. 14:51:11 * kc5tja abhores C++ with a passion. 14:51:58 But it's also important to understand what the difference is between fast code and fast programs. 14:52:08 algorithms 14:52:15 I can make a voraciously slow program in fast code, or I can make a blindingly fast program with really slow code. 14:52:31 So the whole argument of fast code and the method a compiler uses to emit its code is really quite immaterial for most things. 14:53:28 I just wish people aren't so quick to judge others based on their philosophies. 14:53:41 me too ;p 14:57:18 --- quit: gedamo (Remote closed the connection) 14:57:33 rob_ert: concerning speed: tried a forth target compiler ? 14:58:55 Speuler: What's that? :) 14:58:57 such as cforth (later became 4thcmp) 14:59:05 no interpreter 14:59:14 source in, executable out 14:59:44 OK. No, I haven't. What I meant was that I haven't heard of anyone using forth for its speed. 14:59:51 extermely compact code, very quick 14:59:57 tremely ... 15:00:36 * Speuler used cforth for year, for lots of projects 15:00:43 years ... 15:00:49 :) 15:00:51 Is this a Forth dialect that emits C code as its output? 15:00:59 nope. object out 15:01:06 Ah 15:01:39 small tools compiled to fromon 200 bytes. 15:01:52 "hello world" was 70 bytes 15:02:30 dos tsrs about 800 bytes (including hooking interupts) 15:02:42 tsr clock or the like 15:03:02 windowing system about 2.5 kb 15:03:20 * kc5tja notes his FS/Forth 16-bit environment produces code about on-par with other subroutine threaded environments. I didn't perform hard measurements yet either, but its performance seems to be on par with the direct threaded Pygmy Forth as well. Note that I'm doing *zero* optimization as well (in fact, there are some optimizations that would be trivial to do, but I simply aren't). 15:03:26 (stand-alone executable, that is) 15:03:33 * dsmith is away: Food 15:04:33 Thus, as my compiler's requirements become more sophisticated, I'll be adding more and more optimizations to make it faster. But it's important to note that I won't do such things unless it's really considered necessary. 15:05:44 when would something be considered "really necessary" ? 15:06:29 When he has to calculate the orbit of an asteroid heading this direction :) 15:06:30 That's really project specific, but for me, "really necessary" generally means when the time spent affecting the compiler is less than the time spent hand-writing the equivalent assembly language code. 15:06:42 that disqualifies "optimizing for fun" 15:06:55 It also depends on whether or not I use a particular sequence of code a lot. 15:07:15 For me, yes. I really don't like optimizing for fun. I used to do it in the past, and it's burned me every time. 15:07:19 optimizing for fun is the only VALID reason to optimize :) 15:07:32 good point 15:07:39 a good rule is to get it right first time :) 15:07:48 * I440r whistles innocently 15:07:56 * kc5tja really finds that good algorithm design and good data structure design (closely related) are really what impacts performance. 15:08:16 By the time you're done hand-tweaking every machine language instruction for minimum latency in your code, Intel has just released their next, higher performance CPU, so why even bother? 15:08:18 kc5 agreed 15:08:38 ok. but getting your compiler to generate efficient code for well-chosen algorithms still improves matters 15:08:41 and i would say good data strucvture design is primary 15:10:29 so I440r, do any contract C/C++ programming lately? 15:10:30 its the harder of the two to get right 15:10:30 n_: ive not worked in almost an entire year 15:10:30 Speuler: Sure. I will not dispute that. And doing "common sense" things like eliminating register reloads when you already know they contain the desired value, etc., should probably be done. 15:10:30 and ive never coded c++ in my life 15:10:30 thank god 15:10:30 (right now, my native code target compiler does NOT do this simple optimization) 15:10:30 the dog wants to take me for a walk :P 15:10:30 But I'm talking about the more heavily architectural-dependent optimizations. 15:10:30 its nagging :) 15:10:30 open the door 15:10:30 let it walk alone 15:10:38 i became co-director of another company today 15:10:45 --- quit: Etaoin (Connection timed out) 15:11:09 just for setting up some linux boxes 15:11:24 life's strange 15:11:48 need to do a bit of coding there too ... 15:11:58 (shell scripts will do :) 15:12:20 maybe i use forth for some additional magic 15:12:48 --- quit: dsmith (Remote closed the connection) 15:13:40 heheh :) 15:13:51 * kc5tja used to be in high-up positions in a couple of companies. 15:14:00 I'm glad those days are over. 15:14:14 kc5tja: what'y'do nowadays 15:14:16 I may start another business for myself later on, it the scope of them won't be nearly what I was working with before. 15:14:16 ? 15:14:25 * kc5tja does semiconductor verification for Hifn, Inc. 15:14:26 ok 15:17:07 that company was paying for my camping site already :) 15:17:28 Camping site? :) 15:17:44 * Speuler managed to reduce expensed to about 5$ / day :) 15:17:51 expenses 15:18:17 Yay. 15:18:24 most requirements are covered by swap-of-services 15:18:41 * kc5tja should do a detailed cost analysis on his current lifestyle to see what expenses he currently has. 15:18:46 like restaurants, flat and so on 15:18:49 Just to depress me. :) 15:18:54 camping site of course 15:19:01 after all, t'is summer now 15:19:16 Actually, I'd like to find a way to finish up a solar-powered turbine so that I can power something off of it. :) 15:19:26 haven't payed a penny today 15:19:50 just finished my long island ice tea 15:20:48 free cinema ... 15:21:27 (their gateway runs linux now :) 15:21:48 What company do you work for? 15:21:54 my own 15:22:15 but don't ask me "which one" :) 15:22:26 Why not? 15:22:31 i'm currently in 3 companies. 15:22:40 My roommate is going into business himself, since he can't/won't find a job otherwise. 15:22:42 only one i set up myself 15:23:17 the internet cafe i'm chatting from right now, i'm partner here too 15:23:33 (food and drinks here too) 15:23:46 Ahh, I see. 15:24:27 there's high demand of linux servers/routers/gateways/dedicated machines 15:24:45 i set up the stuff, and by myself in that way 15:24:51 buy 15:25:21 but linux is just a hobby for me 15:25:26 strangely 15:25:52 for work, i do misc stuff. 15:26:03 I have a high demand for the most compact way for an editor to use the keyboard in its almost complete functionality using the scancode set 2 ;p 15:26:17 like, prototype verification, test software. 15:27:38 * CrowKiller meant using ASM x86 code only, no BIOS or OS routines 15:27:43 but i prefer to walk in and out how i please 15:28:15 that's something easier to do with setting up linux boxes :) 15:30:05 today's company is dunping their win-based system 15:30:09 dumping 15:30:17 Is there any reasonable documentation on the keyboards scansets, and which keyboards support them? 15:30:28 so i liberated some of their machines 15:30:38 --- join: Etaoin (~david@ljk2-5.sat.net) joined #forth 15:30:50 kc5tja: techhelp may be a reasonable source 15:30:58 http://www.execpc.com/~geezer/osd/kbd/index.htm 15:31:02 Hmmm... 15:31:05 that's an msdos based tech-info database 15:31:35 helppc is great, there,s an html version somewhere 15:34:44 WOOHOO!! Scancode 3 is kick-butt! It is so ... SIMPLE...compared to the other two! 15:34:54 not all keyboard support it 15:35:02 Finally, someone got their head out of their butts and realized it was a problem. 15:35:03 that,s the catch ;p 15:35:12 its the scancode for PS/2 devices 15:35:15 the official one 15:35:17 Dolphin's old keyboard code used scancode set 1 for everything it did. 15:35:45 * Speuler moves on to the next free pub :) 15:35:51 l8er 15:36:06 --- quit: Speuler ("using sirc version 2.211+KSIRC/1.1") 15:36:19 But this is the first time I've ever seen scancode set 3 even documented. 15:36:32 Scancode set 2 is rediculous, even by scancode set 1 standards. 15:37:12 http://www.win.tue.nl/~aeb/linux/kbd/scancodes-4.html 15:37:20 lot of good practcal info there 15:37:38 I will have to resort using BIOS routines I presume 15:38:05 because I want my code to fit into a bootsector, I have no choice ;p 15:38:08 although it's written in C, I could pass along Dolphin's keyboard code to you if you want. I'll have to find it (it's in storage somewhere) 15:38:19 is there any contract Forth work to be done anywhere? 15:38:33 Ahh, in that case, my code won't work. It has a 1KB lookup table, and that definitely won't fit in a bootsector. :) 15:38:40 n_: Not sure. 15:38:44 * kc5tja has never tried. 15:40:06 maybe by using a decompression "prefix macro" a bootsector could unpack itself somewhere else, but i dont know any compression algos for that job 15:40:31 and I doubt they exist ;p 15:41:49 there are quite a few in england 15:43:35 brb 15:46:06 --- join: Herkamire (~jason@ip68-9-58-81.ri.ri.cox.net) joined #forth 16:02:02 --- quit: Herkamire ("leaving") 16:02:39 back 16:07:25 since ps/2 devices need to be compliant with sacncode set 3, ill use that one for my editor project 16:08:14 How do you enable scancode set 3? 16:08:21 The documentation you posted didn't outline that. 16:12:26 keyboard command F0h 16:12:43 followed by the scancode set number, or zero to have the active one 16:12:54 its there 16:12:54 --- join: Herkamire (~jason@ip68-9-58-81.ri.ri.cox.net) joined #forth 16:13:05 look just the link before the table 16:19:48 man 16:19:51 amiga is such utter bullshit 16:20:02 the new amigaOS4 will only run on hardware with anti-piracy dongles 16:20:20 n_: One of many reasons I don't work for them anymore. :) 16:25:12 it's probably hackable anyways 16:25:23 to get it to run on other hardware 16:25:45 will the architecure be open? 16:26:03 it will do the same as with the Xbox console 16:26:56 people will reverse engineer it 16:27:11 Yup, especially if the dongle is a hardware artifact. 16:27:31 But they'll just work around it somehow, probably by patching the exec.library itself. 16:34:44 --- quit: Herkamire (carter.openprojects.net irc.openprojects.net) 16:34:44 --- quit: I440r (carter.openprojects.net irc.openprojects.net) 16:34:44 --- quit: indigo_kodiganta (carter.openprojects.net irc.openprojects.net) 16:37:34 --- join: Herkamire (~jason@ip68-9-58-81.ri.ri.cox.net) joined #forth 16:37:34 --- join: indigo_kodiganta (~daboy@bgp01104776bgs.wbrmfd01.mi.comcast.net) joined #forth 16:37:34 --- join: I440r (~mark4@1Cust172.tnt3.bloomington.in.da.uu.net) joined #forth 16:40:34 : create-add create does> [compile] literal + ; 16:40:51 Shouldn't this work like: 16:40:57 5 create-add 5+ 16:41:01 2 5+ 16:41:05 ( Now TOS is 7 ) 16:41:11 I think I tested that on an old IsForth. 16:41:14 And it did work. 16:41:21 But now... Hrm... it doesn't. 16:45:05 : create-add create does> [compile] literal + ; ok 16:45:06 5 create-add 5+ ok 16:45:06 .s 5 ok 16:45:06 drop ok 16:45:06 4 5+ ok 16:45:08 .s ok 16:45:11 What is wrong? 16:45:19 (With me...or IsForth...or my code) 16:52:25 Hrm. 16:52:55 Not working in 1.06b either... Maybe I didn't test it enough. 16:53:49 try [ literal + ] 16:53:55 ;) 16:54:01 Hmm 16:54:22 : create-add create does> [ literal + ] ; Stack Underflow 16:54:49 oh i see.. 16:55:09 Any ideas? 16:55:52 : create-add create does> [compile] + ; or : create-add create does> [compile] [ + ] ; 16:55:54 try those.. 16:57:48 I don't think that _should_ work 16:58:02 None of them work. 16:58:09 Herkamire: Hey :) How to get this to work? 16:59:12 the stuff after does> does not get executed when create-add is run 17:00:16 : create-add create postpone literal ['] + compile, ; 17:01:47 Hmm... I don't think IsForth supports postpone, what does that word do? 17:02:09 Right, it doesn't. 17:02:16 POSTPONE defers the compile-time action of a word at run-time. 17:02:55 try ['] lit compile, compile, 17:02:58 argh postpone is my absolute #1 most hated NON FORTH word 17:03:08 you need to know how the forth system works 17:03:11 I440r: Hey, you should know how to do this in IsForth. 17:03:33 Now, i'm not saying that I like POSTPONE, I'm just saying what it does. :) 17:03:34 I440r: it's that or some shit like I just said 17:03:44 i know compile and [compile] and i know that postpone will NEVER be part of isforth 17:04:06 I440r: Any ideas? :) 17:04:31 why use [compile] on the word + ? 17:04:50 I didn't. 17:05:06 : create-add create does> [compile] literal + ; ok 17:05:15 Why isn't that working+ 17:05:27 err thats still wrong 17:05:34 How should it be like? 17:05:50 you care compiling the word literal which will at run time compile the top of stack to here as a literal 17:06:02 what are you trying to do 17:06:04 exactly 17:06:07 : create-add create immediate does> [compile] literal [compile] + ; 17:06:13 5 create-add 5+ 17:06:17 4 5+ 17:06:22 .s = 9 17:06:45 ugh 17:06:47 why 17:06:53 I440r: how do you compile a call to an immediate without POSTPONE? 17:06:55 Just for fun, heh. 17:07:02 is there a difference between [compile] literal [compile] + and [ literal + ] ? 17:07:03 are you going to have 3+ 4+ 5+ all defined too ? 17:07:10 all the way up tp 99999999+ ? 17:07:11 In F83 and earlier, [COMPILE] is used to do it. 17:07:13 I440r: No, this was an example. 17:07:31 : 1+ 1 + ; 17:07:36 : 2+ 2 + ; 17:07:38 etc etc etc 17:07:51 No, I want one function to define those. 17:08:04 That with 5+ was just an example. 17:08:12 : n+ create , does> @ + ; 17:08:20 5 n+ 5+ 17:08:22 futhin: The difference is that [ is an immediate word that drops out of the compiler. Thus, [ literal + ] will execute literal + at the time the compiler sees it in the source code, rather than compiling the words into the target dictionary. 17:08:23 rob_ert is a forth traitor!!! ;P 17:08:30 futhin: Why? :) 17:08:51 I440r: Thanks :) 17:09:00 cause you don't think forth is absolutely perfect, and then you try to write poor code ;) 17:09:27 Forth isn't absolutley perfect. 17:09:29 Futhin has a point. If Chuck could do away with words and vocabularies at all, he'd do it. :) 17:09:40 (i'm just making up the poor code part) 17:09:43 However, the last time he tried that, it flopped. 17:09:50 forth _is_ perfect fool ;) 17:10:00 futhin: You little fanatic :) 17:10:33 I440r: in isforth .s displays the stack backwards!?!?!!?! 17:10:40 Yes. 17:10:41 :) 17:10:46 * rob_ert wonders why, too. 17:10:46 backwards how? 17:10:55 TOS first. 17:11:14 I've seen it displayed in multiple arrangements. 17:11:25 I prefer TOS last. 17:11:30 isforth isn't alone in displaying it "backwards." IIRC, PygmyForth does it first as well. 17:11:30 But that's what I'm used to. 17:11:57 eh? TOS first is normal isn't it.. up-down left-right 17:12:04 To me, it's a big-endian-versus-little-endian type argument. 17:12:19 ok whatever. I've never seen it that way 17:12:21 stuff at the top should be on the left if they are being displayed that way 17:12:47 : blah ( a b c -- a b c ) <-- I think of that... 17:12:56 Where c is on top in both cases. 17:12:58 FS/Forth will display them with the TOS to the right, to match stack comments. But that's just my way of doing it. 17:13:01 a is on top 17:13:06 if you're going to put the top on the left then you should display it growing from the right side of the screen 17:13:11 No, a is pushed first :) 17:13:43 : stuff 2 * 3 + ; 17:14:49 rob_ert: good point. I've always seen stack comments with TOS on the right 17:15:22 1 2 3 stuff 17:15:31 1 is on top 17:15:32 er 17:15:34 nevermind 17:15:37 :) 17:15:42 futhin_confused. 17:15:46 heh 17:16:29 I440r: how do you compile a call to literal? 17:16:34 (in isforth) 17:17:19 I like it when I type: 1 2 .s and it prints out: 1 2 17:17:22 Hmm.. how can I get the address of a newly create:ed word? 17:17:44 An address I can do 'execute' on then. 17:17:46 hack up .s to display it properly! :P 17:17:54 i.e. where the code starts. 17:18:49 In ANSI Forth, you'd do ' WORD >BODY. ' gives the execution token of the word, and >BODY converts that xt into a body address, which is usually where the code for it will reside. 17:19:20 If I do something like: 17:19:37 : foo create does> . ; 17:19:51 How can I make that word return the address of the newly created word? 17:20:24 Guess that's kind of useless, though. 17:20:41 You'd need to create a word using foo. 17:20:44 FOO BAR 17:20:55 Then ' BAR ? 17:20:58 ' BAR will return BAR's XT, and >BODY will deliver the body address. 17:21:00 * kc5tja nods 17:21:22 So, ' BAR >BODY will give you the body address of BAR? 17:21:26 Note that isForth might not have (or even need) >BODY, but I'm just covering all my bases. :) 17:21:32 Yes. 17:21:36 Nice. 17:21:55 Works. 17:21:55 :) 17:29:08 futhin: Here it is: : create-add here create 9 + ! does> @ + ; 17:29:18 i440r: i hope you didn't implement DEPTH 17:29:40 9 + is fixed 17:30:05 9 is supposed to be passed by stack 17:30:26 my code will probably only work in isforth 17:39:41 --- join: Mongrel (~ant@ool-435249eb.dyn.optonline.net) joined #forth 17:41:03 --- quit: futhin ("gtg") 17:41:42 well, my code is crap 17:41:50 it works untill you add to the heap. 17:45:54 futhin of corse i implemented the word depth 17:54:42 --- quit: Fare (Read error: 113 (No route to host)) 17:55:26 I440r: how do you compile a call to an immediate? 17:55:37 Does someone know what is "Essential Forth (Coming soon)" on TheFox's website? 17:57:10 err compile a call to an immediate ? 17:57:16 what do you mean by that 17:57:25 how do i compile an immediate ? 17:57:46 [compile] 17:58:01 brb 17:58:02 call 12345H 18:01:07 back 18:08:18 --- nick: indigo_kodiganta -> indigo 18:12:50 --- part: indigo left #forth 18:37:16 --- join: tathi (~josh@ip68-9-68-213.ri.ri.cox.net) joined #forth 19:08:54 --- quit: tathi ("leaving") 19:21:44 --- join: mroton (adlez@pcp01518417pcs.reding01.pa.comcast.net) joined #forth 19:22:18 --- nick: mroton -> n__ 19:22:23 --- quit: n_ (Read error: 104 (Connection reset by peer)) 19:27:06 --- quit: skylan (Read error: 104 (Connection reset by peer)) 19:43:57 --- join: skylan (sjh@Sprint270.tbaytel.net) joined #forth 19:58:03 --- quit: Herkamire ("leaving") 20:08:38 --- quit: Etaoin ("raise OutOfInternet") 20:31:29 --- quit: kc5tja ("THX QSO ES 73 DE KC5TJA/6 CL ES QRT AR SK") 20:42:44 --- join: Fractal (toet@h24-77-171-228.ok.shawcable.net) joined #forth 21:10:09 --- quit: I440r ("Reality Strikes Again") 21:28:27 --- quit: CrowKiller (Read error: 110 (Connection timed out)) 22:29:19 --- nick: n__ -> n_ 23:00:36 --- quit: Mongrel ("[BX] Choosey moms choose BitchX!") 23:01:25 --- join: ChillySPy (ChillySpy@ppp033.ppp1.cleveland.nccw.net) joined #forth 23:02:55 --- quit: ChillySPy () 23:59:59 --- log: ended forth/02.07.09