00:04:02 :: 2 00:04:02 2 00:04:04 :: / 00:04:04 / 00:04:07 :: (= / +) 00:04:07 + 00:04:10 :: (/ 5 5) 00:04:10 10 00:04:15 hah 00:04:23 D: 00:04:24 wtf 00:04:43 oh 00:04:44 :d 00:09:19 let's fix that 00:09:24 :: (= / $/) 00:09:25 / 00:09:30 :: (/ 5 5) 00:09:31 1 00:10:20 oklofok: no built-in-function type? XD 00:10:31 hmm? 00:10:51 oklofok: specialcasing atoms, thingy 00:10:58 oklofok: shouldn't / be a built-in function? 00:11:00 that sends the atom off 00:11:03 no, it's an atom 00:11:14 errt 00:11:26 the dispatch is just plain oklotalk logic 00:11:39 as i said, it's not (func arg arg) 00:11:42 it's (expr expr expr) 00:11:52 the expressions are asked to perform the operation, one by one 00:12:00 the one who wants to, does it 00:12:12 and if no one wants to do it, the first one is asked to 00:12:31 and yes, "wanting" is the official term 00:19:19 oklofok: haha 00:19:49 :: ($/ $/ $/) 00:19:49 / 00:20:02 oklofok: so, it asks $/ to $/ with $/ 00:20:05 then asks $/ to $/ with $/ 00:20:07 yeah! 00:20:08 since neither wants to do it 00:20:12 it asks $/ to $/ with $/ 00:20:18 and it says 'oh fuck it' and returns itself 00:20:34 yep, it should actually try all three, but i disabled that for this version, because currently only atoms don't want to evaluate 00:20:39 usually, that's just what you want 00:21:00 but the feature is useless atm 00:21:20 it won't be once i add... well, querying what wants to evaluate 00:21:24 which is trivial really 00:21:34 but has to be done in order to get done, anyway 00:21:50 oklofok: so {} is just a ' 00:21:56 doer' 00:22:09 {} is a doer, yeah 00:22:10 and doers can want to do some things (isomorphic to function calls) 00:22:17 and not do others (unique to oklotalk) 00:22:18 yeah. 00:22:25 well 00:22:29 and that's why you can use {} as a function 00:22:34 things don't want to do everything 00:22:41 oklofok: 00:22:43 i mean, 1 doesn't want to add a complex to itself 00:22:44 'and not do others' 00:22:54 which is why something like __radd__ can be made 00:22:56 hmm 00:23:08 actually i'm not sure i understood 00:23:58 oklofok: {...} creates a 'thing' 00:24:02 things have a few properties: 00:24:24 - they can 'do' some things, based on whether they match one of several patterns given (pattern matching is definable and thus TC) 00:24:38 - everything that they don't explicitly want to do, they don't, and cascade 00:24:46 yep. 00:24:52 the 'actions' inside 00:24:53 are closures 00:25:02 so {(-> [a b] {...})} 00:25:09 the inner 'thing' can access the stuff given 00:25:14 and the outer 'thing' acts like a function 00:25:41 something like that 00:25:46 well 00:26:03 it's really about whether a thing will evaluate any expression given a certain argument 00:26:27 so if a function starts with an action, it will want all args 00:29:32 like {outn "an function was entered"; ptrn -> smth} will always want 00:29:35 everything 00:30:10 Somehow, it amuses me greatly that my math teacher from last year has offered me a ride to the Shadowmoor prerelease. 00:30:24 what's that 00:30:36 Shadowmoor is the next Magic: The Gathering set. 00:30:40 oklofok: oh you can do that?! 00:30:49 ehird: what? 00:30:59 :: (= myId {outn "boo"; (-> x x)}) 00:31:01 <<<20586168>>> 00:31:01 And a prerelease is a tournament where you're given a bunch of cards from the upcoming set to build a deck with. 00:31:04 :: (myId 2) 00:31:06 2 00:31:08 hmm 00:31:10 :| 00:31:10 almost. 00:31:25 1. no output in oklotalk--, it goes in my terminal 00:31:38 2. no ; in oklotalk--, just space to separate expressions 00:31:46 3. () for application 00:32:01 {outn "boo"; (-> x x)} works 00:32:03 ... 00:32:09 {(outn "boo") (-> x x)} works 00:32:18 but you can't show it, because no side-effects are visible 00:32:36 well... 00:33:22 :: (= x {(-> n {(-> [$set n] n) (-> $get n)})}) 00:33:23 <<<20547584>>> 00:33:32 :: (= test (x 4)) 00:33:34 <<<20643512>>> 00:33:36 :: (get test) 00:33:38 4 00:33:42 oklofok: hah 00:33:44 :: (set test 7) 00:33:47 7 00:33:48 i'm going to make a linked list 00:33:50 :: (get test) 00:33:52 7 00:34:01 so, we have a pointer here 00:34:03 now... 00:34:06 side-effects 00:34:27 oklofok: is just (-> [$pb] ...) ok? 00:34:30 :: ({(set test 8) (-> n (* n 3))} 5) 00:34:32 15 00:34:36 test 00:34:40 :: test 00:34:42 <<<20643512>>> 00:34:49 :| 00:34:52 oh 00:34:56 :: (get test) 00:34:58 8 00:35:10 so, yes, you can do it 00:35:33 ehird: no it's not 00:35:36 i mean 00:35:40 it will not match 00:35:45 you wanna get like tail? 00:35:51 $pu as pattern 00:35:54 pattern-match unary 00:37:29 oklofok: ok, define $pb message to me exactly 00:37:34 what is sent [$pb ???] 00:37:36 :: (= ptr {(-> n {(-> [$set n] n) (-> $get n)})}) 00:37:37 and what should i return 00:37:39 <<<20667808>>> 00:37:43 well 00:37:52 ok wait 00:37:55 in your ptr thing 00:38:00 when something is pattern matched on an application of the form (x y z) 00:38:03 does the 'n' override the upper scopes 'n'? 00:38:07 actually 00:38:10 just continue answering 00:38:16 the message [$pb x] is sent to the object. 00:38:28 and if it returns a list with 2 elems, those are put into y and z 00:38:33 hmm 00:38:41 hmm 00:38:55 ehird: what do you mean? 00:39:01 :: (= n 1) 00:39:03 1 00:39:11 :: (= ptest (ptr 8)) 00:39:13 <<<20660096>>> 00:39:17 :: (get ptest) 00:39:19 8 00:39:25 :: (set ptest 10) 00:39:27 10 00:39:32 :: (get ptest) 00:39:34 10 00:39:36 :: n 00:39:39 1 00:39:47 does that answer you? 00:40:24 i'm fairly sure i've done all scoping *well*, at least it usually seems to work whatever i do 00:40:32 :: (= cons {(-> [h t] {(-> [$pb cons] [h t]) (-> $car h) (-> $cdr t) (-> [$setcar h] h) (-> [$setcdr t] t)})}) 00:40:34 <<<20680136>>> 00:40:40 :: (= test (cons 1 2)) 00:40:43 <<<20689544>>> 00:40:46 :: (car test) 00:40:47 1 00:40:49 :: (cdr test) 00:40:51 2 00:40:55 :: (setcar test 3) 00:40:57 3 00:40:58 :: (car test) 00:41:00 3 00:41:04 :d 00:41:07 :D 00:41:09 i am awesome 00:41:09 :D 00:41:19 do $pb : 00:41:22 oklofok: oklotalk is cool. could use some nicer syntax though, yeah ;) 00:41:27 because that's the standard 00:41:29 then do indexing 00:41:32 oklofok: okay 00:41:34 i won't do indexing 00:41:36 it's just a cons cell 00:41:37 not a list 00:41:38 and we'll try quicksort :D 00:41:43 you can treat it like a list though 00:41:44 but i want to see ! 00:41:45 oh alright 00:41:46 what is indexing 00:41:51 hmm 00:41:55 [$! i] 00:42:05 oklofok: can you define setters? 00:42:08 (= FOO BAR) 00:42:08 in lisp 00:42:11 you can override FOO 00:42:13 based on its car 00:42:13 like 00:42:15 not yet. 00:42:15 (= (car x) y) 00:42:20 hmm 00:42:21 you can define a setter for (car x) 00:42:26 ah 00:42:30 presumably, it would be like $pb 00:42:33 it would send off 00:42:36 that isn't done yet, = only does vars 00:42:37 [$= car] 00:42:42 but that's just because i'm lazy 00:42:46 it will do that, yeah 00:42:48 but i dunno what would be returned 00:42:50 :| 00:42:52 ah wait 00:42:55 [$= car val] 00:42:56 of course 00:43:12 (= (X Y) Z) -> (X [$= Y Z]) 00:43:30 hmm... 00:43:39 oklofok: what is the syntax I use for indexing? 00:43:41 well 00:43:41 like not defining 00:43:42 but using 00:43:53 (! list idx) 00:44:01 :: (! [1 2 3] 0) 00:44:03 actually... 00:44:04 1 00:44:21 it might be that the quicksort doesn't work if the list isn't primitive... 00:44:27 depends on how i've done filter... 00:44:34 oklofok: you can implement filter in oklotalk 00:44:39 sure 00:44:44 and would be much cooler too 00:44:47 actually... 00:44:47 :: (= cons {(-> [h t] {(-> [$pb :] [h t]) (-> $car h) (-> $cdr t) (-> [$setcar h] h) (-> [$setcdr t] t) (-> [$! 0] h) (-> [$! n] (! t (- n 1)))})}) 00:44:50 <<<20634360>>> 00:44:52 trivial 00:44:54 oklofok: ok, try quicksort 00:45:03 well 00:45:08 need to do filter first. 00:45:57 hmph 00:45:59 actually 00:46:06 oklofok: just try it 00:46:10 oh wait 00:46:11 i need a nil 00:46:13 that's not hard 00:46:19 oklofok: how do i trigger an error? 00:46:31 ...error? 00:46:33 wuzzat 00:46:35 return $f 00:46:35 oklofok: like this: 00:46:37 :: [ 00:46:39 [] 00:46:41 err 00:46:42 :: ( 00:46:46 :D 00:46:46 An error: Empty application. 00:46:48 see 00:46:51 oklofok: 'An error:' 00:46:59 you can't. 00:47:02 sry 00:47:04 you should add that, sometime 00:47:16 well, i could, in oklotalk-- 00:47:49 but it's not very oklotalky, unless you've stored the continuation for the return somewhere 00:47:54 well... 00:48:02 oklofok: it should be oklotalky 00:48:03 otherwise 00:48:04 you get errors 00:48:06 i guess you can just implement that without explicit continuations 00:48:06 propogating 00:48:08 since nothing ever fails 00:48:11 so it's really hard to debug 00:48:13 also, code doesn't get shorter 00:48:19 since you have to manually check for errors 00:48:27 and yeah, you can just do it with exceptions 00:48:35 which are a special, downwards-only, one-shot form of continuations 00:48:51 well i could do that just with a simple *python exception*, in like a few lines 00:49:02 :: (= nil {(-> [$pb :] $f) (-> $car $f) (-> $cdr $f) (-> [$setcar h] $f) (-> [$setcdr t] $f) (-> [$! n] $f)}) 00:49:05 <<<20666208>>> 00:49:16 but perhaps later, right now i need to add a thing to get filter to work 00:49:19 because.. 00:49:38 :: (= nil {(-> [$pb :] $f) (-> $car $f) (-> $cdr $f) (-> [$setcar h] $f) (-> [$setcdr t] $f) (-> [$! n] $f) (-> $length 0)}) 00:49:43 <<<20716400>>> 00:49:50 you can't dispatch on anything except what the object matches on 00:50:03 :: (= cons {(-> [h t] {(-> [$pb :] [h t]) (-> $car h) (-> $cdr t) (-> [$setcar h] h) (-> [$setcdr t] t) (-> [$! 0] h) (-> [$! n] (! t (- n 1))) (-> $length (+ 1 (length t)))})}) 00:50:05 <<<20716360>>> 00:50:11 i'll add the tst function 00:50:13 :: (length (cons 1 (cons 2 nil))) 00:50:15 2 00:50:26 ...length? 00:50:27 oklofok: i think i might be the best oklotalk coder next to you 00:50:28 ;) 00:50:31 oh 00:50:31 and yeah, length 00:50:33 hehe :D 00:50:35 prolly. 00:50:39 :: (2 + 2) 00:50:41 4 00:50:44 hahahahah 00:50:45 :D 00:50:46 :D 00:50:47 xD 00:50:49 oklotalk is FLEXIBLE 00:50:54 unintentionally 00:50:54 :: (2 2 +) 00:50:58 f 00:51:00 awwww 00:51:02 THAT SUCKS 00:51:06 well 00:51:10 oklofok: make it try ALL PERMUTATIONS 00:51:11 :DDD 00:51:12 it will work in actual oklotalk :D 00:51:17 that's an implementation defect. 00:51:19 haha 00:51:21 3 4 + 00:51:23 will try 00:51:24 3 4 + 00:51:26 3 + 4 00:51:29 4 3 + 00:51:31 4 + 3 00:51:33 + 3 4 00:51:34 + 4 3 00:51:34 etc 00:51:36 until one works 00:51:38 :DDDDDD 00:52:05 about permutations... pattern matching will actually, when excountering an application as a pattern, first ask the function that is used for splitting if it's some special thing 00:52:20 you can do for instance (* n) for matching any number of n's in a list 00:52:26 with an uplevel match 00:52:28 now 00:52:34 oklofok: still 00:52:36 try all permutations 00:52:37 it's ROBUST 00:52:38 :DDD 00:52:44 you can have patterns in a certain kind of list 00:52:46 heh 00:52:48 why not :P 00:52:52 it's just there's only 6 00:53:01 well... why not, why not xD 00:53:05 but, my point is 00:53:17 you know when you have lots of types 00:53:32 if you have a program with type checks and such 00:53:48 so you could basically have the program just guess what arg is what based on types 00:54:05 oklofok: however, i still think you need a propogating error message mechanism 00:54:06 i mean 00:54:08 (prm [(int x) (str y) (lst z)]) 00:54:09 oklotalk's crazy ideas are fun 00:54:10 :D 00:54:13 but if you are actually gonna write something 00:54:16 :p 00:54:18 that will match them in any order 00:54:26 c has tons of fun because it does not have exceptions 00:54:31 there's a global variable errno 00:54:35 and everything sets it if it dies 00:54:38 propogating error messages? 00:54:40 so you have to check errno after most calls 00:54:42 totally hilarious 00:54:45 uhh, yeah, that's ugly. 00:54:48 well 00:54:49 oklofok: if you don't handle them, they bubble up the call stack 00:54:53 python's do those 00:55:12 oklotalk should just allow you to step out of the evaluation, without actually even using continuations or anything 00:55:20 i mean 00:55:34 you can just move in the parse tree up to a try or something 00:55:41 i've written some fun thingies with this 00:56:01 heh, oklotalk has so much shit... 00:56:13 ehird: well yeah, exceptions 00:56:17 i know the concept 00:57:00 that "stepping a level up" can be used for something like define-syntax 00:57:32 hmm 00:57:34 what was i gonna do.. 00:59:20 -!- ehird has quit ("This computer has gone to sleep"). 01:00:11 :: reload 01:00:14 -!- otobot has quit (Remote closed the connection). 01:00:20 :| 01:01:45 -!- otobot has joined. 01:03:44 " Usage: NOTICE , sends a notice. Notices are a type of message that should be auto reacted to" isn't that exactly wrong? 01:05:03 :: (= flr {(-> [f []] []) (-> [f (: (@ h (tst {(f h)})) t) (+ [h] (' f t))]) (-> [f (: h t)] (+ [h] (' f t)))}) 01:05:05 <<<19347336>>> 01:05:18 :: (flr {(< _ 3)} [1 2 3 4 5]) 01:05:20 [1 2 3 4 5] 01:05:25 darn 01:05:39 ({(< _ 3)} 7) 01:05:46 :: ({(< _ 3)} 7) 01:05:48 f 01:06:40 :: (= flr {(-> [f []] []) (-> [f (: (@ h (tst f)) t) (+ [h] (' f t))]) (-> [f (: h t)] (+ [h] (' f t)))}) 01:06:42 01:06:43 :: (flr {(< _ 3)} [1 2 3 4 5]) 01:06:46 [1 2 3 4 5] 01:07:58 :: ({(> _ 3)} 7) 01:08:04 t 01:08:20 oh 01:08:46 :: (= flr {(-> [f []] []) (-> [f (: (@ h (tst f)) t)] (+ [h] (' f t))) (-> [f (: h t)] (+ [h] (' f t)))}) 01:08:51 :: (flr {(< _ 3)} [1 2 3 4 5]) 01:08:58 01:09:00 An error: Var instance has no attribute 'call' 01:09:09 :) 01:09:35 ah 01:09:52 :: reload 01:09:54 reload 01:09:59 :: (= flr {(-> [f []] []) (-> [f (: (@ h (tst f)) t)] (+ [h] (' f t))) (-> [f (: h t)] (+ [h] (' f t)))}) 01:10:01 <<<19507280>>> 01:10:05 :: (flr {(< _ 3)} [1 2 3 4 5]) 01:10:07 An error: Var instance has no attribute 'call' 01:10:13 wtf. 01:11:20 :: (= flr {(-> [f []] []) (-> [f (: (@ h (tst f)) t)] (+ [h] (' f t))) (-> [f (: h t)] (+ [h] (' f t)))}) 01:11:21 <<<19543384>>> 01:11:59 -!- otobot has quit (Read error: 104 (Connection reset by peer)). 01:12:20 -!- otobot has joined. 01:12:23 :: reload 01:12:23 ... 01:12:23 a bit slow 01:12:28 reload 01:12:39 :D 01:12:41 okay 01:12:46 seems it's actually lag. 01:12:58 :: (= flr {(-> [f []] []) (-> [f (: (@ h (tst f)) t)] (+ [h] (' f t))) (-> [f (: h t)] (+ [h] (' f t)))}) 01:13:00 <<<20103296>>> 01:13:06 :: (flr {(< _ 3)} [1 2 3 4 5]) 01:13:09 An error: Atm instance has no attribute 'call' 01:13:15 ... 01:14:21 :: ({(-> (tst {(> 3 _)}) 0)} 5) 01:14:23 f 01:14:32 :: ({(-> (tst {(< 3 _)}) 0)} 5) 01:14:35 0 01:15:59 :: ({(-> [n n] 0)} [1 1]) 01:16:01 0 01:16:08 :: ({(-> [n n] 0)} [1 2]) 01:16:10 0 01:16:18 :: ({(-> [n n] n)} [1 2]) 01:16:20 2 01:16:44 hoh, that's actually a pretty bad flaw. 01:18:13 :: reload 01:18:15 reload 01:18:19 :: ({(-> [n n] n)} [1 2]) 01:18:22 f 01:18:27 :: ({(-> [n n] 0)} [1 2]) 01:18:29 f 01:18:29 :: ({(-> [n n] 0)} [1 1]) 01:18:32 f 01:18:38 :< 01:18:50 okay, command line debug 01:18:50 -> 01:20:35 -!- wildhalcyon has quit ("ChatZilla 0.9.81 [Firefox 2.0.0.13/2008031114]"). 01:24:16 :: reload 01:24:19 reload 01:24:22 :: ({(-> [n n] 0)} [1 1]) 01:24:24 0 01:24:30 :: ({(-> [n n] 0)} [1 2]) 01:24:36 f 01:24:41 thank you 01:24:51 so *now* filter..? 01:24:55 :: (= flr {(-> [f []] []) (-> [f (: (@ h (tst f)) t)] (+ [h] (' f t))) (-> [f (: h t)] (+ [h] (' f t)))}) 01:24:57 <<<20218184>>> 01:25:02 :: (flr {(< _ 3)} [1 2 3 4 5]) 01:25:07 An error: Atm instance has no attribute 'call' 01:25:12 :D 01:30:27 :: reload 01:30:29 reload 01:30:35 :: (= flr {(-> [f []] []) (-> [f (: (@ h (tst f)) t)] (+ [h] (' f t))) (-> [f (: h t)] (+ [h] (' f t)))}) 01:30:37 <<<20151032>>> 01:30:43 :: (flr {(< _ 3)} [1 2 3 4 5]) 01:30:45 An error: global name 'self' is not defined 01:30:50 :P 01:31:01 :: reload 01:31:03 reload 01:31:06 :: (= flr {(-> [f []] []) (-> [f (: (@ h (tst f)) t)] (+ [h] (' f t))) (-> [f (: h t)] (+ [h] (' f t)))}) 01:31:08 <<<20220464>>> 01:31:14 :: (flr {(< _ 3)} [1 2 3 4 5]) 01:31:16 An error: global name 'self' is not defined 01:31:22 hmm? 01:31:48 :: reload 01:31:50 reload 01:31:57 :: (= flr {(-> [f []] []) (-> [f (: (@ h (tst f)) t)] (+ [h] (' f t))) (-> [f (: h t)] (+ [h] (' f t)))})(flr {(< _ 3)} [1 2 3 4 5]) 01:31:59 An error: Atm instance has no attribute 'call' 01:32:05 :D 01:32:08 okay lol. 01:32:43 last attempt, i promise 01:32:48 :: reload 01:32:51 reload 01:32:53 :: (= flr {(-> [f []] []) (-> [f (: (@ h (tst f)) t)] (+ [h] (' f t))) (-> [f (: h t)] (+ [h] (' f t)))})(flr {(< _ 3)} [1 2 3 4 5]) 01:32:55 [1 2 3 4 5] 01:33:01 :D 01:33:06 well at least no errors 01:33:08 sigh. 01:34:46 _oto_bot? 01:35:04 I'd understand "oklobot" but otobot? 01:35:25 oklotalk-bot 01:35:31 i'll rename it to oktabot 01:36:01 oh 01:36:03 lol 01:36:10 :: (= flr {(-> [f []] []) (-> [f (: (@ h (tst f)) t)] (+ [h] (' f t))) (-> [f (: h t)] (' f t))})(flr {(< _ 3)} [1 2 3 4 5]) 01:36:12 [1 2] 01:36:19 :: (= flr {(-> [f []] []) (-> [f (: (@ h (tst f)) t)] (+ [h] (' f t))) (-> [f (: h t)] (' f t))})(flr {(< _ 3)} [1 2 3 4 5 0]) 01:36:21 [1 2 0] 01:36:25 nice 01:36:32 so... let's do quicksort 01:37:32 :: (= qs {(-> [] []) (-> (: h t) (+ (qs (\ {(< _ h)} t)) (+ [h] (qs (\ {(>= _ h)} t)))))}) 01:37:34 <<<19906312>>> 01:37:40 :: (qs [4 5 1 1 2 4 6]) 01:37:42 [1 1 2 4 5 4 6] 01:37:48 * Sgeo watches all this go way way way over his head 01:37:53 what 01:37:53 :D 01:37:56 :: (qs [4 5 1 2 3 6]) 01:37:58 [1 2 3 4 5 6] 01:38:08 doesn't work with duplicates? 8| 01:38:33 :: (= qs {(-> [] []) (-> (: h t) (+ (qs (ftr {(< _ h)} t)) (+ [h] (qs (ftr {(>= _ h)} t)))))}) 01:38:37 :: (qs [4 5 1 2 3 6]) 01:38:37 <<<20328240>>> 01:38:40 An error: Atm instance has no attribute 'call' 01:38:41 * Sgeo doesn't know either QuickSort or Oklotalk 01:38:45 xD 01:39:12 * Sgeo also needs a Python project to work on 01:39:21 Sgeo: oklotalk is a language of mine 01:39:29 and it is heresy not to know quicksort 01:39:29 oklofok, I knew that 01:39:42 (I meant, that oklotalk's yours) 01:40:04 What's wrong with not knowing quicksort? 01:40:22 that i've known it so long i can't accept others not knowing it, mostly 01:41:05 it's like you would think someone is an idiot for not being able to solve 5x2 + 5x - 6 = 0, it's not something you often need, just known it forever, hard to understand some might not 01:41:44 (except that is actually taught to everyone, unlike quicksort) 01:42:39 i don't get it... 01:43:41 Sgeo: i do think you should learn the most popular algos if you want to be taken seriously at a programming channel 01:44:37 -!- adu has joined. 01:48:17 back 01:48:40 hi adu 01:49:01 oklofok, meh, I guess 01:49:45 Although do I really need to know e.g. quicksort in order to be able to program? I mean, it's already implemented by someone else. 01:50:30 he did say you should do it in order "to be taken seriously", not to be able to program 01:51:11 brbafk 01:51:35 wtf filter *just worked*, how come it's broken now :D 01:52:49 okay, it works now... let's try ehird's list 01:57:29 back 01:57:36 ehird's list? 01:59:42 well ehird's cons cell 01:59:53 know what that is? 01:59:58 no 02:00:30 a cons cell is a 2-tuple, whose first element is called car, and second cdr 02:00:42 and you usually use these functions to retrieve them 02:00:49 I meant, what's ehird's cell? 02:01:07 (= cons {(-> [h t] {(-> [$pb :] [h t]) (-> $car h) (-> $cdr t) (-> [$setcar h] h) (-> [$setcdr t] t) (-> [$! 0] h) (-> [$! n] (! t (- n 1))) (-> $length (+ 1 (length t)))})}) 02:01:07 this? 02:01:11 this. 02:01:27 Oh, ehird implemented a list in oklotalk? 02:01:56 yeah 02:02:06 cool 02:02:08 although it doesn't fully work 02:02:12 oh 02:02:15 actually 02:02:17 it does 02:02:17 heh 02:02:23 GregorR: you around? 02:02:56 oklotalk owns ass, i gotta say, when you look at how setcar and setcdr are done :D 02:03:26 -!- adu has quit (Remote closed the connection). 02:03:43 -!- adu has joined. 02:04:18 hi Sgeo 02:04:20 how are you 02:04:46 ok. Looking at PSOX again, although no one else seems interested 02:04:47 you? 02:05:37 whats PSOX? 02:05:44 i'm doing taxes 02:05:48 :P 02:06:05 http://esolangs.org/wiki/PSOX 02:06:31 It's a layer that goes between stdio and esolang interpreters for esolangs that can only do stdio 02:06:49 anyone remember the url to Gregor's website? 02:06:59 hmm 02:07:01 codu.org 02:07:04 thanks 02:07:20 -!- oklofok has changed nick to oklopol. 02:12:38 I've been thinking about something like that 02:13:37 like you know, most languages go on the top (compiled to lower language) or on the bottom (virtual machine, assembly, etc) 02:13:47 I wonder how many languages take the middle approach 02:17:27 :: reload 02:17:29 reload 02:17:46 adu: what's the middle 02:18:07 anyway, damn ehird for going to sleep 02:18:07 i'll show the rest of you 02:18:08 :: something 02:18:12 something 02:18:12 :: (= flr {(-> [f (: (@ h (tst f)) t)] (+ [h] (' f t))) (-> [f (: h t)] (' f t)) []}) 02:18:15 <<<19870304>>> 02:18:34 the filter function, takes a func and a list, filters elements the func returns false for 02:18:46 :: (= nil {(-> [$pb :] $f) (-> $car $f) (-> $cdr $f) (-> [$setcar h] $f) (-> [$setcdr t] $f) (-> [$! n] $f) (-> $length 0)}) 02:18:49 <<<19893304>>> 02:18:54 ehird's nil class 02:19:04 :: (= cons {(-> [h t] {(-> [$pb :] [h t]) (-> $car h) (-> $cdr t) (-> [$setcar h] h) (-> [$setcdr t] t) (-> [$! 0] h) (-> [$! n] (! t (- n 1))) (-> $length (+ 1 (length t)))})}) 02:19:06 <<<19883352>>> 02:19:12 :: (string-ref "Hello" 1) 02:19:14 f 02:19:19 ehird's cons cell class 02:19:25 :: (= list (cons 6 (cons 1 (cons 9 (cons 2 (cons 4 (cons 0 nil))))))) 02:19:27 <<<19861176>>> 02:19:35 list made by consing shit 02:19:40 adu: string-ref? 02:19:46 this isn't lisp 02:19:53 what is it? 02:19:59 :: (= qs {(-> (: h t) (+ (qs (flr {(< _ h)} t)) (+ [h] (qs (flr {(>= _ h)} t))))) []}) 02:20:01 <<<19931984>>> 02:20:03 here, generic quicksort 02:20:09 and now the cool part 02:20:21 (qs list) 02:20:23 :: (qs list) 02:20:25 [1 2 4 0 6 9] 02:20:33 thats not sorted 02:20:33 I remember that Gregor had some scans of pages he wrote out while designing c2bf.. I wonder if they are still online someplace 02:20:33 ... 02:20:35 wtf :D 02:20:38 it like just worked. 02:20:57 lofl :< 02:21:03 i swear it worked a minute ago in my cli 02:21:54 hmm... 02:21:59 reload might not work properly. 02:21:59 maybe it thinks "0" is "5" for some reason 02:22:13 :: reload 02:22:15 reload 02:23:19 :: (= flr {(-> [f (: (@ h (tst f)) t)] (+ [h] (' f t))) (-> [f (: h t)] (' f t)) []})(= nil {(-> [$pb :] $f) (-> $car $f) (-> $cdr $f) (-> [$setcar h] $f) (-> [$setcdr t] $f) (-> [$! n] $f) (-> $length 0)})(= cons {(-> [h t] {(-> [$pb :] [h t]) (-> $car h) (-> $cdr t) (-> [$setcar h] h) (-> [$setcdr t] t) (-> [$! 0] h) (-> [$! n] (! t (- n 1))) (-> $length (+ 1 (length t)))})})(= list (cons 6 (cons 1 (cons 9 (cons 2 (cons 4 (cons 02:23:24 An error: Application consists of 2 or 3 expressions. 02:23:28 :D 02:23:29 :: (= quicksort done) 02:23:35 :: (quicksort) 02:23:39 done 02:23:41 :) 02:23:44 An error: Application consists of 2 or 3 expressions. 02:23:48 mine is so much better 02:23:58 okay, let's see what happens if i reload the whole bot 02:24:02 adu: yes, but your call is wrong 02:24:08 (quicksort) doesn't make sense 02:24:17 -!- otobot has quit (Read error: 104 (Connection reset by peer)). 02:24:37 -!- oktabot has joined. 02:25:41 :: (= flr {(-> [f (: (@ h (tst f)) t)] (+ [h] (' f t))) (-> [f (: h t)] (' f t)) []}) (= nil {(-> [$pb :] $f) (-> $car $f) (-> $cdr $f) (-> [$setcar h] $f) (-> [$setcdr t] $f) (-> [$! n] $f) (-> $length 0)}) (= cons {(-> [h t] {(-> [$pb :] [h t]) (-> $car h) (-> $cdr t) (-> [$setcar h] h) (-> [$setcdr t] t) (-> [$! 0] h) (-> [$! n] (! t (- n 1))) (-> $length (+ 1 (length t)))})}) (= list (cons 6 (cons 1 (cons 9 (cons 2 (cons 4 (co 02:25:43 does that come through? should end in (qs list) 02:25:43 An error: Application consists of 2 or 3 expressions. 02:25:56 prolly doesn't 02:26:15 :: (qs [1,2,3]) 02:26:16 :: (= flr {(-> [f (: (@ h (tst f)) t)] (+ [h] (' f t))) (-> [f (: h t)] (' f t)) []}) (= nil {(-> [$pb :] $f) (-> $car $f) (-> $cdr $f) (-> [$setcar h] $f) (-> [$setcdr t] $f) (-> [$! n] $f) (-> $length 0)}) (= cons {(-> [h t] {(-> [$pb :] [h t]) (-> $car h) (-> $cdr t) (-> [$setcar h] h) (-> [$setcdr t] t) (-> [$! 0] h) (-> [$! n] (! t (- n 1))) (-> $length (+ 1 (length t)))})}) 02:26:17 [1 ,2,3] 02:26:19 <<<19975264>>> 02:26:32 :: (qs [5,4,3,2,1]) 02:26:34 [5 ,4,3,2,1] 02:26:35 :: (= list (cons 6 (cons 1 (cons 9 (cons 2 (cons 4 (cons 0 nil))))))) (= qs {(-> (: h t) (+ (qs (flr {(< _ h)} t)) (+ [h] (qs (flr {(>= _ h)} t))))) []}) (qs list) 02:26:37 [0 1 2 4 6 9] 02:26:46 yay 02:26:46 works now 02:27:01 wow 02:27:14 i'll make a list of rational numbers and sort it :D 02:27:20 :: (qs (cons 5 (cons 4 (cons 3 (cons 2 (cons 1 nil)))))) 02:27:22 [4 3 2 1 5] 02:27:27 no it doesn't 02:27:32 the gist being that the list type and the rational number class are both mde in oklotalk 02:27:35 :| 02:27:42 wtf. 02:28:00 hmph, i'll start fixing again then 02:28:21 are you sure you're implementing it properly? 02:28:30 :: (qs (cons 4 (cons 3 (cons 2 (cons 1 nil))))) 02:28:32 [3 2 1 4] 02:28:39 adu: i've tested it a lot 02:28:39 actually 02:28:54 :: (= qs {(-> (: h t) (+ (qs (flr {(< _ h)} t)) (+ [h] (qs (flr {(>= _ h)} t))))) []}) 02:28:56 <<<20152768>>> 02:29:03 :: (qs [4 3 2 1]) 02:29:05 [2 1 3 4] 02:29:12 seriously 02:29:15 fuck. 02:29:21 :: (qs [3 2 1]) 02:29:23 [1 2 3] 02:29:43 :: (= qs {(-> (: h t) (+ (qs (\ {(< _ h)} t)) (+ [h] (qs (\ {(>= _ h)} t))))) []}) 02:29:45 <<<20033584>>> 02:29:52 :: (qs [4 3 2 1]) 02:29:55 :: (qs (cons 5 (cons 4 (cons 3 (cons 2 (cons 1 nil)))))) 02:29:57 [1 2 3 4] 02:29:59 [(-> cdr t) (-> [setcar h] h) (-> [setcdr t] t) (-> [! 0] h) (-> [! n] (! t (- n 1))) (-> length (+ 1 (length t))) (-> car h) (-> cdr t) (-> [setcar h] h) (-> [setcdr t] t) (-> [! 0] h) (-> [! n] (! t 02:30:08 hmm okay....... 02:30:20 err 02:30:23 wtf xD 02:30:26 :: (cons 5 (cons 4 (cons 3 (cons 2 (cons 1 nil))))) 02:30:27 oh, right. 02:30:30 <<<20022016>>> 02:30:44 :: [1 2 3 4 5] 02:30:46 [1 2 3 4 5] 02:30:53 :: [1, 2, 3, 4, 5] 02:30:55 [1 , 2 , 3 , 4 , 5] 02:31:06 :: (1 2 3 4 5) 02:31:07 adu: i changed the implementation, doesn't work for other than primitive lists now. 02:31:09 An error: Application consists of 2 or 3 expressions. 02:31:16 it seems the problem is my filter function 02:31:25 and application takes 2 or 3 expressions 02:31:27 not 5 02:31:36 ok 02:31:46 :: (2 + 4) 02:31:47 I don't know anything about your lang 02:31:48 :: (+ 2 4) 02:31:48 6 02:31:52 6 02:32:15 whats the diff between [1 2 3] and [1, 2, 3] ? 02:32:25 well do like ehird and just start coding in it... :D 02:32:31 lol 02:32:43 god i hate that dood sometimes 02:32:44 I have 3 languages like that 02:32:51 (read: "envy") 02:32:52 who is ehird? 02:33:00 adu: , is an atom 02:33:07 ehird is a guy who lives here 02:33:23 oklopol: so what does (,) do? 02:33:41 (,)? that's not a proper application 02:33:46 , is an atom 02:33:48 :: , 02:33:53 ok so what does it do? 02:33:54 , 02:34:02 that 02:34:04 it's an atom 02:34:08 it doesn't do anything 02:34:11 ok, so what is an atom? 02:34:22 like a symbol? 02:34:26 a retarded string, somewhat 02:34:29 yes, symbol. 02:34:33 ah ok 02:34:37 other name for it 02:34:38 I like symbols 02:34:42 *another 02:34:47 me too 02:34:55 can I help with your language? 02:35:14 well you can help me by telling what didn't work, i forgot. 02:35:18 help in what sense? :D 02:35:23 I know hundreds of programming languages 02:35:34 :: (= flr {(-> [f (: (@ h (tst f)) t)] (+ [h] (' f t))) (-> [f (: h t)] (' f t)) []}) 02:35:39 you do? awesome :D 02:35:45 <<<20326240>>> 02:36:00 in that case i should be able to explain this to you in an instant 02:36:12 :: (+ 4 5) 02:36:14 9 02:36:21 I can guess that -> is lambda 02:36:28 nope 02:36:33 it's pattern matching 02:36:36 oh 02:36:36 {} is a lambda 02:36:43 ok 02:36:45 (-> ptrn expr expr expr...) 02:37:03 so I'm guessing [] is empty list 02:37:06 it kinda checks the pattern, and if it matches, it continues the evaluating to the expr's 02:37:11 yeah 02:37:15 [elem elem elem ...] 02:37:19 so what is ' 02:37:26 recursion 02:37:49 what is : 02:37:54 cons? 02:37:58 well 02:37:59 it's in a pattern there 02:38:03 yeah 02:38:05 basically 02:38:12 what is @? 02:38:25 (@ a b) matches on both a and b 02:38:33 the object that is matched 02:38:43 (first on b, then on a, actually) 02:39:07 :: (flr {(> _ 3)} [1 2 32 454 5]) 02:39:09 [32 454 5] 02:39:29 :: (flr {(> _ 3)} (cons 1 (cons 4 nil))) 02:39:31 [4] 02:39:47 :: (flr {(> _ 3)} (cons 4 (cons 1 (cons 4 nil)))) 02:39:50 [4 4] 02:40:04 :: (flr {(<= _ 3)} (cons 4 (cons 1 (cons 4 nil)))) 02:40:07 [1] 02:40:19 wtf. there needs to be something wrong with it 02:40:48 :: (= fac {(-> 0 1) (-> n (* n (' fac (- n 1)))) []}) 02:40:51 <<<20380808>>> 02:40:52 err 02:40:55 :: (fac 2) 02:40:58 An error: maximum recursion depth exceeded 02:40:58 okay, my cli runs it... 02:41:04 :: relad 02:41:06 relad 02:41:15 errr 02:41:20 :: reload 02:41:22 reload 02:41:23 adu: you have an error 02:41:29 not my fault there 02:41:35 :: (= fac {(-> [f 0] 1) (-> [f n] (* n (' f (- n 1)))) []}) 02:41:37 <<<27395616>>> 02:41:39 :: (fac 2) 02:41:41 [] 02:41:46 :) 02:41:48 almost 02:41:59 what's f? 02:42:06 I have no idea 02:42:19 the first one was correct, apart from a small... defect 02:42:33 also the [] isn't needed 02:42:33 whats that? 02:42:42 oh ok, but you had it in yours 02:42:45 it's would be returned if neither pattern matched 02:42:57 whats the defect? 02:43:00 yes, that's for returning [] for the standard case 02:43:05 i mean 02:43:07 well 02:43:15 recursion 02:43:45 you can just recurse by (fac ...) 02:43:45 ' is a shorthand 02:43:46 :: (= fac {(-> 0 1) (-> n (* n (' f (- n 1))))}) 02:43:47 + making it easier for lambdas to recurse 02:43:48 :: (fac 0) 02:43:49 <<<27815888>>> 02:43:51 1 02:43:57 :: (fac 2) 02:43:59 An error: maximum recursion depth exceeded 02:44:05 wut 02:44:11 ah 02:44:20 getting closer 02:44:27 should "f" be "fac"? 02:44:27 just do what you did, again, and it should work 02:44:37 nope. 02:44:43 :: (= fac {(-> 0 1) (-> n (* n (' f (- n 1))))}) 02:44:45 <<<20154248>>> 02:44:45 :: (fac 2) 02:44:47 you are making the call (fac f (- n 1)) there 02:44:48 An error: maximum recursion depth exceeded 02:44:55 why exactly? 02:44:55 :D 02:45:07 (fac ..) or (' ...) for recursion 02:45:09 i dunno, cuz you did it like that 02:45:11 not both 02:45:15 ooooooooooo 02:45:15 ok 02:45:22 f was the function to filter with, man :) 02:45:24 :: (= fac {(-> 0 1) (-> n (* n (' (- n 1))))}) 02:45:26 <<<28207504>>> 02:45:27 :: (fac 2) 02:45:28 2 02:45:30 YEY 02:45:35 hehe 02:45:41 I made a program in oklkang 02:45:52 oklotalk 02:45:59 oklotalk 02:46:01 right 02:46:04 sorry 02:46:06 yarr 02:46:22 :: reload 02:46:28 reload 02:46:35 :: (= flr {(-> [f (: (@ h (tst f)) t)] (+ [h] (' f t))) (-> [f (: h t)] (' f t)) []}) 02:46:37 <<<28325208>>> 02:46:41 :: (= nil {(-> [$pb :] $f) (-> $car $f) (-> $cdr $f) (-> [$setcar h] $f) (-> [$setcdr t] $f) (-> [$! n] $f) (-> $length 0)}) 02:46:43 <<<28364472>>> 02:46:49 :: (= cons {(-> [h t] {(-> [$pb :] [h t]) (-> $car h) (-> $cdr t) (-> [$setcar h] h) (-> [$setcdr t] t) (-> [$! 0] h) (-> [$! n] (! t (- n 1))) (-> $length (+ 1 (length t)))})}) 02:46:51 <<<28801064>>> 02:47:00 :: (= list (cons 5 (cons 4 (cons 3 (cons 2 (cons 1 (cons 0 nil))))))) 02:47:02 <<<27836824>>> 02:47:10 :: (= qs {(-> (: h t) (+ (qs (flr {(< _ h)} t)) (+ [h] (qs (flr {(>= _ h)} t))))) []}) 02:47:12 <<<28207344>>> 02:47:18 :: (qs list) 02:47:20 [4 3 2 1 0 5] 02:47:24 ... 02:47:27 wtf is going on 02:47:33 i'll reboot the bot again.. 02:47:39 -!- oktabot has quit (Read error: 104 (Connection reset by peer)). 02:48:02 -!- oktabot has joined. 02:48:07 :: (= flr {(-> [f (: (@ h (tst f)) t)] (+ [h] (' f t))) (-> [f (: h t)] (' f t)) []}) 02:48:09 <<<19345080>>> 02:48:11 :: (= nil {(-> [$pb :] $f) (-> $car $f) (-> $cdr $f) (-> [$setcar h] $f) (-> [$setcdr t] $f) (-> [$! n] $f) (-> $length 0)}) 02:48:13 <<<19394512>>> 02:48:17 :: (= cons {(-> [h t] {(-> [$pb :] [h t]) (-> $car h) (-> $cdr t) (-> [$setcar h] h) (-> [$setcdr t] t) (-> [$! 0] h) (-> [$! n] (! t (- n 1))) (-> $length (+ 1 (length t)))})}) 02:48:19 <<<19419384>>> 02:48:26 :: (= list (cons 5 (cons 4 (cons 3 (cons 2 (cons 1 (cons 0 nil))))))) 02:48:28 <<<19445520>>> 02:48:31 :: (= qs {(-> (: h t) (+ (qs (flr {(< _ h)} t)) (+ [h] (qs (flr {(>= _ h)} t))))) []}) 02:48:33 <<<19410656>>> 02:48:37 :: (= talk {(-> ["hi" x] "Why hello!") (-> ["bye" x] "Good bye!") []}) 02:48:37 :: (qs list) 02:48:39 <<<19446680>>> 02:48:41 [4 3 2 1 0 5] 02:48:45 :: (talk ["hi" "Mr. roboto"]) 02:48:47 xD 02:48:47 Why hello! 02:48:52 :: (talk ["hi" "Mr. roboto"]) 02:48:54 Why hello! 02:48:59 :: (talk ["bye" "Mr. roboto"]) 02:49:02 Good bye! 02:49:08 :) 02:49:10 :D 02:49:42 but hey 02:49:48 ya? 02:49:51 how come that only works on my comp :D 02:49:55 i mean 02:49:55 that quicksort 02:50:01 i don't know 02:50:03 i just copypaste the code :D 02:51:19 :: flr 02:51:48 what does flr do? 02:52:00 filter 02:52:11 :: (flr {(< _ 3)} [1 2 3 4 5]) 02:52:39 -!- oktabot has quit (Read error: 104 (Connection reset by peer)). 02:52:52 something is very wrong... 02:53:17 -!- oktabot has joined. 02:53:28 :: (= flr {(-> [f (: (@ h (tst f)) t)] (+ [h] (' f t))) (-> [f (: h t)] (' f t)) []}) 02:53:30 02:53:40 ... 02:53:43 :: (= flr {(-> [f (: (@ h (tst f)) t)] (+ [h] (' f t))) (-> [f (: h t)] (' f t)) []}) 02:53:46 <<<19476032>>> 02:54:09 :: (flr {(< _ 3)} [1 2 3 4 5]) 02:54:11 [1 2] 02:54:21 :: (= cons {(-> [h t] {(-> [$pb :] [h t]) (-> $car h) (-> $cdr t) (-> [$setcar h] h) (-> [$setcdr t] t) (-> [$! 0] h) (-> [$! n] (! t (- n 1))) (-> $length (+ 1 (length t)))})}) 02:54:24 02:54:26 :: (= cons {(-> [h t] {(-> [$pb :] [h t]) (-> $car h) (-> $cdr t) (-> [$setcar h] h) (-> [$setcdr t] t) (-> [$! 0] h) (-> [$! n] (! t (- n 1))) (-> $length (+ 1 (length t)))})}) 02:54:28 <<<19588240>>> 02:54:35 :: (= nil {(-> [$pb :] $f) (-> $car $f) (-> $cdr $f) (-> [$setcar h] $f) (-> [$setcdr t] $f) (-> [$! n] $f) (-> $length 0)}) 02:54:37 <<<19603008>>> 02:54:53 what does + do? 02:55:05 :: (= list (cons 5 (cons 4 (cons 3 (cons 2 (cons 1 (cons 0 nil))))))) 02:55:12 <<<19671160>>> 02:55:14 + is an atom 02:55:25 it doesn't have functionality 02:55:25 but 02:55:27 (+ 1 2) sends the object 1 the message [$+ 2] 02:55:33 as does (1 + 2) 02:55:41 because 1 *can* be called 02:55:41 ok 02:56:03 :: (flr {(<= 3 _)} list) 02:56:06 An error: Atm instance has no attribute 'call' 02:56:10 :D 02:56:15 okay, this is a bit spooky 02:59:12 :: (-> 1 2) 02:59:18 f 02:59:37 ya thats spooky 02:59:47 where did the f come from? 03:00:26 :: ({(-> 1 2) 0} 1) 03:00:28 2 03:00:35 :: ({(-> 1 2) 0} 2) 03:00:37 0 03:01:36 what does "tst" do? 03:03:29 :: (= filter {(-> [f (: (@ h (tst f)) t)] (: h (filter f t))) (-> [f (: h t)] (filter f t)) []}) 03:03:31 <<<19575112>>> 03:04:14 :: (= qsort {(-> (: h t) (+ (qsort (filter {(< _ h)} t)) (+ [h] (qsort p(filter {(>= _ h)} t))))) []}) 03:04:16 An error: Unmatching parens @ row 1. 03:04:33 (= qsort {(-> (: h t) (+ (qsort (filter {(< _ h)} t)) (+ [h] (qsort (filter {(>= _ h)} t))))) []}) 03:04:38 :: (= qsort {(-> (: h t) (+ (qsort (filter {(< _ h)} t)) (+ [h] (qsort (filter {(>= _ h)} t))))) []}) 03:04:40 <<<19728784>>> 03:04:48 :: (qsort [1 2 3 4]) 03:04:51 + 03:04:58 lol 03:08:58 umm... it seems nothing works now. 03:09:09 which is kinda weird, because i haven't really changed anything. 03:09:19 adu: f is false. 03:09:49 adu: it should test whatever is matched with given function, and fail if it returns $f 03:10:16 but... nothing works now, so wtf. 03:12:19 ah. 03:12:25 i think i see what's going on... 03:12:46 i'll fix it by removing a feature no one knows even exists. 03:13:27 okay 03:13:33 let's try once more... 03:13:59 :: (= flr {(-> [p (: (@ h (tst p)) t)] (outn "a") (+ [h] (' p t))) (-> [p (: h t)] (outn "b") (' p t)) (outn "c") []})(flr {(< 3 _)} [1 2 3 4 5 ])(= nil {(-> [$pb :] $f) (-> $car $f) (-> $cdr $f) (-> [$setcar h] $f) (-> [$setcdr t] $f) (-> [$! n] $f) (-> $length 0)}) 03:14:08 An error: Atm instance has no attribute 'call' 03:14:14 err... 03:14:17 asd. 03:14:51 :: reload 03:14:51 ? 03:14:53 reload 03:15:14 :: (= flr {(-> [p (: (@ h (tst p)) t)] (outn "a") (+ [h] (' p t))) (-> [p (: h t)] (outn "b") (' p t)) (outn "c") []})(flr {(< 3 _)} [1 2 3 4 5 ])(= nil {(-> [$pb :] $f) (-> $car $f) (-> $cdr $f) (-> [$setcar h] $f) (-> [$setcdr t] $f) (-> [$! n] $f) (-> $length 0)}) 03:15:17 <<<19943992>>> 03:15:27 :: (= cons {(-> [h t] {(-> [$pb :] [h t]) (-> $car h) (-> $cdr t) (-> [$setcar h] h) (-> [$setcdr t] t) (-> [$! 0] h) (-> [$! n] (! t (- n 1))) (-> $length (+ 1 (length t)))})})(= list (cons 5 (cons 4 (cons 3 (cons 2 (cons 1 (cons 0 nil)))))))(= qs {(-> (: h t) (+ (qs (flr {(< _ h)} t)) (+ [h] (qs (flr {(>= _ h)} t))))) []})(qs list) 03:15:30 [0 1 2 3 4 5] 03:15:37 finally 03:16:12 :: (= cons {(-> [h t] {(-> [$pb :] [h t]) (-> $car h) (-> $cdr t) (-> [$setcar h] h) (-> [$setcdr t] t) (-> [$! 0] h) (-> [$! n] (! t (- n 1))) (-> $length (+ 1 (length t)))})})(= list [6 5 4 3 2 1 0])(= qs {(-> (: h t) (+ (qs (flr {(< _ h)} t)) (+ [h] (qs (flr {(>= _ h)} t))))) []})(qs list) 03:16:16 [0 1 2 3 4 5 6] 03:16:25 same thing, but primitive list 03:16:58 interface-based stuff is quite impressive when your own language supports it <3 03:17:31 okay, i can finally leave 03:17:33 :D 03:17:52 i'll leave the bot on, so if you wanna play, do so 03:21:09 adu: if you wanna read a larger example, http://www.vjn.fi/pb/p551616525.txt 03:21:14 the rational number class 03:21:20 anyway 03:21:20 sleep -> 03:31:21 I guess I can't learn oklotalk now 03:31:33 what is \ 03:56:51 -!- adu has quit ("Bye"). 05:03:03 -!- captluo has joined. 05:03:06 Brainfuck! 05:10:11 -!- Sgeo has quit (Remote closed the connection). 05:11:05 -!- oktabot has quit (Read error: 104 (Connection reset by peer)). 05:11:20 -!- oklopol has quit (Read error: 104 (Connection reset by peer)). 05:42:11 -!- Visitor-3CB98 has joined. 05:46:51 -!- oklopol has joined. 05:50:51 -!- GreaseMonkey has joined. 06:27:39 -!- RodgerTheGreat has quit. 06:55:14 -!- oklopol has quit (Connection timed out). 07:19:06 -!- calamari has quit ("Leaving"). 07:35:09 -!- oklopol has joined. 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 08:36:44 -!- iebnn has joined. 08:36:48 -!- captluo has quit (Read error: 104 (Connection reset by peer)). 08:48:26 -!- Iskr has joined. 09:40:05 -!- oklofok has joined. 09:44:24 -!- oklopol has quit (Read error: 113 (No route to host)). 09:52:34 -!- GreaseMonkey has quit ("zzzzz"). 10:16:19 -!- ehird has joined. 10:45:41 soooooo 11:55:23 Like, dude. 11:55:28 -!- Visitor-3CB98 has changed nick to Slereah. 12:10:04 -!- Corun has joined. 12:31:40 OMG 12:31:42 stupidfilter alpha is out 12:43:40 -!- Corun has quit ("This computer has gone to sleep"). 13:42:49 -!- Judofyr has quit (Read error: 104 (Connection reset by peer)). 13:43:07 -!- Judofyr has joined. 13:59:45 -!- Sgeo has joined. 13:59:47 -!- jix has joined. 14:07:05 I think I found a way to resolve my inner-recursion woes. 14:08:22 I will use the awesome U~ combinator, that I just made up. 14:08:33 It is called "Seņor Turingos Combinator" 14:10:07 Of the form ^x^y [A function of y that converts to i that performs possible outputs] ((([Some conditional, function of y](xx))i)[Some function of y]) 14:16:56 -!- Sgeo has quit ("Ex-Chat"). 14:26:18 \ 14:26:19 \ 14:28:54 Of the form ^x^y [A function of y that converts to i that performs possible outputs] ((([Some conditional, function of y](xx))i)[Some function of y]) 14:28:59 Damn 14:29:15 / 14:29:18 Thar 14:51:28 -!- timotiis has joined. 15:25:32 -!- timotiis has quit (Read error: 110 (Connection timed out)). 15:30:52 -!- timotiis has joined. 15:49:30 hmm 15:49:39 would building an Analytical Engine practical? 15:49:43 ^be 16:06:19 -!- timotiis has quit (Read error: 110 (Connection timed out)). 16:06:47 -!- UnrelatedToQaz has joined. 16:09:39 hello all 16:15:05 hi 16:20:56 do you like jonathan coulton? 16:33:07 -!- UnrelatedToQaz has quit ("ChatZilla 0.9.81 [Firefox 3.0b5/2008032620]"). 16:41:18 -!- RodgerTheGreat has joined. 16:51:26 -!- jix has quit ("CommandQ"). 16:51:53 -!- jix has joined. 17:13:31 -!- timotiis has joined. 17:24:52 -!- Sgeo[College] has joined. 17:25:34 oklofok: hello 17:25:50 Hi all 17:38:58 hello 17:44:21 -!- olsner has joined. 17:45:48 -!- timotiis has quit (Read error: 110 (Connection timed out)). 18:05:10 EVERYONE IS DEAAAD 18:08:22 ehird: no, it is you who is dead 18:11:27 olsner: no 18:18:34 Brainfuck 18:19:53 * Sgeo[College] is not dead 18:20:02 My brain is fucked 18:20:15 -!- timotiis has joined. 18:21:38 iebnn: hello, are you new here? 18:21:49 don't recognize your nick 18:22:40 Be back soonish 18:22:53 yes, im new 18:22:54 why? 18:23:18 iebnn: welcome! 18:23:23 now, escape while you can 18:24:07 -!- Sgeo[College] has quit ("http://www.mibbit.com ajax IRC Client"). 18:26:58 -!- Sgeo[College] has joined. 18:27:19 Back 18:28:47 -!- sekhmet has quit ("it's a reboot!1!"). 18:30:24 Bye all 18:32:08 -!- Sgeo[College] has quit ("http://www.mibbit.com ajax IRC Client"). 18:44:21 -!- captluo has joined. 18:45:13 -!- iebnn has quit (Read error: 104 (Connection reset by peer)). 18:46:52 -!- timotiis has quit (Read error: 110 (Connection timed out)). 18:49:23 -!- sekhmet has joined. 18:50:12 -!- timotiis has joined. 18:51:39 -!- jix has quit (Nick collision from services.). 18:51:49 -!- jix has joined. 18:52:43 oklofok: A 19:03:45 -!- captluo has quit. 20:31:22 -!- Iskr has quit ("Leaving"). 20:37:32 -!- ais523 has joined. 20:38:16 hello, ais523 20:38:26 hi ehird 20:41:25 -!- Judofyr has quit (Read error: 104 (Connection reset by peer)). 20:41:56 -!- Judofyr has joined. 20:55:25 -!- Tritonio__ has quit (Remote closed the connection). 20:59:12 * ais523 is trying to write an IRC client in INTERCAL 20:59:20 but I think there's a bug in CLC-INTERCAL's network connection code 20:59:38 ais523: ouch :) 20:59:42 oklofok: okoping 20:59:47 I can send information to the IRC server, but I can't get any information back 21:00:08 neither on freenode, or the local not-externally-accessible IRC server I use for testing 21:00:16 s/or/nor/ 21:01:02 -!- Tritonio_ has joined. 21:01:43 the strange thing is that the same code can get information back fine from an HTTP server 21:02:16 ais523: IRC's special chars, maybe? 21:02:19 Beats me. 21:02:31 actually, it may be a problem with my code 21:03:03 I just aimed the HTTP GET code at irc.freenode.net:6667, and got typical error messages back 21:04:08 incidentally, how's this for a filename: ickirc-c.rstclci.in 21:07:42 ais523: rstclci ... what is THAT 21:08:01 ehird: CLC-INTERCAL source with syscall, INTERNET, and threads extensions enabled 21:08:23 (n.b. INTERNET != Internet; it's the name for CLC-INTERCAL's INTERCAL NETworking extension) 21:09:04 Speaking of IRC, I am currently writing a semantic IRC framework. 21:09:21 Which basically boils down to it understanding the semantics of the protocol innately, instead of dumbly parsing & deparsing text. 21:09:33 e.g. 'join' messages can have callbacks, because it tracks queues of requests 21:10:07 ah, because most of the numerics are responses to something or other? 21:10:14 ais523: Yes 21:10:20 and likewise ERROR is a response to QUIT as well as being a standalone message 21:10:26 Exactly 21:10:41 Also, each type of message has its own class 21:10:47 PRIVMSG, PING, etc. 21:11:07 And a PRIVMSG #esoteric :foo has 'channel' and 'text' attributes, instead of relying on dumb indexing 21:11:13 Indeed it will even do WHOISes 21:11:18 and give you a simple object back 21:11:23 whereas the actual whois output is obscene 21:12:09 Also, instead of 'bot = server connection' 21:12:18 or even 'bot = one channel' like some things assume 21:12:23 it knows that a bot is spread across multiple networks 21:12:27 and a network has servers 21:13:04 the design of IRC is quite clever. Normally, you don't need to know that a network has servers unless you're a severl operator 21:13:14 because all the messages handle them more or less transparently 21:13:21 ais523: I mean load-balanced servers 21:13:25 like kubirck.freenode.net etc 21:13:29 ehird: so did I 21:13:35 ais523: All IRC clients have a concept of 'Networks' if you look in them 21:13:41 'cause they're a useful concept :-) 21:13:46 ehird: yes, definitely 21:13:52 knowing that a network has servers is less important 21:14:08 the main difference it makes to the end-user is whether you get an idle-time notification in a WHOIS 21:14:54 ais523: $CLIENT will also have servers in networks if you look closely 21:15:07 incidentally, ais523_ is still online, despite not responding to pings 21:15:25 it goes into an infinite loop rather than reading back from the IRC server 21:15:42 but if I give it an alphanumeric buffer that's too small, it errors, so /something/ strange is going on 21:17:25 -!- olsner has quit ("Leaving"). 21:17:31 i have always disliked the look of /italics/ 21:17:41 and i never use underlines, so i use _italics_ 21:17:44 /random, i know 21:18:29 in a man page, the .I directive writes an underline 21:18:49 and so presumably in nroff too, when formatting for display on a terminal 21:19:02 ais523: underlines are totally useless though 21:19:12 italics & bold cover everything i need to express 21:19:17 ehird: what about links? 21:19:35 ais523: i don't manually underline links 21:19:42 the reason that underlines fell out of favour was that nowadays people have become used to recognising them to indicate links 21:19:44 in my actual text, i have no need for underlines 21:19:52 even if links didn't exist 21:21:18 I was always taught to use them to indicate the final outcome of a mathematical problem or other such lengthy situations 21:21:31 e.g. if an exam question asked me what 2 + 2 was, I was supposed to answer _4_ 21:22:52 not sure of the merits of the idea except to save time for examiners, though 21:23:10 but I suppose underlines have deteriorated since the days of ALGOL 68 and typewriters 21:23:23 -!- RedDak has joined. 21:26:01 I prefer '4, F*CK YEAH' 21:26:07 Or some other notable exclamation 21:26:40 don't blame me if you get strange comments in your exam feedback, then 21:26:45 -!- RedDak has quit (Client Quit). 21:27:06 -!- RedDak has joined. 21:30:19 oklofok: ping 21:30:23 ais523: :D 21:30:34 '2 + 2 = THE ONE THE ONLY 4' 21:30:43 '2+ 2 = EFF OH YOU ARE' 21:30:49 '2+ 2 = FOOOOOURRRRRRRRRR' 21:32:08 2 + 2 = 1 + 3 = 0 + 4 = -1 + 5 = -2 + 6 = ... = -inf + inf = undefined 21:32:35 lament: but NaN = 4 in this case 21:32:56 the only reason that computers say that NaN is not equal to everything is that they can't be expected to figure out what value it actually has in that case 21:33:37 ais523: NaN != NaN in a lot of languages 21:33:42 because there are multiple NaNs 21:33:46 and NaN always creates a new one 21:33:50 JavaScript behaves like this 21:33:55 ehird: NaN != NaN in C even if it's the same NaN 21:34:06 and there are multiple NaNs, but they compare not equal even if they have the same payload 21:34:14 ais523: C has NaN? 21:34:14 Wow. 21:34:38 ehird: you need C99 to be able to express it portably, though, and even then it's optional, I think 21:34:48 but the rules for it are defined if it does exist 21:38:42 0./0. is not guaranteed to be NaN, for instance; it might be a SIGFPE instead (or presumably another implementation-defined signal) 21:47:33 ais523: I am tempted to implement your s/// correction thing 21:47:36 ais523: for IRC 21:47:42 ais523: also star-correction 21:47:48 uses leventhsethisen distance or whatever 21:47:51 to determine which to change 21:47:57 *Levenstein 21:48:03 levenshtein actually 21:48:04 ha 21:48:40 ehird: I doubt it could handle that, two lines up and in someone else's comment, it would need to know the context of the conversation to even think of looking there 21:48:47 and looking there as a matter of course would be stupid 21:49:36 ais523: no, it would just scan the N latest messages 21:49:38 and choose the one most likely 21:49:46 even other people's? 21:50:01 I've been known to correct my own most recent message after tens of minutes, with lots of intervening comments 21:50:19 but it's pretty silly, not to mention a security risk, to correct other people's 21:53:02 -!- RedDak has quit (Read error: 110 (Connection timed out)). 21:53:15 -!- Dagide has joined. 21:53:29 ais523: only correct as in 'repeat' 21:53:40 I know 21:53:50 so that avoids the security risk, at least 21:54:00 you could have a bot doing that sort of correction, I suppose 21:54:12 what about the times when I typo one of my own corrections and correct that? 21:54:27 I often do s/a/b followed by s/$/\// when I realised I missed off the final slash by mistake 21:55:17 ais523: it'd retry any stuff it corrects for correction 21:55:19 if you see what i mean 21:55:26 yes 21:55:33 ais523: incidentally, do you know about #xkcd-signals' ROBOT9000? 21:55:41 the solution is not too hard to see, I was just making sure you knew the problem 21:55:43 ehird: no 21:55:59 ais523: Basically, if you say something that has already been said before -- ever -- it mutes you. 21:56:07 The mutes get progressively greater the more you do it but gradually decrease. 21:56:22 So, memes get killed off extremely quickly and only original thought is left. 21:56:26 It's an interesting idea. 21:56:33 what do you mean by a mute, here? it devoices you, and it's a moderated channel? 21:56:51 ais523: I think the main implementation +b's you and then -b's you after the timeout 21:57:03 But, same thing in this case 21:57:25 ais523: Full scoop: http://blag.xkcd.com/2008/01/14/robot9000-and-xkcd-signal-attacking-noise-in-chat/ 21:57:25 But 21:57:26 http://media.peeron.com/tmp/ROBOT9000.html 21:57:26 it would be more interesting to see it done with voicing 21:57:28 there's the source 21:57:30 in Perl 21:57:35 so you should have no problem figuring it out 21:57:47 so that the little V signs, or whatever the client uses, turn on and off as people accidentally repeat 21:57:58 but you'd have to be really careful not to say things like 'yes' or 'no' 21:58:09 ais523: Well, the idea is that you justify more than 'yes' or 'no' 21:58:14 You go 'Yes, the system is configured so that blah.' 21:58:25 or maybe just get your client to a ppend a sequence number to the end of everything you said [1] 21:58:27 Not perfect for all cases surely. But interesting 21:58:35 ais523: as for that idea, 21:58:39 it'll just get you banned 21:58:49 Just like all bad faith is dealt with in IRC channels 21:59:00 hmm... maybe you could do it with whitespace so people didn't notice 21:59:18 but it's probably not fair to try to work around that sort of restriction 21:59:25 ais523: They would notice when you say the same thing twice 21:59:34 depends on what that thing was 21:59:35 But anyway 21:59:40 My idea 21:59:47 is a blend of Utu (you may have heard of it) and that 22:00:08 If enough people 'hate' you (that's an actual command), it mutes you 22:00:10 wow, that code you linked doesn't look like Perl at all, someone's tried to write it like C 22:00:11 That's the *basic* idea 22:00:18 it's uncomfortable seeing Perl that readable 22:00:19 http://savingtheinternetwithhate.com/design.html 22:00:25 But basically, doing the above but with an irc bot. 22:00:39 ais523: Network::IRC and all that are object-oriented, clean, callback-based frameworks. 22:00:41 Unsuprising 22:01:18 Most 'modern' perl looks like that 22:01:21 in my experience 22:02:05 that isn't modern perl 22:02:16 they call procedures using the & sigil, and that's been deprecated for ages 22:02:36 so whoever wrote that is used to old-fashioned Perl 22:07:29 wow, robot9000 rules 22:07:48 very clever 22:08:11 ah, they thought of the trailing-whitespace thing 22:08:30 lament: put it in #esoteric! as an experiment? ;) 22:08:36 xkcd fed two years of logs into it 22:08:43 but the logs we have take back to 2004 22:08:44 they also remove punctuation and all repeated characters 22:08:48 that's gotta be interesting, no? 22:08:55 they should probably do Porter stemming as well, just for the fun of it 22:08:57 or i can do it if allowed ;) 22:08:58 we don't have any such issues, though 22:09:04 lament: yes, but it would be interesting 22:09:15 it might be interesting to set up a bot to report when a user would be banned, rather than actually doing it 22:09:26 so we could see what the false-positive rate would be like 22:09:27 that just leads to more noise though 22:09:30 but yeah 22:09:34 lament: this is just as a temp experiment 22:09:36 but yeah, i'll get on it 22:09:36 heh 22:09:41 ehird: can you just run it on the logs to see which lines would it match? 22:09:43 ais523: seen StupidFilter? 22:09:48 lament: no, it works there-and-then 22:09:51 http://stupidfilter.org 22:09:53 maybe report in a second channel, so that people didn't have to look at it if they didn't want to 22:09:56 they released an alpha recently 22:09:59 but its very slooooww 22:10:00 ehird: I hadn't seen it 22:10:06 ehird: i'm sure it's easy to hack to work in batch mode 22:10:35 and if all it does is line matching after trimming whitespace, you don't need the bot 22:10:48 just write a program to check that 22:10:56 lament: you don't even need to write a program 22:11:03 some combination of sort and uniq would work 22:11:07 right 22:11:11 but it also filters out nicks, smilies, punctuation, etc 22:11:22 so 22:11:34 throw out everything except alphabetic chars 22:11:40 also case and control characters 22:11:43 throw out spaces even 22:11:50 they can't contribute to false positives much 22:11:51 lament: no, do Porter stemming first 22:12:00 oh, right 22:12:07 so that you can't just add -ing on the end of a word to create a different line 22:12:14 -!- ehird has changed nick to ROBOT9000. 22:12:17 -!- ROBOT9000 has changed nick to ROBOT9001. 22:12:17 Robot9000 doesn't do that, by the way 22:12:39 anyway, it seems in half an hour you could get some good estimates 22:12:50 -!- ROBOT9001 has changed nick to ehird. 22:13:05 # if the channel is quiet for too long (longer than fortune_time, in seconds), 22:13:05 # print the output of the fortune_command. Remove to disable this feature. 22:13:07 that's brilliant 22:13:20 aha 22:13:22 ais523: it IS based on voice 22:13:32 so that unfortunately means it needs ops 22:13:33 what a shame 22:13:35 wait 22:13:36 it would for +b 22:13:53 it's based on both voice and ban as far as I can tell 22:14:08 at least, the code is capable of doing both of those 22:14:41 anyway, I was going to suggest running it as a simulation rather than actually banning 22:15:01 ais523: yeah, i will 22:15:03 just setting it up first 22:15:04 my $dbh = DBI->connect( "DBI:mysql:database=$config->{db_name}", 22:15:04 $config->{db_user}, $config->{db_pass} ) 22:15:08 what should that be for sqlite? 22:15:17 i think simulating it on the logs would be more informative 22:15:23 (by finding matching lines in the logs) 22:15:42 you'd find out everything the bot would have done in the past ~3 years 22:16:11 oh, it also bans and devoices people who change nick too often 22:16:17 and blocks newly-arriving users for a minute 22:19:55 hmm 22:19:58 it comes with nothing to import logs 22:19:59 damnit. 22:20:57 ehird: just run through each line calling the callback for someone saying something 22:21:40 ais523: Non-trivial. Network::IRC isn't simple. 22:21:52 & the logs are not in raw format 22:22:29 ehird: just call irc_on_public 22:22:34 rather than messing with Network::IRC at all 22:22:49 ais523: 22:22:49 my ( $self, $event ) = @_; 22:22:49 my ( $nick, $userhost ) = ( $event->nick, $event->userhost ); 22:22:49 my ($msg) = ( $event->args ); 22:22:58 from irc_on_public 22:23:04 that's not too complicated a call to manage 22:23:09 it would look something like this: 22:23:15 ais523: Add that to parsing the logs... 22:23:24 However, I will download all the logs and munge them together 22:23:31 Oh wait! 22:23:42 ais523: Your idea sucks. It will retroactively punish 22:23:50 So, e.g., most people in here will have mute times off the csale 22:23:51 oh wait 22:23:54 i can fix that myself 22:23:54 heh 22:23:55 :D 22:23:56 okay 22:24:00 time to brush up on my wget-fu 22:24:14 irc_on_public($self,(nick => "somenick", userhost => "somefakeuserhost", args => $msg)) 22:24:43 yeah, and where to get the self from? 22:25:03 ais523: Also, it interacts with irc: it will try to voice & kick etc 22:25:06 causing havock 22:25:07 ehird: it only cares about it when kicking 22:25:07 *havok 22:25:21 so just comment all the lines that use it and pass in undef or something 22:25:33 that'll do for filling the database, then you can comment them back in again 22:25:46 or if you're feeling clever, make it skip all those lines if $self is undef 22:26:17 okay then 22:26:30 i'll make it beep when it was going to kick someone 22:26:34 interactive lightshow :D 22:27:11 actually, my semantic irc framework would rock for this 22:27:14 just give it a dummy irc server 22:27:16 filled with the logs 22:27:19 and let it go 22:27:49 I have to go, now, anyway. Bye! 22:27:51 -!- ais523 has quit ("(1) DO COME FROM ".2~.2"~#1 WHILE :1 <- "'?.1$.2'~'"':1/.1$.2'~#0"$#65535'"$"'"'&.1$.2'~'#0$#65535'"$#0'~#32767$#1""). 22:28:23 -!- Dagide has quit (Remote closed the connection). 22:29:21 lament: bespin.org is FEELING MY PAIN 22:29:29 KILL KILL KILL, YOUR SERVER MUST DIE 22:31:05 It's on to 2006 already. 22:31:06 Wheee... 22:35:08 Deewiant, there? 22:35:52 Deewiant, the HRTI test of mycology adds a total of over 0.030 seconds 22:36:14 Deewiant, so far that is the single slowest fingerprint to test 22:39:13 okay 22:39:15 all logs downloaded 22:39:29 515687 lines 22:43:25 -!- jix has quit ("CommandQ"). 22:43:33 hm 22:43:43 lament: I have 426682 lines of logs processed ready 22:44:33 o wait 22:44:34 if (@ARGV) { # we're only loading an existing log file, not actually running 22:44:34 print "Loading log files...\n"; 22:44:34 &load_log; 22:44:34 } 22:44:37 it already can do it 22:44:37 lulz 22:49:39 lament: So since ROBOT9000 already supports loading logfiles, I could just quickly load it up now and then put it in here as a quick experiment. 22:49:40 Thoughts? 22:52:50 it would take us weeks to reach any interesting conclusions; we don't talk much 22:53:16 so simulating its actions in the logs is far more informative 22:53:23 but feel free 22:53:45 as long as it doesn't actually hurt anybody :) 22:54:06 lament: well, that's the problem -- it won't run without ops 22:54:06 :/ 22:54:15 (you just said wheeee, okay, hm and lulz in the past 15 minutes - you would be very muted now) 22:54:21 and yes 22:54:22 i very would 22:54:23 then fix it 22:54:27 not just any kind of muted, but VERY muted 22:54:30 it's open source 22:54:35 lament: i don't think i can fix it, the whole architechture is based on it 22:55:17 why don't you just search for duplicates in the log files? :) 22:55:41 i bet most of the duplicates are short things like "okay" 22:55:42 lament: because that's nothing like what robot9000 does 22:56:00 can't you just steal its text-processing algorithm 22:56:08 presumably it's a separate procedure 22:56:11 you don't need the rest of the bot 22:56:28 lament: no, its not a seperate procedure 22:56:31 hmm 22:56:36 i'm going to load the logs into it 22:56:38 and see what happens 22:56:42 wow, this bot sounds more and more like a perl program :) 22:56:49 lament: well, it is perl 22:56:49 :) 22:58:46 lament: wow 22:58:46 zsh: bus error perl ROBOT9000.pl ROBOT9000.yml logs/combined.txt 23:00:32 and you want that thing to ban people? :) 23:01:11 lament: hehe, well it is processing them now 23:01:14 what could possibly go wrong! 23:01:22 :D 23:01:22 wow 23:01:27 this is a lot of stuff 23:01:27 :P 23:01:47 I'll just let it do its thing.. 23:03:05 lament: it keeps recording empty lines. heh! 23:03:15 Still, if xkcd are using it, it must work pretty well 23:06:31 lament: Sheesh, people talk about a lot of crap in #esoteric. 23:06:42 I agree 23:06:56 it's pretty good now compared to what it used to be at one point 23:07:22 the value is an anti-alias factor setting it to 1 disables the anti-aliasing feature this makes the output look bad but setting it too high makes the trace take a lot more time to complete 23:07:25 that just scrolled past 23:07:28 (we actually talk about programming stuff once in a while as opposed to just talking about manga and social incompetence) 23:07:32 (Incidentally, I would have just been muted, ironically) 23:12:06 lament: sheehs, this is such a waste of cpu time 23:12:07 :D 23:22:28 -!- oerjan has joined. 23:22:36 lament: Sti-i-i-hillll going 23:25:19 -!- oerjan has quit (Client Quit). 23:27:22 -!- oerjan has joined. 23:42:01 lament: still going 23:49:40 i wait with bated breath 23:51:36 * oerjan is surprised to learn that "bated" is the correct spelling 23:55:40 process 3 killed 23:55:40 time for new and improved garbage 23:55:40 oh and that is the previous newline 23:55:40 heh 23:55:42 latest lines