00:56 (quit) mwolfe: Remote host closed the connection 01:15 (join) jonrafkind 02:16 (quit) coyo: Ping timeout: 260 seconds 02:34 (quit) jonrafkind: Ping timeout: 240 seconds 03:28 (join) Nanakhiel 03:28 (quit) Lajla: Read error: Connection reset by peer 03:31 (quit) lucian: Ping timeout: 240 seconds 05:56 (join) masm 05:58 (join) tony_ 06:29 (join) misterncw 06:40 (part) misterncw: "Leaving..." 06:48 (quit) tony_: Ping timeout: 240 seconds 08:04 (join) MayDaniel 08:38 (quit) MayDaniel: Read error: Connection reset by peer 08:43 (join) misterm 08:58 (quit) _danb_: Ping timeout: 240 seconds 09:03 (nick) Nanakhiel -> B-ratius 09:53 (join) corruptmemory 10:12 (quit) jasond: Ping timeout: 240 seconds 10:31 (join) misterncw 10:43 (join) tony_ 10:58 (join) mwilber 10:58 (join) PLT_Notify 10:58 PLT_Notify: racket: master Robby Findler * 50e9aec (1 files in 1 dirs): catch more exceptions in the module lexer when it calls read-language - http://bit.ly/hmtZfh 10:58 (part) PLT_Notify 11:00 mwilber: Hello! Is there a way to define a c-struct that contains an array of ints in ffi/unsafe? 11:00 samth: mwilber, unfortunately not 11:01 samth: you can use a nested struct of the appropriate size, though 11:04 mwilber: Oh. This struct has several char[8192] in it, the overhead might be costly 11:04 mwilber: Perhaps I could just write a small C wrapper around my library and FFI that? 11:05 samth: that certainly would work as well 11:06 mwilber: Is this something we could use in the FFI library? I could try and take a crack at it... 11:13 samth: probably 11:13 samth: eli would be the person who would know how to do that 11:23 (quit) misterncw: Quit: Leaving... 11:26 (quit) misterm: Read error: Operation timed out 11:27 (join) anRch 12:00 (part) shofetim: "ERC Version 5.3 (IRC client for Emacs)" 12:09 (quit) anRch: Quit: anRch 12:20 (join) anRch 12:21 eli: mwilber: What's missing is a way to make an arbitrary type given its size and alignment. I don't know of a way to do with libffi, though I think that it is possible. 12:24 (join) MayDaniel 12:27 (join) jonrafkind 12:30 em: it seems like quite often i want to use display (or something) to output some results, but im worried about if im using side effects and if that's bad Racket programming. But im not sure what to do. 12:30 em: like, what i really want is it to recurse but it has to display something that has changed each time it loops. 12:30 em: but i can't call the function again if im calling a display. 12:31 em: im not sure if that's okay or not or if it's okay to use (begin..) in those situations or what. 12:31 jonrafkind: dont worry about using side effects 12:33 em: i guess one way i work around it is you can just keep collecting everything in a bigger and bigger list and then try to parse it out at the very end? 12:33 (join) PLT_Notify 12:33 PLT_Notify: racket: master Robby Findler * 5cef41e (2 files in 2 dirs): adjust and/c so that it mentions the particular predicate (flat contract) that failed in the case that all its arguments are flat contracts - http://bit.ly/hEVEji 12:33 (part) PLT_Notify 12:37 tony_: em: I didn't understand your concern clearly, but it sounds like a named let would serve you best. 12:37 B-ratius: em, do you know '100 bottles of beer on the wall'? 12:38 B-ratius: Or 99, rather 12:39 tony_: B-ratius: I'm guessing (let loop ((n 99)) (when (not (zero? n)) (printf "~a bottles of beer on the wall~n" n) (loop (sub1 n)))) 12:39 B-ratius: Well, yeah, along those lines. 12:40 B-ratius: But what I'm saying is that there are two ways to do it. 12:40 B-ratius: Yours, or first composing the entire to be printed string, and then printing it. 12:40 tony_: ... yes, but only one uses constant space ;-) 12:43 (quit) anRch: Quit: anRch 12:45 (quit) MayDaniel: Read error: Connection reset by peer 13:02 em: !paste 13:03 em: ~paste 13:03 em: rudy how do i paste? 13:03 jonrafkind: use t3h google 13:03 jonrafkind: http://paste.lisp.org/ 13:04 B-ratius: How do I use t3h google? 13:06 em: This is how I did it but it seems very cludgy -- http://paste.lisp.org/display/119554 13:06 (quit) tony_: Quit: Ex-Chat 13:07 (part) MK_FG: "o//" 13:16 (join) lucian 13:19 (join) saint_cypher 13:28 (join) PLT_Notify 13:28 PLT_Notify: racket: master Kevin Tew * 160a5bd (1 files in 1 dirs): parallel-do cleanup - http://bit.ly/gclaL3 13:28 (part) PLT_Notify 13:52 jonrafkind: eli, ping 14:11 eli: jonrafkind: ? 14:11 (join) anRch 14:11 jonrafkind: rudybot: (define-syntax-rule (foo x) x) 14:11 rudybot: jonrafkind: Done. 14:11 jonrafkind: rudybot: foo 14:11 rudybot: jonrafkind: error: eval:1:0: foo: bad syntax in: foo 14:11 (join) tony_ 14:11 jonrafkind: uhh 14:12 eli: ? 14:12 jonrafkind: -> (define-syntax-rule (foo x) x) 14:12 jonrafkind: -> foo 14:12 jonrafkind: car: expects argument of type ; given 'foo 14:12 eli: ! 14:12 jonrafkind: i was trying to track this down but got confused in the implementation 14:12 eli: ... 14:12 jonrafkind: ////////// 14:13 jonrafkind: &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 14:13 jonrafkind: 444444444444444444444 14:13 eli: /. 14:13 jonrafkind: ~ 14:13 jonrafkind: = 14:13 eli: Isn't it obvious? 14:13 jonrafkind: ...-..-----.......-.-.-.----...-.-.--- 14:13 jonrafkind: i dunno maybe im tired 14:13 eli: I mean, isn't the source of the problem obvious? 14:13 jonrafkind: yes you cant just run foo 14:13 jonrafkind: im saying the error message is goofy 14:14 eli: I know -- I'm asking whether the cause of the bogus `car' is obvious. 14:14 eli: The only thing that changed is the stuff that you added. 14:15 eli: And that code has a single `car'. 14:15 jonrafkind: oh (car sexpr) aha! 14:15 eli: ... 14:15 jonrafkind: my kingdom for line numbers in racket error messages! 14:15 eli goes back to punctuations. 14:18 eli: jonrafkind: http://tmp.barzilay.org/x 14:18 eli: That should fix it. 14:20 (join) lucian_ 14:21 jonrafkind: yea 14:22 eli: jonrafkind: Don't commit, I have a better fix. 14:22 (quit) lucian: Ping timeout: 240 seconds 14:22 jonrafkind: ok, go ahead 14:23 (join) lucian 14:25 (quit) lucian_: Ping timeout: 245 seconds 14:27 eli: jonrafkind: There. 14:27 (join) PLT_Notify 14:27 PLT_Notify: racket: master Eli Barzilay * 4b1960e (1 files in 1 dirs): Don't assume that the user sexpr is a list. ... - http://bit.ly/dHzSM5 14:27 (part) PLT_Notify 14:28 jonrafkind: ok 14:28 eli: jonrafkind: It throws a different error for identifiers, since otherwise you get a stupid looking error message like "foo: foo did not match pattern (foo x) in foo" 14:28 eli: I'll leave the job of writing tests for you, in case you have something. 14:28 jonrafkind: what does it say now 14:29 eli: Right now it says: link: module mismatch, probably from old bytecode whose dependencies have changed 14:29 jonrafkind: nice!! 14:29 (quit) lucian: Ping timeout: 240 seconds 14:29 eli: Much better, right? 14:30 jonrafkind: much 14:31 eli: jonrafkind: And now it has an even better error message: A problem has been detected and windows has been shut down to prevent damage to your computer 14:32 jonrafkind: you should probably sit in the corner till all this blows over 14:39 eli: jonrafkind: "foo: must be used in a pattern (foo x) in: foo" 14:39 jonrafkind: good enough 14:40 (join) lucian 14:44 (quit) tony_: Ping timeout: 240 seconds 14:44 (join) _danb_ 14:44 (quit) B-ratius: Ping timeout: 260 seconds 14:45 (join) Lajla 14:46 (quit) lucian: Ping timeout: 240 seconds 14:51 jonrafkind: does the racket class system have abstract methods? 14:52 samth: no 14:57 Lajla: What's an abstract method. 14:58 (join) PLT_Notify 14:58 PLT_Notify: racket: release Matthew Flatt * 0707a3f (1 files in 1 dirs): win32: fix parent HWND of canvas% ... 14:58 PLT_Notify: racket: release Matthew Flatt * aeedcef (1 files in 1 dirs): fix s:home keybinding ... 14:58 PLT_Notify: racket: release commits 98dd05c...aeedcef - http://bit.ly/eoMDDQ 14:58 (part) PLT_Notify 14:59 samth: eli, ping 15:00 jonrafkind: an abstract method is one that is unimplemented in a base class and must be implemented in a derived class 15:00 Lajla: jonrafkind, so basically, it's a placeholder? 15:00 jonrafkind: yea 15:00 Lajla: Like, you reserve a message, but don't yet give it a method. 15:00 jonrafkind: right 15:01 Lajla: Sounds spiffy. 15:01 jonrafkind: have you never used java or c++? 15:01 Lajla: So like, the base class then is not initizialible or something? 15:01 Lajla: jonrafkind, no. 15:01 Lajla: Well, define 'used'. 15:01 Lajla: I can code some silly snippets in it and can read it some-what. 15:01 Lajla: But not really for anything practical. 15:01 jonrafkind: right, you cannot instantiate a class with abstract methods in it 15:02 Lajla: I meant instantiate, no idea where initizible game from. 15:10 jonrafkind: funny that robby found the same bug as me very recently 15:13 (join) lucian 15:13 Lajla: Where's your static type system saving you now eh. 15:18 (join) lucian_ 15:19 (quit) lucian: Ping timeout: 240 seconds 15:21 (join) MayDaniel 15:25 (part) mwilber 15:32 (quit) anRch: Quit: anRch 15:35 (quit) lucian_: Ping timeout: 240 seconds 15:39 em: what is the reasoning behind having lists be immutable? 15:40 Lajla: em, basically hat you don't screw them up in maps. 15:40 em: when a list *is* immutable does an entry change in a way that is somehow more efficient than the most naive way to change an entry by taking an immutable list and creating a new list with a recursive processess involving cons? 15:40 Lajla: r5rs allows (map (lambda (x) (set-cdr! some-list x)) some-list) as an example. 15:42 Lajla: The Lisp property of that a datum can be a list at one point, and no longer at anohter point is pretty awkward though. 15:42 clklein: em: http://blog.racket-lang.org/2007/11/getting-rid-of-set-car-and-set-cdr.html 15:42 rudybot: http://tinyurl.com/2bws4fr 15:45 em: map could be a useful way to quickly change a list I guess. 15:46 em: not that you get the same list with a new entry but it could create a new list which is everywhere the same except where you want it different. 15:46 em: but does that do so more efficiently than some naive combination of cons and cdr and recursion? 15:50 (quit) martinhex: Read error: Connection reset by peer 15:51 (join) jao 15:54 (quit) MayDaniel: Read error: Connection reset by peer 16:02 (join) martinhex 16:03 (join) lucian 16:08 (join) lucian_ 16:27 em: is it possible for an algorithm itself to be 'fast enough' but the extra time it takes for the REPL to display the result is slow? 16:28 em: I just made this procedure: 16:28 em: (define (dicelist sides rolls) 16:28 em: (let ([outcome (+ 1 (random sides))]) 16:28 em: (if (= rolls 0) '() 16:28 em: (cons outcome (dicelist sides (- rolls 1)))))) 16:28 em: And then I did (dicelist 6 1000000) 16:29 em: It's still outputting the result even now. Is there something inherently inefficient about my procedure or is it just a slow outputter in the repl? 16:34 em: looks like it's just a slow outputter in the repl because if I do (car (reverse (dicelist 6 1000000))) that returns an answer relatively quickly. 16:34 em: so in other words it produces the list internally much faster than it exhibits the list externally. 16:35 Lajla: em, the list is quite long? 16:36 Lajla: Is the list 1 000 000 entries long? 16:36 em: yes 16:39 Lajla: That's a million. 16:39 Lajla: They contain sentenes right? 16:39 em: Lajla: why when I do it for 10 000 000 rolls it says "interactions disabled" and asks for more memory. Is this really such a long list? 16:40 Lajla: That's 10 million. 16:40 em: I thought we are working with computers here. They are supposed to handle these things. 16:40 em: I know what number it is. :) 16:40 Lajla: 10 million! 16:40 em: so? 16:40 Lajla: Even if it could output that 16:40 Lajla: have you ever seen 10 million lines after each other. 16:40 em: I dont want to look at it, I just want it to think about it. 16:40 Lajla: I don't think there are that much in the encycopædia britannica. 16:41 Lajla: em, well, but to answer your problem, the output is defnitely the bottleneck here. 16:41 em: Ive done (car (reverse (dicelist 6 10000000))) 16:41 Lajla: Yeah. 16:41 Lajla: But that's not outputting 10 million sentences. 16:41 em: that way it has to come up with the list, then reverse it, and then tell me the first element. 16:41 em: but it chokes like it ran out of memory. 16:41 Lajla: Yes, but not outpit 10 million sentences. 16:41 Lajla: 10 million! 16:42 em: It's a computer. 16:42 Lajla: It's also 10 million. 16:42 em: I thought 10 million should be no big deal for a computer. 16:43 Lajla: Say you have a 10 ghz processor 16:43 Lajla: That is 10 000 million cycles per second. 16:43 em: This is like the people who get a new computer at the office and decide to give it a test: "What is 3 billion plus 2 billion?" .... "5 billion" ... AMAZING! 16:43 Lajla: That is one operation 16:43 Lajla: Not 10 million operations 16:43 Lajla: Adding large numbers it not more expensive than adding small numbers. 16:43 em: I have an i3 16:44 Lajla: I think you mistake 'working with large numbers' and 'doing a lot of things'. 16:44 em: if i had an i5 or an i7 then I could roll ten million dice? 16:44 Lajla: You can already do. 16:44 Lajla: Just not output 10 million sentences. 16:50 (quit) saint_cypher: Ping timeout: 240 seconds 16:50 (join) tony_ 16:52 (join) saint_cypher 16:53 em: Lajla: i just gave it unlimited memory and it did finish, but it took all this time. 16:53 Lajla: I would take my time to print 10 million sentences. 16:53 em: well this is a somewhat different program. 16:55 em: Lajla: what is the order of growth for the builtin 'reverse' procedure? 16:57 Lajla: em, I don't know, I do know it can be implemented in constant space 16:57 em: that's surprising. 16:58 em: i thought things like reverse would always have to be proportional to the length of the lists. 16:58 Lajla: (define (reverse l) (let rec ((acc '()) (stack l)) (if (null? stack) acc (rec (cons (car stack) acc) (cdr stack)))) 16:58 Lajla: Well, in time, not in space. 16:58 Lajla: Ehhh 16:59 Lajla: I mean with space by the way not as a function on the length of the list. 16:59 Lajla: It of course has to save the original list anyway, so. 16:59 Lajla: But the number of active calls stays constant. 16:59 Lajla: What I'm saying is that reverse can be implemented tail-recursively. 17:11 (quit) lucian: Quit: Bye 17:11 (nick) lucian_ -> lucian 17:18 em: I just made an iterative version of my procedure that worked 74 times faster than the recursive one. 17:22 em: why does it always return long lists as a vertical list rather than horizontally? 17:24 tony_: em: could you post your code? 17:25 tony_: more to the point: I don't believe there's such a thing as a "vertical" or "horizontal" list. 17:25 em: my procedure returns a list but rather than just showing the list it puts each new element of the list on a new line. 17:26 em: if it would just output the list perhaps it wouldn't take so long to show the list. 17:26 tony_: does the list contain strings that end in newlines? 17:26 em: no just numbers. 17:26 tony_: how long is the list 17:28 em: here's the program -- http://paste.lisp.org/display/119566 17:28 tony_: ok, but how long is the list 17:29 em: try running that with (dicelist-i 6 10000000) 17:29 em: it just takes it forever to simply show the list in the bottom part of drracket. I think it might not take so long if it didn't put each number on a new line. 17:30 tony_: well I'm running it in mzscheme and it's still working. 17:30 tony_: Meanwhile, a few points 17:30 em: ok 17:31 tony_: your dicelist-iter should be defined internally to (ie, inside dicelist-i) 17:31 tony_: Second, you probably want to use build-list, which takes a lambda that produces each element of the list. 17:32 em: oh i had not heard of that. That is faster than this algorithm using cons? 17:32 tony_: Third, if you really want to stick to iteration, it's better to use a named let, like the one I showed earlier, and like the one Lajla wrote at 16:58. 17:32 em: how come? How does a named let make it better? 17:33 tony_: A named let is a more concise and readable way to iterate. 17:34 tony_: Fourth, your 'if' sexp is not indented properly and hence looks like a one-armed if (which I don't encourage in Scheme). 17:34 tony_: Fifth, my mzscheme run is now printing the result, and it too prints vertically. 17:35 tony_: I don't know why this is happening, but it doesn't really matter, as printing a newline should not take significantly longer than printing a space. 17:35 cpach: what is a one-armed if? 17:35 em: it seems like a shame it takes so long to print at all. 17:36 em: tony_: that's a lot of great feedback, thanks! 17:36 tony_: cpach: the Scheme standard permits if statements that evaluate to if the test evaluates to false. 17:36 tony_: In Scheme, it's better to make ifs two-armed and to use when for the one-armed conditional. 17:37 cpach: ah. 17:38 em: I thought that's how all ifs worked! 17:38 tony_: em: the point is that you need to be more meticulous---obsessive, even---about indentation. 17:38 em: (if (true?) (do this) (otherwise do that)) 17:38 em: i thought that's how it works 17:38 tony_: em: that's a proper two-armed if. 17:38 em: oh okay good 17:38 tony_: rudybot: (if #t 3) 17:38 rudybot: tony_: your sandbox is ready 17:38 rudybot: tony_: error: eval:1:0: if: bad syntax (must have an "else" expression) in: (if #t 3) 17:39 tony_: Ah, I see Racket has deviated from the standard again :-) 17:39 cpach: yupp :) 17:39 cpach: it works in chicken iirc 17:39 tony_: ?? 17:39 cpach: i think (if #t 3) would yield 3 in chicken scheme 17:39 em: rudybot: (if #t 3 4) 17:39 rudybot: em: your sandbox is ready 17:39 rudybot: em: ; Value: 3 17:40 tony_: Never heard of chicken scheme. Appears to be old (R5RS). 17:40 em: rudybot: (if #t #f #t) 17:40 rudybot: em: ; Value: #f 17:41 em: tony_: as it prints out the list, is it just doing one element at a time, or a whole bunch at a time? I don't think it should have to take so long to output a long list, should it? 17:42 em: mine is still outputting all this while. 17:42 tony_: em: so is mine. 17:42 cpach: tony_: yeah, chicken doesn't follow r6rs. 17:42 tony_: I/O is usually buffered, but that doesn't make much difference here. Such a long list will always take a long time. 17:42 tony_: The question is: Why must you store so many dice rolls? 17:43 em: i want to roll a lot of dice and see if there is a uniform distribution of results. 17:43 tony_: You don't need that many rolls to collect good statistics. 17:43 em: also im just new to programming, I want to roll a lot of dice. 17:44 em: pretty much a person will never be satisfied and will always try it again but this time with another 0. 17:44 em: eventually I guess the computer can't do it. 17:44 em: lousy computer. 17:44 tony_: There are 36 bins to this histogram, and an average of 1000 per bin should give you sufficiently good results. 17:45 tony_: You're missing the point, which is that such a large number of rolls is already past the point of diminishing returns. 17:45 em: where are you getting 36 bins from? 17:45 tony_: Oh, I assumed you're rolling two dice each time. 17:45 tony_ looks at the code again. 17:45 tony_: I see sides is a parameter. 17:46 em: well not really becaues when you look at the results the percent frequencies haven't converged even to the hundredths place when you roll 1000000 times. 17:46 tony_: So what's the point of this exercise? 17:46 tony_: And who assigned it to you? ;-) 17:47 em: (1) Racket is my first programming language, and I'm learning Racket. (2) I want to see if I could trust (random k) to produce uniform distributions, and (3) I'm not in school, I'm just learning Racket for fun. 17:48 em: So I assigned it to myself. 17:48 em: :) 17:48 eli: samth: ? 17:48 tony_: Great! So this obviously devolves into a test of random's goodness. 17:49 tony_: ...and I don't know much about that. 17:50 em: what i showed on that pastebin was an attempt to make a faster dicelist than i made in this -- http://paste.lisp.org/display/119554 17:50 em: that program actually returns the percentages. 17:51 em: when i did it for (roll 6 10000000) ; which means roll a six-sided die 10 000 000 times 17:51 tony_: I'm afraid it's difficult to read. Allow me to give you some tips. :-) 17:51 em: sure! please do! 17:51 tony_: Instead of a list of strings in firstfrequency, use format. 17:51 tony_: Or printf. 17:52 tony_: Second: use shorter variables names, in some cases much shorter. 17:52 tony_: Third: frequency again indents the if in such a way as to obscure the true branch (true arm). 17:52 tony_: 4: arguments that are lists are usually simply called 'ls' 17:53 tony_: 4a: howlong should be renamed to 'n' 17:53 em: just for what it's worth though, the results were http://paste.lisp.org/display/119568 17:54 em: that's a lot of dice, and doesn't it seem like the percentages should be closer than that? 17:54 em: if it were really uniform? 17:54 tony_: 5: Your comments are great. 17:54 samth: eli, the change to have the mzscheme version be '(510) broke things 17:54 em: oh those are great tips. 17:54 eli: samth: Define things. 17:55 tony_: em: You need a mathematician. 17:55 samth: building a plt file on 5.1.0.2 and running it on 5.0.2 17:55 tony_: I know from experience that these things don't converge quickly, but I'm afraid I can't derive an expression for the speed of convergence etc. 17:55 samth: it says it needs version '(510) but got '(400) 17:55 eli: samth: That should be the intended result. 17:56 samth: but there was not such a breakage between 5.0.1 and 5.0.2 17:56 samth: and indeed, no changes since 4.0, i assume 17:56 eli: Right, a change in that version number doesn't always happen, and it was long overdue. 17:57 samth: why? 17:57 tony_: em: The expression (length (remove* (list (car thelist)) thelist))) occurs twice in firstfrequency and is expensive. Use a let instead. 17:57 samth: plt files don't distribute zo files, so there seems to be no point 17:57 eli: samth: Because it's supposed to be an indication of the current racket version number. 17:57 samth: i can't produce portable plt files now 17:57 em: does let avoid caluclating it more than once? 17:58 samth: but why change it if it breaks things that would otherwise work, and doesn't accomplish anything else? 17:58 em: gotta go home im are w! selter! 17:58 tony_: em: yes, let binds a value to a variable. 17:58 em: ugh.. im running out of ram and im at ork i have to go home. ! see you guys later! 17:58 eli: samth: Why ask rhetorical questions? 17:58 samth: eli, these are not rhetorical questions 17:59 samth: this is a genuine problem for me 17:59 eli: I already answered: "Right, a change in that version number doesn't always happen, and it was long overdue." 17:59 eli: (The whole thing is just leftovers anyway, and perhaps it should be removed.) 17:59 samth: but i still don't understand the purpose of breaking things by changing this version number 18:00 samth: why is it overdue? 18:00 samth: what was being harmed by leaving it at 400? 18:00 eli: Because it said 400. 18:00 samth: so? 18:00 eli gives up 18:00 samth: couldn't we have left it at 400 forever, so as to avoid breaking things? 18:06 eli: No, if it should be left at 400 forever then there's no point in having it. 18:06 samth: but there's code that checks for it, so it can't be taken out 18:09 eli: The code that checks for something that doesn't change is bogus. 18:10 samth: but that code is in 5.0.2, which my students have already installed, and we can't change 18:10 eli sighs 18:11 samth: look, dealing with backwards compatibility is annoying, but there's no way around it 18:11 eli: You're dealing with code that is supposed to prevent building a plt file with version X and installing it on an earlier version. 18:11 eli: That's the intention of that thing AFAICT. 18:11 samth: right, however such things now work, where they didn't 10 years ago 18:12 samth: so there's no reason to make it not work just because it didn't use to work 18:17 jonrafkind: ooh, gtk 3 is out 18:21 eli: samth: See reply. 18:22 (join) Blkt 18:23 samth: eli, will this break installing things on old clients? 18:24 eli: samth: AFAICT, the version requirement is embedded inside the .plt file, so if the requirement is dropped from new plt files, it should install fine on older ones. 18:24 samth: ok, great 18:24 samth: thanks 18:24 eli: In the other direction, having no check means that old plt file with a requirement will install fine on newer ones, since there will be no code to check it. 18:24 eli: And that's the direction that really looks like it makes the whole thing bogus. 18:25 eli: (IOW, if there's any point in preventing something, it's what you did -- preventing what John did makes it look completely bogus.) 18:25 samth: right, john's problem is definitely worse 18:26 eli: In any case, if there's any need for a specific version number, the installer files could check for that explicitly, until there is some proper solution with a new packaging scheme. 18:31 samth: for which we all are fervently hoping :) 18:46 (nick) samth -> samth_away 19:01 (quit) saint_cypher: Quit: Leaving. 19:14 (join) dnolen 19:29 (quit) dnolen: Quit: dnolen 19:32 (join) shofetim 19:32 (join) Fare 19:34 (quit) Fare: Client Quit 19:35 (join) Fare 19:48 (quit) jonrafkind: Ping timeout: 260 seconds 20:11 (quit) lucian: Remote host closed the connection 20:20 (quit) jao: Remote host closed the connection 20:27 (quit) corruptmemory: Remote host closed the connection 20:48 (part) tony_: "Ex-Chat" 21:01 (quit) Blkt: Quit: ERROR: do not makunbound t please! 21:09 (join) coyo 21:09 (quit) coyo: Changing host 21:09 (join) coyo 21:49 (quit) masm: Quit: Leaving. 21:50 em: When you see people talk about 'prototyping' is that short hand for "making stuff up as you go" ? 21:51 Fare: pretty much 21:52 Fare: and/or it's short for "making a first attempt that we know we'll throw away once we understand what it's all about" 21:56 em: okay cool 21:57 em: Fare: but say you 'prototype' then, by your working definition, what sort of things do people usually do differently on their 'second draft'? Like, what sorts of things do they do once they see their prototype works? 21:58 em: and how did the 'prototyping phase' make the second part easier? 22:01 Fare: in the second draft, hopefully, they will factor the work better, using exactly the right concepts for the job. 22:02 Fare: except that no -- if you believe Fred Brooks, they will instead make a bloated piece of junk with too many features heaped together in a hodge podge, trying to cram all they failed to implement the first time around. 22:02 Fare: That's called "Second System Effect" 22:02 Fare: ideally, you want to jump right there to the third system - the one that's implemented with the hindsight of what are the concepts that matter. 22:04 Fare: "prototype" also has the subtext that the first version is written in a "scripting language" that allows for rapid prototyping, whereas the "real system" will be written in a "serious language" that has excellent performance, which by construction means the first prototype will be thrown away. 22:05 Fare: Of course, better languages such as Racket claim to be capable of both excellent expressiveness while prototyping and excellent performance during production, allowing for a smooth transition from prototype to product without having to throw code away. 22:30 (quit) coyo: *.net *.split 22:30 (quit) shachaf: *.net *.split 22:30 (quit) bremner: *.net *.split 22:30 (quit) mario-goulart: *.net *.split 22:37 (quit) shofetim: Ping timeout: 240 seconds 22:43 em: Fare: oh that was really well articulated, thanks very much. 22:46 Fare: :) 23:00 danking: How is racket reasoning about this: https://gist.github.com/821897 23:01 danking: Does define-syntax get bound to 'foo before or after it tries to interpet the macro? 23:01 (join) coyo 23:01 (join) shachaf 23:01 (join) bremner 23:01 (join) mario-goulart 23:02 danking: Also, how come using a macro before it is define'd results in "bad syntax" errors while using an identifier before its definition is a far more clear error? 23:03 danking: eli: Hopefully I can hack on it more this weekend because I only got lambdas and +'s working (and then broke lambdas while experimenting). If I polish it up more I'll definitely share. 23:30 (nick) _danb_ -> lol 23:30 (nick) lol -> Guest87636 23:50 (join) dnolen 23:51 lisppaste: em pasted "linear systems of equations" at http://paste.lisp.org/display/119573