00:00:00 --- log: started retro/09.12.25 06:06:14 docl: half an hour is quite a long time for writing that few characters 06:43:50 yes 06:45:15 there are a couple of issues. one is that a chording keyboard takes time to learn. another is that it would be faster if it could accept simultaneous keypresses instead of caring about the order in which they are pressed 06:45:34 that's not doable portably :( 06:48:04 let me see how long it takes to type my name this morning 06:57:16 ok, that was about 10 minutes for my full name 07:01:12 is there a reference of what combinations correspond to various values? 07:02:02 * docl has been using trial and error, but could write something up 07:03:42 all combinations are just two characters? 07:03:47 mind if I create a docs folder for rst files in forthlets? Or should I stick to gists for now? 07:03:59 feel free to create a docs folder 07:11:09 http://gist.github.com/263651 is what I've identified so far 07:12:24 aw is backspace 07:12:41 if you press h you will get the letters 07:13:15 * docl should make that enabled by default since you are more likely to use letters 07:13:31 possibly it should be a toggle key instead of two keys 07:20:30 it might be more intuitive if I swap the letters before multiplying the top one by 8. 07:20:53 * crc is working on a chart based on your earlier comments about how it works... 07:34:00 I think http://gist.github.com/263651 now covers all the ascii values 07:38:08 yeah that looks about right. there are others that do not have characters associated, such as aw=backspace 07:39:55 and ew would be the enter key 07:40:14 I got *all* of the choords reversed :( 07:41:26 hmm, maybe I just have it processing the keys in the wrong order 07:41:56 you'd naturally think the octal digits would have the first one entered be the highest 07:42:07 yup 07:46:22 there we go 07:51:09 docl: this is really nice 07:51:16 :) 07:54:04 --- join: retro-commit (n=Karere@c-68-80-139-0.hsd1.pa.comcast.net) joined #retro 07:54:09 hmm, k and l are used for arrow keys anyway. maybe they could be the uppercase and lowercase switchers for 2-handed mode 07:54:56 [crcx/forthlets] 4d3405: start adding docs on some of the apps 08:02:37 nice! 08:03:56 [docl/forthlets] ae3986: Merge branch 'master' of git://github.com/docl/for... 08:23:56 [crcx/forthlets] 26037f: work on migration to rst format 08:25:08 I fixed the chorder docs to be rst format now :) 08:26:19 nice :) 08:30:58 [docl/forthlets] 26037f: work on migration to rst format 08:35:47 chorder could be part of rem the way x-keys is, or it could be a separate application 08:36:39 separate would be best IMO. it's potentially useful apart from rem. 08:37:18 * crc could see using it on a non-qwerty cell phone 08:37:41 that's a thought 08:39:27 I've made it so that it can revector rem's key and write (!) functions using the $$q function 08:39:38 I saw that 08:40:33 of course if you load it without rem loaded there's going to be a word not found. it doesn't affect the chorder app though 08:46:47 there is an ugly way arround that: 08:46:51 here ] 08:46:52 s" edit" find 08:46:52 if drop 08:46:52 s" : $$q ['] chorder.key ['] rem.key :is ['] chorder.write ['] rem.write :is rem.in ;" 08:46:52 dup getLength eval else drop then ; 08:46:53 execute 08:49:48 ouch 08:50:10 might be able to pretty it up with some macros 08:55:56 [crcx/retro10] e9ff51: fix nip during compilation 08:57:10 better solution: ifExists 08:57:13 : ifExists ( "- ) 08:57:14 32 accept tib find nip not 0; whitespace dup off @ 10 accept whitespace ! ; 08:57:20 ifExists edit : $$q ['] chorder.key ['] rem.key :is ['] chorder.write ['] rem.write :is rem.in ; 08:57:36 if word exists, execute rest of line, otherwise ignore rest of line 08:57:50 nice! 08:59:57 [crcx/retro10] b08ed3: add ifExists 09:00:56 [crcx/forthlets] f82419: update image [fixes "nip"; adds "ifExists"] 09:00:56 [crcx/forthlets] fd7f04: chorder: only define $$q if rem is loaded 09:14:57 [crcx/forthlets] 5f9323: sync with crc's repo 09:29:48 not sure I understand how the 10 accept part of ifExists works. 09:30:43 it doesn't affect the outcome of an input file, just typed input right? 09:39:32 ok, I see why you didn't use ; as the criteria. this lets you do things like define variables 09:40:31 ifExists app:var app:var @ variable: customvar 09:47:44 the trouble with this version is that if you use it at the end of a file, the whitespace filter for reading a file is still active. 09:49:02 maybe something like char: | accept would be better, so that the end of your ifExists clause is specific and can span multiple lines 09:50:25 yes 09:51:26 docl: whitespace filtering is no longer done by the vm on files (since 3 days ago) 09:51:54 (it wouldn't work at all if it was, since the vm used to map all whitespace to 32) 09:54:18 hmm, maybe I need to update my vm 09:58:01 docl: the easy solution is to just make 'ifExists' a macro, then use it once per line 09:58:08 I tried running "words" after the definition on a separate line. it executes if edit does exist, otherwise it gives "word not found". 09:59:06 hmm 09:59:09 * crc will look into that 10:04:38 I created an alternate form that parses for |, but this causes a word not found when the condition is true. 10:04:49 : ifExists ( "- ) 10:04:49 32 accept tib find nip not 0; 10:04:50 char: | accept ; 10:06:39 that's because | isn't a word and is seen by the interpreter 10:07:22 yeah. can be fixed with stub | 10:07:39 why is it seen by the interpreter? 10:08:09 ifExists exits if the word was found, letting the interpreter handle the rest of the input 10:08:17 accept leaves the delimiter for the next accept? 10:08:40 oh 10:08:52 1) parse for name 10:09:00 2) if found, exit to interpreter 10:09:13 3) if not found, parse to delimiter and ignore parsed code 10:12:02 try this: 10:12:03 : ifExists ( "- ) 10:12:04 32 accept tib find char: | accept if tib dup getLength eval then ; 10:26:53 seems to work quite well :) 10:28:11 * crc is considering another implementation, with an extra | 10:28:19 ifExists word | .... | 10:28:28 yes, that might look better 10:28:40 {{ 10:28:40 : cut ( a-a ) dup getLength over + 1- dup @ 32 =if 0 swap ! else drop then ; 10:28:40 : | ( "-a ) char: | accept tib tempString cut ; 10:28:41 ---reveal--- 10:28:41 : ifExists ( "- ) 10:28:42 | find | swap if dup getLength eval ;then drop ; 10:28:42 }} 10:31:00 nice! 10:34:56 [crcx/retro10] 6899cf: improved ifExists 10:36:57 [crcx/forthlets] c45d46: update retroImage 10:41:52 * crc really should stop reading comp.lang.forth; I'm growing tired of some people there 10:43:33 hehe 10:43:50 * docl hasn't read it in ages 10:44:26 posts like this: http://groups.google.com/group/comp.lang.forth/browse_frm/thread/d3da5e7f7cc68902/053837279159beca#053837279159beca annoy me 10:54:15 the first reply? 10:54:26 some people are utter jerks online 10:54:58 yup 10:55:15 (possibly they are the same offline -- they just hide it better in public.) 11:08:11 I would like to see more real work done in retro though 11:08:20 me too 11:08:47 trouble is ensuring that what you do is portable can be tricky. 11:09:29 yes it is 11:11:33 I find I/O to be rather tricky as well... whenever you mess with more than just stdin and sdtout 11:12:04 s/sdtout/stdout 11:14:30 I'll have some extra I/O functionality coming next year 11:14:32 bbiab, switching locations 11:14:36 ok 11:35:10 --- join: nigol (n=nigol@gprs1.vodafone.cz) joined #retro 11:36:18 --- quit: docl (Read error: 110 (Connection timed out)) 11:36:29 Hi, merry Christmas. 11:36:52 --- join: docl (n=luke@74-37-16-242.dr01.hmdl.id.frontiernet.net) joined #retro 11:37:02 * docl is back 11:37:06 merry christmas nigol 11:37:08 wb docl 11:37:27 hi nigol 11:39:14 crc: Thanks, hope you're enjoying it. 11:39:34 docl: hi 11:40:22 I'll be leaving to visit family in about an hour, then returning late evening 11:43:12 nigol: how have you been? 11:43:39 I'm at hospital with my wife. She has some urinal problems. Nothing complicated, I hope. 11:43:56 I'm sorry to hear that 11:46:04 crc: Now it seems quite optimistic, we'll get back home in about hour. 11:46:12 good :) 11:49:04 It is uneasy to type in english on cell phone with czech predictive dictionary :) 11:51:18 http://gist.github.com/263734 <- ifExist with curly brace parsing 11:52:30 docl: looks good 11:52:41 nigol: glad to hear its looking optimistic. hope everything turns out to be ok. 11:53:16 docl: Thanks, I hope so. 11:53:52 docl: do you think the { } work better visually? 11:54:12 well in this context it does seem to make more sense to me. 11:54:55 although that could be my perl and tcl background talking ;) 11:55:21 it is cool that you can write other language styles within retro like this. 11:55:57 [crcx/retro10] 6929ff: use { } with ifExists [from docl] 11:56:36 docl: the image source is updated to use your patch (with one fix; I forget the "nip" after "find") 11:56:53 cool! 11:56:55 It could be cool to have some oop in Retro. Something like Smalltalk ;) 11:58:46 nigol: I can work on an OOP package 11:59:43 * docl has taken to naming even local variables with the name of the app, just for readability 12:00:57 [crcx/forthlets] 0e9b11: update image to use new ifExists from docl 12:00:59 crc: Cool. My knowledge of Forth is limited, so I'm not able to help much. 12:01:26 nigol: that's not a problem 12:01:48 it'll be after new years though. next week will be very tight on free time for me (inventory at work) 12:01:52 * docl just started using linux's "ln" to keep the retroImage and retro files current 12:01:56 [crcx/forthlets] 8c2dc4: update drawing application 12:02:46 But I'm using Smalltalk now really often. 12:03:30 I guess curly braces tell me that I'm looking at executable code. 12:08:01 With oop in Retro, we could implement some data structures like collections elegantly. 12:08:22 the straight line is used for "or" and for pipes from one app to the next. it seems to indicate a sort of context switching where an return to the original context is not necessarily expected. braces and parens indicate returning to the original context more. 12:08:54 sorry, I'm on a different tangent than nigol, not trying to interrupt.) 12:08:57 [crcx/forthlets] 3781d4: update tic-tac-toe game 12:09:07 docl: that's fine 12:09:27 nigol: I'll make sure to work up a good oop system soon :) 12:09:50 nigol: what sort of form of oop do you have in mind? 12:10:42 objects are essentially collections of local and public words and variables, right? 12:10:50 docl: I think, there is plenty of room for different thoughts ;) 12:12:16 you could do something like "app { variable foo : bar this-stuff ; }" and later do "app:foo @ app.bar" 12:13:21 docl: I think about Smalltalk oop style. You have variables visible only inside and methods visible outside. 12:13:37 ahh 12:13:49 so you'd always use use accessor functions 12:14:55 docl: And methods invoking is done by sending messages. 12:16:40 messages, values passed to object function? 12:17:06 " foo" fooObject 12:17:51 docl: Right, accessors allows you to lazy imitializations of vars. 12:18:58 I assume this could be numeric or string depending on the object type, e.g. 10 barObject 12:19:49 that would activate the function listed as #10 12:21:14 5 " foo" fooObject would activate function foo which then takes 5 from the stack 12:21:38 this could be prettied up with macros to something like 5 fooObject: foo 12:22:10 5 10 barObject would activate barObject's function #10 and use 5 from the stack 12:22:41 am I on the right track? (I've never used smalltalk) 12:23:28 docl: You have for example instance of number and you send it message asString and you'll get string object 12:24:31 hmm 12:25:15 (off topic: http://crcx.ath.cx:52850/ has a browser vm instance, with drawing app, tic-tac-toe, rem, and chorder loaded for playing with) 12:25:45 you can do that with stack values... 10 num->string -> " 10" 12:26:01 crc: nice! 12:27:43 my javascript does not seem to do very well at rendering retro 12:27:50 docl: which browser 12:27:55 opera 12:28:11 opera has some issues with ngaro at present :( 12:28:23 Opera/9.80 (X11; Linux i686; U; en) Presto/2.2.15 Version/10.10 12:28:31 :( 12:29:01 * docl is pulling it up in firefox 12:29:04 it's not as bad with the 10.x releases of opera 12:29:21 firefox 3.x works pretty well, unless you want to metacompile :) 12:30:40 odd, in the edit window there are a series of black question-mark chars (unknown chars) on the line following the cursor. 12:31:15 execute "new" 12:32:39 they aren't present on any line without the cursor, and move when the cursor moves 12:32:54 docl: Yes, something like you described, I think (talking about oop) 12:33:14 new simply crashes it without showing a message 12:33:20 no wait 12:33:26 false alarm 12:33:40 it just took some time 12:33:40 new does take a while 12:34:04 and it fixed the problem 12:34:31 cause: the memory for the blocks isn't initialized by default 12:35:16 ah, makes sense 12:35:38 there is no automatic scrolling with firefox either 12:36:39 so chorder's newlines make it useless after a few attempts. 12:37:28 the scrolling is a known problem. I've not found a good solution for that yet. 12:37:53 resetting and redrawing would be a pain 12:39:10 so it is writing this to an image file basically? Why is it not just an edit box? 12:39:32 I mean the visible part for the browser 12:40:10 docl: I could use an edit box, but haven't had much luck layering them over the canvas yet 12:45:02 docl: I'll try again with an edit box tonight 12:45:14 docl: for now, the text is injected into a
area 12:46:40 crc: Can be injected plain html into that div as well? 12:46:50 nigol: potentially 12:47:12 nigol: I currently have a filter in place to prevent that 12:47:30 nigol: but I have run without that filter and injected html and javascript 12:48:19 crc: It should be usable for generation of dynamic html gui. 12:49:46 I'll enable that tonight 12:50:40 * crc is heading out to his parents house now; have a good afternoon 12:52:38 crc: But what about chars like & ? Must be escaped by & and so on? 12:54:36 So we'll getting back home. Happy hackin' 12:57:18 --- quit: nigol ("used jmIrc") 12:57:51 see ya later 13:24:29 --- quit: docl (Read error: 104 (Connection reset by peer)) 13:26:27 --- join: docl (n=luke@74-37-16-242.dr01.hmdl.id.frontiernet.net) joined #retro 16:46:56 --- quit: docl (Read error: 60 (Operation timed out)) 17:29:29 --- join: docl (n=luke@74-36-1-108.dr01.hmdl.id.frontiernet.net) joined #retro 17:36:41 --- quit: virl (Remote closed the connection) 18:09:35 --- quit: docl (Read error: 60 (Operation timed out)) 19:18:10 --- join: docl (n=luke@74-37-16-242.dr01.hmdl.id.frontiernet.net) joined #retro 20:31:53 --- quit: docl (Read error: 110 (Connection timed out)) 20:32:31 --- join: docl (n=luke@67-60-48-82.cpe.cableone.net) joined #retro 20:44:53 * docl is pondering a naming convention for words that take counted strings as input 20:45:15 since we use $ on stack comments, perhaps $word would be appropriate 20:45:25 e.g. : $eval ( $- ) dup getLength eval ; 20:53:10 on the other hand, maybe since we use zt strings more now we should be using a prefix for counted strings 21:26:01 http://gist.github.com/263843 21:27:45 with these you can simply say "cs eval" using an s" ..." string 22:20:16 home at last 22:22:34 docl: copying the string into tib isn't recommended; that could cause problems down the road 22:27:57 welcome back 22:28:47 * docl supposes here would work just as good 22:30:20 or would that cause problems with keepString? 22:30:50 there could always be a buffer 22:39:03 http://gist.github.com/263843 22:43:42 docl: add this to the strings library 22:45:20 ok 22:50:41 fori/nexti may belong in a different library, but is part of cstype 22:52:58 [crcx/ngaro] 1e0e9f: begin moving to rst 22:56:00 * docl is loving the power of macros 22:56:28 docl: if you find more places to use fori/nexti, I'll consider adding them to stage2.retro 22:57:32 ok :) 22:59:28 --- join: virl (n=virl__@chello062178085149.1.12.vie.surfer.at) joined #retro 23:02:21 : .rows 8 fori row nexti ; 23:02:57 [crcx/ngaro] 0e3a49: start expansions of notes on building 23:05:01 docl: that's good enough :) 23:05:05 [crcx/retro10] c6ab9e: add fori/nexti; refactor editor "v" to use them [t... 23:09:56 [crcx/ngaro] 9e5537: cover building more ports 23:12:57 [crcx/ngaro] 82ef95: start merging in other docs into README 23:14:56 [crcx/ngaro] fd2756: fix code blocks in README 23:15:56 [crcx/ngaro] 15f4bc: all docs now part of README 23:16:56 [crcx/wheke] cc5971: more support for counted strings. 23:18:04 [crcx/wheke] 23e8e0: fori/nexti now part of core image; whitespace elim... 23:23:55 [crcx/wheke] 0a1c60: update to latest image 23:47:34 * docl has been attempting to factor the macros in "see" to use fori. not successful yet. 23:47:51 http://gist.github.com/263874 23:49:14 hmm, checking an element in a list can use a simple for with r 1- 23:50:05 it's mainly when you are trying to type something or display in a certain order that it matters 23:59:59 --- log: ended retro/09.12.25