00:09 (join) ivan\ 00:17 (quit) wtetzner_: Ping timeout: 246 seconds 00:21 (join) dnolen 00:22 (quit) ambrosebs: Quit: ambrosebs 00:23 (join) ambrosebs 00:24 (join) nilyaK 00:27 (part) ambrosebs 00:27 (join) cky 00:36 (join) mye_ 00:40 (quit) mye__: Ping timeout: 260 seconds 00:46 (quit) hash_table: Ping timeout: 245 seconds 00:47 (quit) getpwnam: Ping timeout: 244 seconds 00:47 (quit) jonathansizz: Ping timeout: 244 seconds 01:06 (quit) SHODAN: Remote host closed the connection 01:08 (join) SHODAN 01:19 (quit) jao: Ping timeout: 276 seconds 01:23 (join) scvrory 01:23 scvrory: does parser-tools/lex support longest match? 01:24 (quit) mithos28: Quit: mithos28 01:32 (join) cdidd 01:40 jonrafkind: it matches in order afaik 01:40 jonrafkind: so a* will match before aa* 01:41 scvrory: so there's no way to use the longest match? 01:41 scvrory: (the css specification in particular specifies longest match lexing 01:41 jonrafkind: for any given regex it will match as much as possible 01:41 jonrafkind: and it will match regexes in order that you give them to (lexer) 01:42 nilyaK: regex is usually greedy 01:42 nilyaK: afaik 01:43 jonrafkind: ya 01:43 scvrory: jonrafkind: i don't think that that will work for css 01:43 jonrafkind: what doesnt work in particular 01:46 scvrory: "red-->" should parse to (IDENT red--) (CHAR #\>) not (IDENT "red") (CDC). and "-->" should parse to (CDC) not (IDENT "--") (CHAR #\>) 01:46 scvrory: so in one case ident should come first 01:46 scvrory: and in the other CDC needs to come first 01:46 scvrory: the longest match is what determines which to use 01:48 (quit) dnolen: Quit: ERC Version 5.3 (IRC client for Emacs) 01:48 jonrafkind: so it seems like ident is \w[\w-]+ and --> is just "-->" 01:49 jonrafkind: and if oyu put ident in front of --> then it will match first 01:49 scvrory: ident can start with - 01:49 scvrory: -- is a valid ident 01:49 jonrafkind: aha 01:49 jonrafkind: who thought of these rules :p 01:49 scvrory: http://www.w3.org/ lol 01:50 scvrory: it's because -webkit prefixes and whatnot 01:50 jonrafkind: well scott is a smart guy, maybe he put longest match into the lexer 01:50 jonrafkind: oh right 01:51 jonrafkind: or you could say ident = \w[\w-]+ | -(-[^>])? 01:51 jonrafkind: or whatever it is for negative lookahead 01:51 scvrory: i'd rather not expose myself to weird edge cases and stuff 01:52 scvrory: the syntax is defined with regular expressions in the spec 01:52 scvrory: i planned on using the exact regexps 01:53 scvrory: http://www.w3.org/TR/CSS21/syndata.html#tokenization 01:54 jonrafkind: longest match is such a hack 01:56 scvrory: yeah i'm not supe rpleased with that 01:59 ozzloy: i'm trying to auto load flymake-mode in emacs. i have http://pastebin.com/QutCShg4 but it's not working. what do i need to do on line 11? 02:02 scvrory: jonrafkind: https://github.com/plt/racket/blob/master/collects/parser-tools/lex.rkt i see a bunch of variables startingn with longest-match- but i don't know enough racket to follow what it's all doing 02:03 jonrafkind: maybe the lexer does longest match by default 02:03 jonrafkind: pretty strange since the docs dont mention it 02:03 jonrafkind: did you test it out? 02:04 scvrory: i'm going to right now 02:10 ozzloy: jonrafkind, you use emacs? 02:10 jonrafkind: nah 02:11 scvrory: jonrafkind: looks like it does longest match, then order 02:11 jonrafkind: oh cool 02:11 scvrory: i think that's because that's how lex does it 02:13 jonrafkind: ill see if i can throw in a paragraph about longest match and then order 02:14 ozzloy: jonrafkind, do you know if there's a way to get auto-paren insertion to behave more like paredit? for example if you backspace after typing ( the matching ) will also be removed 02:15 jonrafkind: in drracket or emacs 02:15 ozzloy: drracket 02:15 ozzloy: emacs does this with paredit-mode 02:15 jonrafkind: sorry i dunno.. i rarely use drracket 02:15 ozzloy: you don't use emacs or drracket? 02:15 jonrafkind: nope haha 02:16 jonrafkind: vim 4 life 02:16 jonrafkind: i hate s-expression editing 02:16 ozzloy: wtf? 02:16 jonrafkind: like moving around s-expressions and whatnot 02:16 ozzloy: my brain just exploded 02:16 jonrafkind: well partly the reason i dont use drracket is its too buggy and slow for me 02:18 scvrory: so is everything compared to vim ;) 02:18 jonrafkind: well yes :p 02:18 scvrory: plus i'm completely lost without vim keybindings 02:18 jonrafkind: vim has % which lets me bounce between open and close parenthesis/brackets, thats good enough for s-expressions 02:19 eli: Troll. 02:19 jonrafkind: ive never really needed the feature where i need to get to the enclosing s-expression 02:20 eli: Perhaps using vim is, I don't know, somehow related to the fact that you're using an editor whose idea of sexpr support is "% to jump to the matching paren"? 02:20 eli: ozzloy: You need to start flymake-mode -- something like (flymake-mode 1), but see the file, it should have some description too. 02:20 eli goes to sleep 02:21 jonrafkind: i tried the chorded s-expression editor mode for drracket and didnt like it 02:21 jonrafkind: what was that thing called.. dejavu or something 02:22 jonrafkind: oh divascheme 02:22 (join) hkBst 02:22 (quit) hkBst: Changing host 02:22 (join) hkBst 02:23 ozzloy: i figured it out 02:23 ozzloy: eli, yeah, derp 02:23 ozzloy derp-de-derps all over 02:23 ozzloy: eli, thanks for figuring out flymake 02:24 ozzloy: this is going to be quite handy, i think 02:25 ozzloy: http://goo.gl/aO0Ng i'm reading through sicp with a bunch of people. trying to help figure out how to make their environments work really nicely 02:25 (join) mye__ 02:26 ozzloy: jonrafkind, i've been using vim for about a decade 02:27 jonrafkind: 1.5 for me 02:27 jonrafkind: decades 02:27 ozzloy: jonrafkind, have you seen paredit mode? 02:28 jonrafkind: im not sure.. ive seen eli hack inside emacs 02:28 jonrafkind: so i assume ive seen the highest level of s-expression hackery possible 02:28 (quit) mye_: Ping timeout: 245 seconds 02:29 ozzloy: probably 02:29 jonrafkind: how do you start emacs with paredit 02:29 ozzloy: that eli fellow puts some time into his craft 02:30 ozzloy: jonrafkind, M-x paredit-mode 02:30 ozzloy: jonrafkind, not sure how familiar you are with emacs. is that enough info? 02:31 jonrafkind: i thought M-x was meta-x, isn't alt usually meta? 02:32 ozzloy: yes, these days. i hear back in the ye olde days there was some other keyboard layout and some other keybindings and stuff 02:32 jonrafkind: hm so M-x doesn't work 02:32 ozzloy: so M-x paredit-mode means hold down alt, hit x, then type paredit-mode 02:32 jonrafkind: do I have to futz around with my x configuration to set up key bindings or some garbage 02:33 ozzloy: i doubt it 02:33 ozzloy: do you have a racket file open? 02:33 jonrafkind: this is absurd.. 02:33 jonrafkind: yea 02:33 ozzloy: or any lisp file 02:33 ozzloy: ok 02:34 jonrafkind: oh maybe esc will work 02:34 ozzloy: possible 02:34 jonrafkind: oh i think the issue is i have viper running 02:34 (quit) scvrory: Ping timeout: 245 seconds 02:34 jonrafkind: ill just disable that 02:34 ozzloy: i'm not familiar with viper 02:34 ozzloy: oh 02:34 ozzloy: vi inside emacs, right? 02:34 jonrafkind: 'please type yes or no' FUCK U EMACS 02:34 jonrafkind: yea 02:34 ozzloy: vile is another one of those? 02:35 jonrafkind: ok now M-x works, i hit ESC for meta 02:35 ozzloy: i remember vim golf having a few top entries submitted by viper users 02:35 jonrafkind: it says 'no match' 02:35 jonrafkind: i guess i have to download paredit or something? 02:36 ozzloy: possibly. it's also possible you need to load it 02:37 jonrafkind: ok im running paredit now I think 02:38 ozzloy: hit ( 02:38 ozzloy: see if () appears 02:38 jonrafkind: ya 02:38 ozzloy: now hit backspace 02:38 ozzloy: see if the whole thing dissappears 02:38 jonrafkind: oh haha it doesnt let you delete an s-expression until the insides are gone 02:38 ozzloy: ype 02:38 ozzloy: yep 02:38 jonrafkind: it even skips over ) as you go backwards 02:38 ozzloy: you can never have unbalanced parens 02:38 jonrafkind: well thats neat 02:39 ozzloy: or at least that's what i think the intent is 02:39 ozzloy: you can never have unbalanced delimiters of any kind 02:39 ozzloy: hit " 02:39 ozzloy: hit [ 02:39 jonrafkind: it doesnt work for <> 02:39 ozzloy: nope 02:39 ozzloy: or { 02:39 jonrafkind: nor {} 02:40 ozzloy: because those aren't lisp delimiters 02:40 jonrafkind: {} works in racket :p 02:40 jonrafkind: http://www.vim.org/scripts/script.php?script_id=3998 02:40 jonrafkind: lets see if this works 02:41 ozzloy: jonrafkind, if anyone at the meetup starts using vim, i'll direct them to you 02:41 jonrafkind: i wrote a vim plugin for drracket :p 02:41 jonrafkind: but its sort of bit rotting at this point since i dont run drracket anymoer 02:42 ozzloy: i think i've asked this before, but why drracket? why not a plugin for emacs? 02:42 jonrafkind: vim mode for emacs? 02:42 jonrafkind: they already exist 02:42 ozzloy: no 02:43 ozzloy: why does drracket exist 02:43 ozzloy: instead of a plugin for emacs 02:43 jonrafkind: well its a pedagogic tool for students 02:43 jonrafkind: i mean its meant to support graphics as well as just regular text 02:44 ozzloy: maybe at the time emacs couldn't do that 02:44 jonrafkind: also i cant blame the authors of drracket for wanting to use a better language (racket) than emacs plugins (emacs lisp) 02:44 ozzloy: ah, that makes sense too 02:45 ozzloy: whalesong compiles racket to javascript, right? 02:45 (quit) djcb: Ping timeout: 252 seconds 02:46 jonrafkind: yea 02:46 ozzloy: my mind kinda wandered. i thought "what about compiling racket to elisp..." 02:47 jonrafkind: paredit for vim seems to work well 02:47 ozzloy: jonrafkind, are there plugins for drracket? 02:47 jonrafkind: except it doesnt know about [], ill have to add that 02:48 jonrafkind: yea theres a bunch on planet: http://planet.racket-lang.org/ 02:50 jonrafkind: i think i like paredit mode 02:50 jonrafkind: thank god it exists for vim 02:50 ozzloy: jonrafkind, it is the awesome 02:50 jonrafkind: i can see how it could get in the way, but probably i can work around it 02:51 ozzloy: jonrafkind, every once in a while it is annoying 02:51 jonrafkind: ah it even lets me type #\( 02:51 jonrafkind: without putting in the closing ) 02:51 ozzloy: when in a string, if i type "\a" and then i realize i wanted "\b" i can't just delete once then type b 02:51 jonrafkind: these people are t3h smart 02:52 jonrafkind: vim lets me do that 02:52 ozzloy: in emacs, it deletes the escaper too 02:52 ozzloy: which makes sense in a way 02:52 jonrafkind: emacs doesn't have an equivalent to 'c'? 02:53 ozzloy: umm... that's not the issue 02:53 jonrafkind: well yea 02:53 ozzloy: with paredit-mode active, it senses the escape character 02:53 jonrafkind: but i could see how you could just change 'b' to 'a' and still maintain the escape cahracter 02:54 ozzloy: emacs doesn't have an equivalent to 'c', no 02:55 ozzloy: because there's no "i'm going to start editing now" followed by editing and a final "i'm done editing" after which a plugin would check the result for correctness 02:56 ozzloy: in some sense, you could go back 1 char, then C-d and start typing 02:56 ozzloy: that'd be similar to 'c' 02:57 ozzloy: oh, and when they say "emacs is modeless", this is what they're talking about. but in another sense, emacs has bajillions of modes 03:00 ozzloy: jonrafkind, ok, now you should have a look at geiser 03:00 ozzloy: jonrafkind, it's like the lower half of drracket 03:01 ozzloy: which you don't use... so it's a repl in emacs 03:13 (quit) jonrafkind: Ping timeout: 244 seconds 03:20 (join) bluezenix 03:31 (quit) bluezenix: Read error: Connection reset by peer 03:32 (join) bluezenix 03:33 (join) bluezenix1 03:36 (quit) bluezenix: Ping timeout: 245 seconds 03:41 (join) noelw 03:48 (quit) jyc: Read error: Connection reset by peer 03:59 (join) ambrosebs 03:59 (quit) nilyaK: Quit: Leaving. 04:09 (quit) ambrosebs: Ping timeout: 250 seconds 04:13 (join) bitonic 04:16 (join) nilyaK 04:30 (join) dzhus 04:58 (join) mceier 05:19 (quit) nilyaK: Quit: Leaving. 05:25 (join) Shvillr_ 05:25 (quit) Shviller: Disconnected by services 05:25 (nick) Shvillr_ -> Shviller 05:27 (quit) Shvillr: Ping timeout: 252 seconds 05:27 (join) Shvillr 05:28 (join) antithesis 05:31 (join) masm 05:35 (quit) bitonic: Quit: WeeChat 0.3.7 05:38 (quit) bluezenix1: Read error: Connection reset by peer 05:40 (join) bluezenix 05:49 (join) nilyaK 06:04 (join) tfb 06:13 (join) mye_ 06:17 (quit) mye__: Ping timeout: 250 seconds 06:21 (join) mye__ 06:23 (quit) nilyaK: Quit: Leaving. 06:24 (quit) mye_: Ping timeout: 265 seconds 06:27 (join) jao 06:28 (quit) jao: Changing host 06:28 (join) jao 06:41 (quit) DraX: Quit: Disconnecting from stoned server. 06:41 (join) DraX 06:45 (join) bitonic 06:50 (join) kvda_ 06:51 (quit) jao: Ping timeout: 248 seconds 07:05 (quit) karswell: Remote host closed the connection 07:11 (join) mithos28 07:15 (join) karswell 07:26 (quit) bluezenix: Quit: Leaving. 07:35 (quit) tfb: Quit: sleeping 07:37 (quit) karswell: Remote host closed the connection 07:45 (join) bluezenix 07:47 (join) karswell 07:56 (join) wtetzner_ 07:58 (quit) mithos28: Ping timeout: 245 seconds 08:00 (join) untrusted 08:05 (join) mithos28 08:12 (quit) kvda_: Quit: -___- 08:14 (quit) mithos28: Ping timeout: 248 seconds 08:20 Shambles_: asumu: I submitted the bug report, but it doesn't show in the search. Does it have to be approved by a moderator or somesuch? 08:21 Shambles_: asumu: Never mind. I guess I was searching wrong. I see it now. 08:28 (join) plmday 08:29 plmday: Hi, I wonder if there is a way to omit giving an id to `chunk' in scribble literate programming? 08:31 plmday: I do not want it generates something like "id ::= " in my document, but do want the literate program contained inside a chunk to be executed. 08:40 (quit) hkBst: Ping timeout: 245 seconds 08:45 (join) hkBst 08:53 (join) zyoung 09:02 (join) jeapostrophe 09:02 (quit) jeapostrophe: Changing host 09:02 (join) jeapostrophe 09:09 (quit) jeapostrophe: Ping timeout: 256 seconds 09:11 (quit) Shvillr: Ping timeout: 248 seconds 09:12 eli: Shambles_: *sigh* 09:12 Shambles_: eli: Why are you sighing at me? 09:13 eli: Now I'll have yet another batch of email bounces to deal with... 09:13 Shambles_: eli: :P I didn't see any reason for it to need a name or e-mail just to report a bug. 09:14 eli: Well, people are used to the email-based workflow, so they will send you email at that address... 09:15 (quit) hkBst: Quit: Konversation terminated! 09:15 eli: "(reason: 550 5.7.1 ... Relaying denied)" 09:18 Shambles_: eli: Why would anyone need to e-mail me? 09:20 (join) hkBst 09:21 eli: Shambles_: In many cases there's discussions going on, and the submitter is included in these too. 09:22 (join) Shviller 09:23 Shambles_: eli: I hadn't planned in being involved in those. I'm surprised they even involve the person that submits the bug report in such things. Most don't. I tried to make sure the bug report contained everything someone would need to know to solve the problem. I think I did okay at that. 09:24 bremner: my experience is that "Fire and Forget" bugs generally often get forgotten 09:25 Shambles_: bremner: That's all I'm used to having the option to do. Also, the bug report was submitted because of a conversation with asumu last night. They told me to. Sorry it's making your lives so difficult. 09:34 (join) jonathansizz 09:34 (join) getpwnam 09:35 (join) hash_table 09:36 (quit) kvda: Quit: Computer has gone to sleep. 09:37 (quit) plmday: Quit: Page closed 09:37 (join) plmday 09:38 (quit) plmday: Client Quit 09:45 (quit) antithesis: Quit: yes leaving 09:50 eli: Shambles_: Not that difficult, like I said, I'm semi-used to such things. 09:51 eli: Shambles_: And re what bremner said -- I think that there's a distinction to be made between big projects and small ones: in the former ones it's often fine to not participate, in the latter there's higher chances that it gets forgotten with no participation. 09:53 Shambles_: eli: I'm used to dealing with a big project that only the users care about, and the developers mostly ignore. It's kind of halfway open source (client side only), so if you do a *really good job* with the bug report, and the problem is on the client side, a user that is also a programmer might make a patch, which will subsequently be passed around for the 2 to 5 years or more it takes the commercial guys to fix it. 09:53 eli: :) 09:54 eli: Yeah, I should have added that an extreme example of big projects are commercial ones, where nobody expects you to even say something. 09:54 Shambles_: eli: So I make it a point to be as thorough and clear as I can be. I generally don't want to be involved in anything that nets me a lot of spam, and had I been forced to give a legitimate e-mail address I would have just used a disposable one and not responded there either. I think I did my part as a user showing that the program does not do what your documentation says it does. 09:54 eli: As in bugs in google/apple/microsoft. 09:55 Shambles_: eli: Maybe someday I'll just end up writing patches myself. At least I can stand Lisp better than C++. I wrote patches for that other thing, but I just can't take it any more. And I've got a long ways to go before I'm going to be slick enough with Racket to be able to help maintain it. 09:55 eli: Yeah, patches obviously speed things up, but that would be a whole bunch of additional effort on your side. 09:57 Shambles_: eli: It was *the only way* to get most bugs fixed. Even after a patch was submitted to their JIRA it would take about 1 to 3 years (not exaggerating) to be applied. Usually almost exactly 1 year. It didn't matter if the patch was one line (as one of mine was, for a 2 year old bug, that took me part of 1 day to find, understand, and fix... and I hate C++ and hadn't touched it for 10 years at that time). 10:00 (quit) jonathansizz: Ping timeout: 244 seconds 10:00 Shambles_: eli: So yeah. I do my best writing bug reports. Given recent experience with that project I tend to not have a lot of patience with maintainers that rage at their users for not diddling the problem report system exactly the way they'd like. I realize you guys are doing this for free, but really, it's time to stop hammering me for this. I did my job. You know what you need to know. I won't be the last to encounter that p 10:00 Shambles_: . I won't be the last to encounter that problem in the documentation. 10:00 (quit) hash_table: Ping timeout: 244 seconds 10:00 (quit) getpwnam: Ping timeout: 244 seconds 10:01 eli: Shambles_: No hammering intended, 10:01 eli: after all we keep the system open for random bug submissions very intentionally. 10:01 eli: We're planning to move to github for bugs, and one of the main problems to tackle is to keep the ability to submit bug reports without having a GH account. 10:02 eli: (Which we have a plan for, otherwise we probably wouldn't moved.) 10:02 eli: And re bug horror stories, go back further in time, before software companies realized that users are an asset, 10:02 (join) jacius 10:02 eli: In a company I worked at in the early 90s we ran into a bug in a MS ODBC driver, 10:03 eli: our company had paid some outrageous monthly amount just to be able to submit bugs (labeled as "support", of course), 10:03 Shambles_: eli: From what I've seen (I'm in my mid 30's) software has only gotten worse over time. It's gotten easier to use, in the sense that you can probably blunder through something until you get something /kind of like/ what you'd wanted done, done, with the software, since there are now 'explorable' UI's. 10:03 eli: and even with that, after many angrey calls to them the best we got was "we know about the bug", but obviously no fix. 10:04 Shambles_: eli: However, I can remember when software on my 8-bit computers didn't crash. I can remember when there *was* documentation for most things. Now it's mostly non-existent. 10:04 eli: Well, when you're on such limited systems, there's not much that *can* crash... 10:05 eli: One of the reasons I resisted switching to a PC was that with my C64 I knew *everything*, down to all of its IO-mapped addresses and the complete ROM... With a PC that was no longer possible. 10:05 Shambles_: eli: I can remember when I had a problem with software I could call a 800 number, and get someone that knew English, and knew the product, rather than someone with a accent so thick it could be used as a building material, that they fetched off some farm plot and told to read scripts at people, as the caller pays long distance fees per minute, and sometimes additional fees for the 'help'. 10:06 Shambles_: eli: I don't think that's it. I think several things are the cause of software being so crap now. 10:07 untrusted: something that somehow works is so much cheaper... 10:08 eli: Shambles_: Just consider the fact that a single kid would know a machine completely -- there's generally much less code to break. 10:08 Shambles_: eli: One is the move from assembly to higher level, *poorly defined and error prone* languages. When you screw up in assembly the results tend to be pretty catastrophic. In assembly *everything* is defined. You can't wuss out and say something is 'undefined' or 'implementation defined' (except maybe reading memory you haven't written yet). Yes, I'm looking at you ANSI C & C++ committees. 10:08 eli: Also much less things to break when there's no network etc. 10:09 Shambles_: eli: There are no weird automatic conversions (e.g. the sometimes hazardous interaction of unsigned and signed numbers)... Anyway, that's languages. 10:09 eli: That's debatable -- compare the 6502 assembly language (or 8086) to the huge pile you get in modern CPUs. 10:09 Shambles_: eli: Once upon a time, businesses *paid* people to beta test. Now people *pay* (oh boy, I pre-ordered! Now I can play the beta!) to beta test. 10:10 eli: Not only the size of the language -- there's piles of things to know about pipelines, caches, register loading, micro-code, assymetric memory, etc etc etc etc. 10:10 (join) gridaphobe 10:12 Shambles_: eli: And then there's the market change. It used to be that the primary market was nerds. You couldn't sell crap to nerds. You couldn't 'market' to nerds. Ads used to include full stats for all products, because nerds demanded it. Now that you can just make your UI poot and sparkle, and it doesn't matter if the program crashes every 15 minutes, it'll still sell because Joe Sixpack can't spot quality, the quality is gone. 10:14 Shambles_: eli: As for how assembly changed, I still maintain that it's 'defined', and less error prone (due to less backstabbing) than C and C++. As for all the complexity you need to consider for getting optimal speed now, most of that is due to the processor trying to outsmart the programmer, which is considered good practice only because most software is poorly written now. 10:14 eli: Shambles_: That would be a description for a change in things that are higher level than languages, since languages are still very much for nerds. 10:15 eli: Perhaps not including ruby brogrammers. 10:15 Shambles_: eli: Had we gone down different paths of evolution we would probably see huge sets of registers rather than a lot of caching and speculative execution, which would make writing a optimizer, or coding near-optimal code, much easier. I'm basically thinking of RISC machines. 10:15 eli: Worse with "apps" becoming common. 10:15 eli: And there's the notable shift that MS did from a BSOD to just making it reboot the system by itself, 10:16 eli: and later on Apple perfected that on ios where when something crashes it just closes. 10:16 eli: (Why bother people with hard things like errors...?) 10:16 eli: Shambles_: re registers -- intel *did* go that way. 10:17 eli: There's a good amount of registers that are used when you refer to memory addresses as a kind of extremely fast cache. 10:17 Shambles_: eli: I don't think it has. There's what, 16 registers, still CISC style (which registers get used is dictated by the instruction, not the arguments to the instruction)? 10:18 eli: Yes, that's the official number of registers in an intel cpu 10:18 eli: but there's additional registers in the machine that are not exposed at the user language level. 10:18 eli: You do get them when you refer to memory, 10:19 Shambles_: eli: Internally, sure, it's RISC, because that's fast. It just causes a lot of memory bloat if all your instructions are long. The fact you can't directly access the registers means compilers have to do obnoxious things like try to outsmart the processor's attempts to re-engineer the code they generate to 'improve' it. 10:19 eli: so if you keep your code as something that touches only 1 cycle, scads of registers, no fighting speculative execution, world. 10:22 Shambles_: eli: And (almost) all general purpose registers (got to have a program counter in there somewhere). 10:22 (join) dnolen 10:22 eli: Well, that was the original ARM thing, and it's mostly dead... 10:22 (join) ambrosebs 10:23 eli: The simplistic world view is just not feasible -- take asymmetric memory where there's no longer any attempt to keep the illusion that memory references are all the same. 10:23 Shambles_: eli: I got the impression it was still more or less that way, including most of the processor still being random logic rather than microcode. I know they went with CISC style variable instruction lengths, at least in what, 'thumb' mode I think they call it? It still seemed less insane. 10:24 eli: I think that it's very thoroughly not that way. 10:25 Shambles_: eli: I don't know as it's not feasible. Unnecessary complexity is a bad thing. In programming, more control is a *very good thing* especially for something that everything else is to be built upon. Yes, RISC had issues with memory bloat due to all instructions being the same length, and that making it rather bulky compared to CISC, but that was the only serious problem, and ARM's thumb mode seems to be reasonable. 10:25 eli: Caches, pipelines, branch prediction, FP chips, GPUs, etc, all of these destroy the illusion of uniformity, and any meaningful notion of a "cycle" for end users. 10:26 eli: (And all are just as applicable to RISC.) 10:26 Shambles_: Well, GPU is usually very clearly separate from the processor. 10:26 Shambles_: /Usually/. 10:27 Shambles_: People keep talking about sticking the GPU in the processor. Doesn't seem to actually get used so far, and they've been talking a awful long time now. 10:27 eli: IIUC, the hot thing is the CPU outsourcing work to the GPU. 10:27 eli: There's a planet package for that, I think. 10:28 (quit) jrslepak: Quit: This computer has gone to sleep 10:28 Shambles_: As for the rest, perhaps. Caches are much less useful if most of the transistors get used for a huge general purpose resister pool, which is basically a cache you can control. Pipelining might be necessary, but in that case the behavior of 'stalling' needs to be documented. I think floating point has been built into most modern processors for ages so shouldn't be a big issue. 10:29 Shambles_: eli: Yes. OpenCL standardized that, finally. It's very clear that the GPU wont act the same as the processor though, and programming one is /wildly/ different than programming a normal processor. 10:31 Shambles_: eli: So basically I see the GPU thing as orthogonal, until it becomes somehow integrated with the processor. I mean, I have a printer too, but that doesn't mean I would be confused by it the 'memory hierarchy' of it (e.g. writing to the printer, across USB, being slower than writing to RAM). If that seems contrived, consider that you 'write to' the GPU across the PCI-e bus... Both make pictures... 10:32 eli: Documenting such things as stalling is not that useful in practice, and meanwhile it's getting to be a huge problem to continue with the next CPU version, if you need to maintain the same expectations. 10:32 eli: And if you don't maintain them and just document the new behavior, you're basically making that documentation useless. 10:33 eli: (Yet another necessity of the post-80s world where you can't afford the luxury of assuming that everyone uses the same CPU.) 10:34 Shambles_: eli: Not at all! For example, on the Amiga there were several incompatible hardware revisions. At a high level they were compatible, but the timing of the hardware, and sometimes behavior outside the system call interface, was wildly different. Software that was timing dependent (think raster effects), which the manuals themselves warned people *NOT TO WRITE*, broke. 10:35 Shambles_: eli: However, knowing the timing of the hardware, so long as your software used the high level interface and was not timing dependent, let you write code that performed well. 10:35 Shambles_: eli: It's perfectly okay to change the relative timing of things (though be advised it might pessimize old code), but documenting the timing is still very useful! 10:36 eli: Um... Those incompatibilities pale in comparison to the zoo of intels you have on PCs now; and that in turn is nothing compared to what you get on androids. 10:36 eli: The high-level abstractions are something that there is no way you'll convince me to give up. 10:37 eli: Programmer time is absolutely more precious than losing a cycle here and there or even on every other step. 10:37 Shambles_: eli: Were the only differences timing, it would be no big problem. Unfortunately the 'intels' you refer to aren't /really/ binary compatible, as in, they don't support all of the same instructions, with SIMD instruction sets being particularly good examples of incomparability minefields. I think that's why Visual C++ is still limited to, what, SSE2, from like the Pentium III era? :P 10:39 Shambles_: eli: Had I a hate for all high level abstractions I don't think you'd see me on a Lisp channel, and I'm not amused by trolling, so I'm not here for that either. If you look back, I was complaining about how computing had ... decayed, in my eyes, over the years. I maintain it's very important to have lots of control and thorough documentation in assembly, and it need not be over-complex. 10:40 Shambles_: eli: Nice high level abstractions like operating systems and Lisp interpreters and compilers can then be built atop a stable, efficient foundation. 10:40 eli: Shambles_: I know you're not trolling, and I know what you're talking about. 10:41 eli: It's obviously easier to generate software which obviously leads to large number of crap code being out. 10:41 eli: That's not difference than, for example, what happens with electronic music. 10:41 eli: Compare 200 years ago with 100 years ago with today, 10:41 Shambles_: eli: And let's face it, computers have been 'fast enough' for most things to get by being programmed at a high level for what, 15 to 20 years? Java wasn't exactly snappy in the mid 90's but it was usable for office-style apps. I don't wanna be writing my shell scripts in assembly. ;) 10:42 (quit) hkBst: Quit: Konversation terminated! 10:42 eli: But making software easier to produce helps the good programmers too, which still makes it priceless IMO. 10:43 Shambles_: eli: Maaaybe. I'm not sure if you're right or wrong there. There is a line of thinking that keeping things difficult to do, weeds out the folks that shouldn't be allowed to do it anyway. Maybe that's right. On the other hand, it really slows down the folks that still aught to be doing those things. 10:43 Shambles_: eli: Exactly what I was typing. 10:45 Shambles_: eli: I really think it more has to do with 'new' (last 20 years or so) bad users than bad programmers. Were this still a nerds-only economy the bad code would be weeded out. That would leave ease-of-coding as a force for good with no negative effects. Oddly, I think most of the non-nerds would be happier too. They seem to hate being forced to use computers. 10:46 Shambles_: eli: I also wrote plenty of bad code I thought was good as I was learning. I probably still do. ;) The important part is the trying, and the learning to do better. 10:46 Shambles_: eli: So just because you're a bad programmer doesn't mean you'll always be one. 10:52 eli: Shambles_: Yeah -- otherwise I wouldn't care to be a teacher... 10:55 Haffe: ,,,,,,,,,,,,, 10:57 Haffe: ,,,,,,,,,,,,,,,,,,,,,,,,,, 10:57 Haffe: ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 10:59 Haffe: , 10:59 bremner: Haffe: are you sitting on your keyboard? 11:00 noelw: Need some quotes to match those unquotes? Have some of mine: '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 11:00 noelw: Oops, should be quasis! *blush* `````````````````````````````````````````````````````````````````````````````` 11:04 Haffe: bremner: Cat sitting on keyboard. 11:07 bremner loves that photo of cat sitting on keyboard in front of kernel panic 11:08 (join) stis 11:09 Shambles_: I've been having this thought experiment pop into consciousness several times the last few days. I was thinking about how you might write a program with multiple (different) event handlers (e.g. handle keyboard and mouse inputs) while maintaining state (e.g. a score) purely functionally. It seems like there'd have to be at least one set! somewhere to 'hold onto' the score, so all the event handlers would see the same data. 11:15 (join) getpwnam 11:15 (join) jonathansizz 11:15 Shambles_: Can anyone confirm or deny? 11:16 (join) hash_table 11:17 (quit) dnolen: Ping timeout: 250 seconds 11:21 noelw: FRP 11:21 noelw: perhaps? 11:22 Shambles_: noelw: Not sure what that stands for. 11:23 Shambles_: noelw: Functional reactive programming or somesuch? 11:23 (quit) ambrosebs: Ping timeout: 252 seconds 11:26 ChibaPet: fantasy roleplaying 11:28 Shambles_: noelw: Alright then, but I get to be the mage or cleric. 11:29 (join) nilyaK 11:32 (quit) bremner: Quit: Coyote finally caught me 11:32 (quit) bremner-: Quit: ZNC - http://znc.in 11:36 noelw: No problem. Clerics are boring 11:36 noelw: And yes, functional reactive programming 11:38 (quit) bluezenix: Quit: Leaving. 11:43 (join) antithesis 11:44 (join) RacketCommitBot 11:44 RacketCommitBot: [racket] plt pushed 8 new commits to master: http://git.io/zIoK6A 11:44 RacketCommitBot: [racket/master] Redo `string-trim' and `string-normalize-spaces'. - Eli Barzilay 11:44 RacketCommitBot: [racket/master] Drop the now-redundant " " argument from existing uses of `string-join'. - Eli Barzilay 11:44 RacketCommitBot: [racket/master] Clarify `regexp-split' on an empty input. - Eli Barzilay 11:44 (part) RacketCommitBot 11:47 Cryovat: noelw: I just rolled a new druid 11:47 Cryovat: Hope I'm not going to regret it :( 11:48 (join) RacketCommitBot 11:48 RacketCommitBot: [racket] plt pushed 1 new commit to master: http://git.io/yZtjYw 11:48 RacketCommitBot: [racket/master] Improved bash completion script. - Eli Barzilay 11:48 (part) RacketCommitBot 11:49 (join) netrino 11:53 (join) RacketCommitBot 11:53 RacketCommitBot: [racket] plt pushed 1 new commit to master: http://git.io/72NBjA 11:53 RacketCommitBot: [racket/master] Leftover file that wasn't added with the `tests/profile' refactoring. - Eli Barzilay 11:53 (part) RacketCommitBot 12:08 (join) anRch 12:11 (part) untrusted: "ERC Version 5.3 (IRC client for Emacs)" 12:16 (quit) noelw: Quit: noelw 12:18 (quit) antithesis: Remote host closed the connection 12:19 (join) antithesis 12:20 (join) bluezenix 12:27 (quit) antithesis: Quit: yes leaving 12:28 (join) aalix 12:53 (quit) anRch: Quit: anRch 12:59 (join) antithesis 13:01 asumu: Shambles_: the "universe" library that ships with Racket implements that kind of functional programming. It's used to teach intro CS at various places. 13:01 asumu: Also see http://vimeo.com/6631514 13:01 Shambles_: asumu: By 'that kind' you mean functional reactive programming? 13:03 (join) netrino_ 13:04 (join) DanBurton 13:05 asumu: Shambles_: I mean a functional program with state with event handlers. 13:06 (quit) netrino: Ping timeout: 245 seconds 13:10 (quit) bluezenix: Quit: Leaving. 13:13 Shambles_: asumu: Well, this thought experiment came from a practical concern. After learning about the way Racket handles multithreading, and reading about the places implementation, I started wondering how much mutable state I could get rid of. It occurred to me that while I could have static event handlers, and split off pretty much all processing, there probably wasn't a way to 'pass the world around'. 13:13 Shambles_: asumu: You could do it inside one big loop I guess, but it'd keep one of your cores pegged at 100% utilization, busywaiting. 13:16 Shambles_ is watching the video while having lunch. 13:19 Shambles_: Pretty sure the guy giving the talk is Dutch. I have a Dutch friend. I like how he said kludge. ;) 13:27 asumu: He's German. 13:27 asumu: But that's pretty close. 13:34 Shambles_: asumu: I've not finished the video, but I'm still not sure how this 'holds onto' the state without either keeping the CPU pegged by busywaiting in a loop (tail recursion). I can see that such facts aren't /exposed/. Am I missing where the world is being 'returned to'? 13:36 (join) jonrafkind 13:42 (join) bluezenix 13:43 Shambles_: I dunno as I agree the Python and Java guys are bad, but I do think it's really nice to see 80's-style game programming used to teach languages. Books for that used to be common. They're kinda rare now, but there's several for Python, and of course Land of Lisp. 13:44 (quit) bitonic: Quit: WeeChat 0.3.7 13:46 (quit) nilyaK: Quit: Leaving. 13:50 Shambles_: asumu: I will say I strongly disagree with the debugging statement. I find it very helpful to see 'what the machine does' with what I wrote. I remember at the university I went to they literally never taught how to use a debugger (or produce GUI's... and this was the late 90's). Students code was a mess. I think writing your code, then stepping through each execution path with a debugger, is a good policy. 13:52 (quit) anonus: Remote host closed the connection 13:53 (join) anonus 13:53 asumu: Shambles_: Our students in intro CS *do* use debuggers. It's just called a stepper and works at the level of the language semantics. 13:54 Shambles_: asumu: I understand what he's saying about viewing everything as a (potentially infinite) state machine. 13:54 asumu: I do think it's useful for people to learn how to use debuggers like gdb and so on. 13:54 asumu: But maybe not in the first course. 13:54 Shambles_: asumu: He made a comment at the end that if you show them the debugger they don't understand recursion. That's what provoked that statement. Also, I love DrRacket's debugger. It's helped a lot with understanding the documentation. 13:55 asumu: I don't remember that part of the talk, so I'll have to watch it again to remember what that means. But programming with "universe" is sort of like designing a state machine. 13:55 asumu: Oh, I'm glad you like the debugger. Any feature requests? I have been thinking of improving how it displays stack frames and such when I get the chance. 13:55 asumu: (I'm not responsible for it, but I just hack on it occasionally since nobody else does) 13:56 asumu: (e.g., the new icons it has for stepping are ones I made) 13:57 Shambles_: asumu: Well, I haven't hit the macro chapter yet, but the biggest thing that has me excited about the debugger is the macros, due to the debugger being well designed, and Scheme's macros being hygenic, you can debug at the macro-level rather than seeing the code it spit out. That's already implemented... 13:57 Shambles_: asumu: I can think of something I'd like, but it may already exist, and it is a strange/obscure feature. 13:58 Shambles_: asumu: Are you familiar with Daikon? 13:58 asumu: Daikon... is that the continuous integration testing thing? 13:58 asumu: Oh, invariant detector? 13:58 Shambles_: asumu: No. It comes with a collection of common invariants, like range, constant,... Yes, that's it. 13:59 asumu: (I am assuming you don't mean the root vegetable used in my native country) 13:59 asumu: I've heard of it, but never used it. 13:59 Shambles_: asumu: Basically it works a bit like 'watch'ing a variable in a debugger. It's just that it tries to 'fit' common invariants to it, which helps you fill out your contracts, since the most common problem people have with contracts is them not being thorough enough. 14:00 Shambles_: asumu: It'd be nice if there were at least some hooks to add such a thing. 14:00 asumu: Oh that's an interesting idea. 14:01 Shambles_: asumu: As I said before, my math statement was a bit of a intentional exaggeration. I actually see things like formal verification as both very interesting and desirable. I've studied a lot of different bug prevention/killing methods, so I tend to know about obscure things like that. 14:02 Shambles_: asumu: I haven't looked at typed racket yet, but it'd be neat if there was a way to add qualified types. I don't like type systems that 'get in my way' (which is how I feel about ML and Haskell), but I like qualified types. 14:03 (quit) netrino_: Read error: Operation timed out 14:03 (join) netrino_ 14:04 Shambles_: asumu: You can use them to track the movement of data about the system, like Perl's taint mode. It's handy for finding potential security holes, like where you take user input without sanitizing it (the sanatizer removing the 'taint' qualifier) it first. You can also use it to do things like preventing file handle leaks. CQual is probably the best existing example. 14:06 Shambles_: asumu: This might be of interest, if you like that idea: http://www.cs.umd.edu/~jfoster/cqual/#apps 14:12 Shambles_: asumu: Type system wise (not really the debugger I know), Cobra-style null reference handling would be nice. Cobra is the only language I've seen with that feature. It basically assures you can't ever dereference a null, statically. http://cobra-language.com/docs/quality/ 14:13 (quit) dented42: Ping timeout: 244 seconds 14:15 Shambles_: asumu: I honestly can't think of anything else for bug killing that Racket doesn't already come with. It's actually still rather rare for a language to support design by contract. You've got that and unit testing already... A really good debugger. 14:16 Shambles_: asumu: Hmm. I'm pretty sure I saw a time profiler. Is there a memory profiler? 14:18 Shambles_: asumu: Looks like there's no memory profiler, and the time profiler is just a API. That could maybe use some love. 14:25 (quit) ivan\: Ping timeout: 240 seconds 14:27 (join) ivan\ 14:31 DanBurton: Doesn't Typed Racket's "case" convey type information the same way "cond" does? 14:37 spanner: Do 'serious' Racket programmers use DrRacket? I want to know if it's worth it for me to learn all the key-bindings, given that I'm usually a Vimmer. Although DrRacket looks like it's got quite a lot of extra features that Vim+command line don't, so it's probably worth learning anyway. 14:42 friscosam: I think serious Racket Programmers use DrRacket,emacs,and vim 14:42 friscosam: iirc many of the core devs use drracket 14:45 spanner: Yeah, it looks good. I was just curious whether it was mainly aimed at an educational audience, but I guess it's targeted more broadly. 14:48 (quit) sharkbir1: Remote host closed the connection 14:50 Shambles_: I hope I didn't kill asumu with Shambles rambles. 14:57 DanBurton: what is the syntax for defining a function that takes any number of arguments and collects them into a list? 14:58 DanBurton: in Typed Racket it is (define: (func [arg1 : type1] [arg2 : type2] rest-args : type-rest *) blah blah) 14:58 DanBurton: but I can't figure out what it is for regular Racket 14:59 Shambles_: DanBurton: I think it's "..." (between the quotes) but I'm trying to find the page for sure. 15:00 DanBurton: oh I found it 15:00 DanBurton: it's (define (func arg1 arg2 . rest-args) blah blah) 15:00 DanBurton: that's weird, I wonder why TR departed from that syntax 15:01 DanBurton: Here's the reference http://docs.racket-lang.org/reference/define.html?q=define&q=fixpoint&q=make-weak-hash&q=case&q=regexp-replace#%28form._%28%28lib._racket/private/base..rkt%29._define%29%29 15:01 rudybot: http://tinyurl.com/7aq4lsm 15:02 jonrafkind: ozzloy, well my experiment with paredit for vim was short lived. there is some delay after you press ( before you can start typing again. i cant live with that 15:03 (join) dented42 15:04 Shambles_: DanBurton: If I understand right it's either ". whatever" at the end of your required arguments to put the others in a list, or just "whatever" without any parens around it if it's all optional. Right? 15:38 (quit) dzhus: Read error: Connection reset by peer 15:43 (join) Shvillr 15:49 (quit) dented42: Quit: Computer has gone to sleep. 15:52 (quit) gf3: Changing host 15:52 (join) gf3 15:56 spanner: Is there a good place to look for small, self-contained, good-quality Racket programs (suitable for newcomers to play around with to supplement the Racket Guide)? 16:00 Shambles_: spanner: There's the "teachpacks" and games that come with racket. The source is included. 16:02 spanner: Shambles_: you mean the HtDP teachpacks? 16:02 Shambles_: spanner: Yeah. There's also this, if you want to mess with Whalesong: http://hashcollision.org/whalesong/ [demos near the top] 16:04 (quit) bluezenix: Quit: Leaving. 16:04 Shambles_: spanner: And this: http://world.cs.brown.edu/1/ 16:06 spanner: Shambles_: thanks! 16:06 Shambles_: spanner: I hope it helps some. 16:06 spanner: Also, is anyone here involved with the Realm of Racket project? 16:07 spanner: (I was wondering if it's really going to be published this Summer) 16:07 Shambles_: spanner: I think they come by sometimes, but I haven't heard from them. Yes, I'm waiting for the book too. The websites have gotten really quiet. 16:07 (join) bluezenix 16:08 spanner: Well I'm currently working through HtDP & the Guide simultaneously, so that should keep me busy for a while 16:09 spanner: but RoR sounds exciting 16:09 (join) anRch 16:09 spanner: unfortunate abbreviation though ;) 16:11 spanner: there were also some Racket entries on Rosetta Code, but apparently they're being folded back into the Scheme section, which is a pity. 16:13 (join) dented42 16:16 spanner: In case anyone's interested, and speaking as a relative programming novice, having code on sites like Rosetta Code, langref.org, and PLEAC would be good ways to increase exposure to and interest in Racket. 16:19 asumu: spanner: Yeah, it's annoying that they chose to fold Racket into Scheme. 16:20 spanner: If I get good enough, I'd be happy to submit code to those sites as a way of contributing back. I assume I could paste it here first for criticism and improvement suggestions? 16:20 asumu: Considering that they probably have novelty languages separately. 16:20 asumu: Sure. 16:20 asumu: We'd be happy to comment. 16:20 spanner: Nice. That's a good motivating goal for me. 16:20 (quit) DanBurton: Quit: leaving 16:25 (join) bitonic 16:25 (quit) kanak: Quit: Leaving. 16:25 (quit) antithesis: Remote host closed the connection 16:26 (quit) dented42: Quit: Textual IRC Client: http://www.textualapp.com/ 16:26 (join) jeapostrophe 16:26 (quit) jeapostrophe: Changing host 16:26 (join) jeapostrophe 16:30 spanner: asumu: the Rosetta Code talk page for Racket (http://rosettacode.org/wiki/Category_talk:Racket) kind of leaves the discussion of whether Racket should have its own page unresolved. The argument against was that Racket is just another Scheme variant. Maybe if someone convinced them that it is in fact a separate language, we could get it separated again? 16:31 (join) antithesis 16:32 asumu: jonrafkind: I like emacs + evil-mode + paredit. 16:33 (quit) Shvillr: Read error: Connection reset by peer 16:35 (join) mye_ 16:39 (quit) mye__: Ping timeout: 245 seconds 16:39 jrslepak_neu: is there a canonical reference for differences between Racket and Scheme? 16:41 (join) bremner 16:41 (join) bremner_ 16:43 asumu: jrslepak_neu: I don't think so. Why? 16:43 asumu: (also depends on if by Scheme you mean R6RS or what) 16:44 jrslepak_neu: well... what do the RosettaCode folks mean by "Scheme"? 16:46 asumu: Ah, well there's this http://racket-lang.org/new-name.html but that's maybe not that helpful. 16:46 asumu: Otherwise, if by "Scheme" they mean "R6RS" there is a lot of stuff you can just enumerate that it doesn't have. 16:47 (join) Shvillr 16:47 getpwnam: Is 'The Little Schemer' book good for someone who specifically wants to learn Racket? 16:47 asumu: Delimited continuations, syntax-parse, the class system, units, concurrency mechanisms, contracts, pattern matching. That's a pretty decent list. 16:48 asumu: getpwnam: It will teach you programming ideas that are also applicable to Racket. 16:48 asumu: It won't teach you Racket idioms per se, so it depends on what you're after. 16:49 getpwnam: well I've heard that it's a good intro to 'the LISP way of thinking' 16:49 getpwnam: of course I'll read the Racket docs too 16:49 asumu: Yes, it is. Depending on whose "Lisp way of thinking" you mean. :) 16:49 (quit) jacius: Quit: Leaving 16:51 getpwnam: okay. I just wanted to make sure it wouldn't send me too far off course. 16:51 (part) stis 16:52 ozzloy: eli, "brogrammers" made me laugh 16:53 ozzloy: jonrafkind, oh bummer. maybe switch to emacs + vi emulation? 16:53 ozzloy: jonrafkind, to get paredit back 16:53 ozzloy: jonrafkind, also to try geiser and flymake 16:53 jonrafkind: what does flymake do 16:53 ozzloy: eli, btw, flymake is badass and thanks for that 16:54 ozzloy: jonrafkind, flymake highlights errors in your code as you type 16:54 ozzloy: saves your buffer to a temp file and compiles, highlights errors 16:55 ozzloy: jonrafkind, he didn't make flymake, he made it work for racket 16:55 jonrafkind: but racket rarely gives source location information for errors 16:55 ozzloy: racket -qf filename.rkt 16:55 ozzloy: i think, looking at the code in my ~/.emacs 16:56 jonrafkind: how does flymake get the source location information? 16:56 Shambles_: asumu: Did you see my messages about tools for offing bugs earlier? 16:56 asumu: Oh, so flymake basically gives you something like online check syntax for emacs? 16:57 asumu: Shambles_: Yeah, I saw them but hadn't gotten around to reading them in detail. 16:57 Shambles_: asumu: Okay. :) 16:57 ozzloy: asumu, yes 16:57 eli: ozzloy: It's especially common in ruby circles, and I find it distasteful. (I don't know why ruby makes people have that attitude.) 16:57 ozzloy: jonrafkind, i believe it parses the output 16:58 jonrafkind: so it sounds useless 16:58 asumu: I seem to recall there was some good profiling somewhere... let me see... 16:58 ozzloy: jonrafkind, useless? online syntax checking is useless? 16:59 asumu: Shambles_: http://permalink.gmane.org/gmane.comp.lang.racket.user/11180 dyoo describes using the profiler here. 16:59 jonrafkind: you said it highlights compile errors 16:59 eli: asumu: It's a hack that is kind of like the on-line check syntax, if you're willing to squint at the use of a periodic process to do the checking, and the usual error output as the indication that something is wrong. 16:59 jonrafkind: based on source location information, which doesn't exist 16:59 eli: jonrafkind: xxx:3:0: define: bad syntax (missing expression after identifier) in: (define x) 16:59 ozzloy: jonrafkind, source location does exist 17:00 eli: ":3:0" is the source location. 17:00 jonrafkind: cool. well tell that to all my programs which never produce any source location errors 17:00 jonrafkind: id copy/paste my current error except xterm just broke 17:00 jonrafkind: but it says 'format-id: expected blah...' and thats it 17:00 ozzloy: jonrafkind, tell your source programs -qf 17:01 eli: jonrafkind: That would (probably) be bad macro code which should check its inputs. 17:01 jonrafkind: ozzloy, those options have nothing to do with it 17:01 ozzloy: oh 17:02 jonrafkind: eli, regardless of whether thats true or not i still dont get source location information 17:02 jonrafkind: anyway im not really sure what you mean since format-id is just a function 17:03 eli: jonrafkind: The idea is to check the syntax, by evaluating the module declaration (hence the -f flag), and show syntax errors. 17:03 eli: My guess is that you use `format-id' in a macro, and therefore you have a macro that is misbehaving. 17:03 jonrafkind: so the source location will point at the macro? 17:03 eli: IOW, it's not a syntax error, it's a runtime error that happens at syntax time. 17:03 jonrafkind: ok that is even more confusing. 'syntax error' in racket is ambiguous to begin with 17:04 jonrafkind: i thought it exactly meant a runtime error at syntax time 17:04 eli: That's a bit bogus to say, so a more accurate description is that you have a bad macro, 17:04 eli: instead, it should identify cases with bad inputs and throw a proper syntax error. 17:04 eli: That still doesn't help you as the macro author -- but as such you're hacking inside the compiler... 17:04 jonrafkind: anyway i tried -qf but it didn't produce anything different. probably because the module that has the error is require'd by the module im loading with -qf 17:05 eli: If my guess is correct (that you're using it inside a macro) then yes, it wouldn't help. 17:06 eli: BTW, "syntax error" in racket is not ambiguous -- it's part of a well documented and very useful API. 17:06 eli: A syntax error is raised by a proper macro definition when its input is bad. 17:06 jonrafkind: so if I threw a raise-syntax-error I would presumably get line information fromt he macro that throws it? as opposed to whatever error is being thrown by format-id? 17:06 eli: A runtime error at the macro level shouldn't happen -- you've basically implemented a buggy compiler plugin. 17:07 (quit) anRch: Quit: anRch 17:07 jonrafkind: but the point of procedural macros is i can write "runtime" code at syntax time 17:07 jonrafkind: so now you say there is a dichotomy between runtime and macro time and that I have to be much more careful at macro time? 17:07 jonrafkind: should I wrap all my macros with (with-handlers) and reraise a syntax-error when i get a runtime error? 17:08 eli: No, and no. 17:08 eli: It (the bad use of `format-id') is a runtime error -- a bug in the macro. 17:08 jonrafkind: yes 17:09 (quit) anonus: Ping timeout: 264 seconds 17:09 jonrafkind: so you're saying i shouldnt have bugs in macros? 17:09 eli: If you transfer that to, say, devstudio, then you have a compiler plugin that you hooked into the visual c++ compiler, but your plugin (which is written in C) segfaults. 17:09 eli: So the pluging is buggy. 17:09 jonrafkind: yes! im trying to fix my plugin! 17:09 jonrafkind: i dont understand your advice. i if i was capable of writing bug-free code I would probably be a billionaire by now 17:10 eli: Right, that's what I'm saying -- and a check-syntax tool is not something that would help you when you're writing parts of the compiler. 17:10 (quit) hash_table: Ping timeout: 250 seconds 17:10 (quit) jonathansizz: Ping timeout: 250 seconds 17:10 (quit) getpwnam: Ping timeout: 250 seconds 17:10 jonrafkind: right, which is why i said it was useless (well effectively thats what i was saying) 17:11 eli: It's often useless in >>your<< case. 17:12 eli: Most people don't write macros. 17:12 eli: And when they do, most people use simple macros so it's not an issue. (Consider `syntax-rules' -- it can't throw such a malformed runtime error.) 17:13 jonrafkind: whats the reason macros dont generate source location information for errors again? the expansion process strips them or something? 17:14 eli: There is no source, since it's not a syntax error. 17:14 eli: rudybot: (car 1) 17:14 rudybot: eli: your sandbox is ready 17:14 rudybot: eli: error: car: expects argument of type ; given: 1 17:14 eli: Like that. 17:14 eli: rudybot: (define 1 car) 17:14 rudybot: eli: error: #:1:8: define: bad syntax at: 1 in: (define 1 car) 17:14 eli: Not like that. 17:14 eli disappears 17:15 jonrafkind: yea but if you run a module with (car 1) with errortrace you can get source location information for the error 17:15 jonrafkind: but it doesnt work with macros 17:15 Shambles_: asumu: Thanks for the link. It might still be nice to have some sort of GUI profiler. Most development environments do. And there's still the issue of memory profiling (does things like show you the percentage of types of things allocated, and possibly lets you browse the allocation tree, which is nice for finding leaks, which you can still have in a GC language by holding references you don't need). 17:22 (join) anonus 17:26 (join) RacketCommitBot 17:26 RacketCommitBot: [racket] plt pushed 37 new commits to master: http://git.io/3FiG6w 17:26 RacketCommitBot: [racket/master] Move unstable/generics to generics. - Asumu Takikawa 17:26 RacketCommitBot: [racket/master] Let provider of generics check if a method exists - Asumu Takikawa 17:26 RacketCommitBot: [racket/master] Reimplement racket/dict using generics. - Asumu Takikawa 17:26 (part) RacketCommitBot 17:29 (quit) antithesis: Quit: yes leaving 17:33 (quit) netrino_: Quit: Ave! 17:38 (quit) jonrafkind: Ping timeout: 252 seconds 17:48 (join) sstrickl 17:50 (join) zyoung_ 17:51 (quit) jesyspa: Quit: leaving 17:54 (quit) zyoung: Ping timeout: 260 seconds 17:59 (join) jonathansizz 17:59 (join) getpwnam 18:00 (join) hash_table 18:14 (quit) jeapostrophe: Ping timeout: 245 seconds 18:19 (join) jonrafkind 18:20 (quit) zyoung_: Remote host closed the connection 18:33 (quit) cdidd: Remote host closed the connection 18:47 (join) jeapostrophe 18:47 (quit) jeapostrophe: Changing host 18:47 (join) jeapostrophe 19:04 (quit) jeapostrophe: Ping timeout: 248 seconds 19:05 (join) yoklov 19:06 yoklov: gah, why is the get-pixel method in bitmap-dc% so annoying! 19:07 yoklov: i have to pass it a color and it mutates that color? 19:07 yoklov: :| 19:13 (join) jrslepak 19:15 (join) nilyaK 19:15 (quit) bluezenix: Quit: Leaving. 19:26 eli: jonrafkind: The reason errortrace doesn't for macros is obvious: 19:27 eli: it's annotating the fully-expanded code, and the error that you get happens at that expansion. 19:27 (quit) bitonic: Quit: WeeChat 0.3.7 19:46 (quit) mceier: Quit: leaving 19:53 (join) _gcr 19:54 (join) dnolen 19:55 _gcr: Hey so um, I'm trying to use racket/serialize according to http://docs.racket-lang.org/reference/serialization.html?q=serialize#(def._((lib._racket/private/serialize..rkt)._deserialize)) and by the third bullet point, custom serializable structure types include a "quoted module path" pointing to a module that provides the serialized structure's serialization info 19:55 _gcr: In my tests, that's a full filesystem path 19:55 _gcr: which isn't good when I send serialized structures across the network to a different machine 19:56 _gcr: Is there a sane way to, erm, strip off the absolute parts in that path? 19:56 (quit) sstrickl: Quit: sstrickl 19:57 _gcr: See I'd love to send a serialized struct to a different machine but I'd want to be able to deserialize that struct if the important module is in a different place in the filesystem 19:58 _gcr: Oy, this might just be a mailing list question 20:00 (join) kvda 20:09 (quit) nilyaK: Quit: Leaving. 20:11 (join) random_malice 20:11 (join) wee-fella 20:12 (join) bro_grammer 20:13 (quit) jonathansizz: Ping timeout: 240 seconds 20:13 (quit) hash_table: Ping timeout: 245 seconds 20:13 (quit) getpwnam: Ping timeout: 245 seconds 20:17 (join) hash_table 20:17 (join) bro_grammer_ 20:17 (join) axe_wielder 20:18 (quit) yoklov: Quit: computer sleeping 20:19 (join) sizz_ 20:20 (quit) wee-fella: Ping timeout: 245 seconds 20:20 (quit) peeeep: Ping timeout: 256 seconds 20:20 (quit) sizz: Ping timeout: 248 seconds 20:20 (quit) bro_grammer: Ping timeout: 265 seconds 20:20 (quit) random_malice: Ping timeout: 265 seconds 20:20 (join) peeeep 20:23 (quit) masm: Quit: Leaving. 20:26 (join) getpwnam 20:26 (join) jonathansizz 20:26 (join) bro_grammer 20:31 (join) spanner_ 20:34 (join) sizz 20:37 (quit) spanner: Ping timeout: 265 seconds 20:37 (quit) cipher-: Ping timeout: 265 seconds 20:37 (quit) jrslepak: Ping timeout: 265 seconds 20:37 (quit) tauntaun_: Ping timeout: 265 seconds 20:37 (quit) hyko: Ping timeout: 265 seconds 20:37 (quit) rajathshetty: Ping timeout: 265 seconds 20:37 (quit) axe_wielder: Ping timeout: 260 seconds 20:37 (quit) bro_grammer_: Ping timeout: 260 seconds 20:37 (quit) hash_table: Ping timeout: 260 seconds 20:37 (join) jamessan 20:37 (join) hyko- 20:37 (join) tauntaun 20:38 (quit) sizz_: *.net *.split 20:38 (quit) shawnps: *.net *.split 20:38 (quit) m4burns: *.net *.split 20:38 (quit) dsantiago: *.net *.split 20:38 (quit) friscosam: *.net *.split 20:38 (quit) jschuster: *.net *.split 20:38 (quit) cataska_: *.net *.split 20:38 (join) gridapho_ 20:39 (quit) bremner: *.net *.split 20:39 (quit) jrslepak_neu: *.net *.split 20:39 (quit) gf3: *.net *.split 20:39 (quit) danking: *.net *.split 20:39 (quit) peeeep: *.net *.split 20:39 (quit) rapacity: *.net *.split 20:39 (quit) maahes: *.net *.split 20:39 (quit) dnolen: *.net *.split 20:39 (quit) Shviller: *.net *.split 20:39 (quit) cky: *.net *.split 20:39 (quit) stamourv: *.net *.split 20:39 (quit) Haffe: *.net *.split 20:39 (quit) kvda: *.net *.split 20:39 (quit) bro_grammer: *.net *.split 20:39 (quit) jonathansizz: *.net *.split 20:39 (quit) getpwnam: *.net *.split 20:39 (quit) sid0: *.net *.split 20:39 (quit) noam: *.net *.split 20:39 (quit) igibson: *.net *.split 20:39 (quit) tewk: *.net *.split 20:39 (quit) stchang: *.net *.split 20:39 (quit) gridaphobe: *.net *.split 20:39 (quit) wtetzner_: *.net *.split 20:39 (quit) DraX: *.net *.split 20:39 (quit) SeanTAllen: *.net *.split 20:39 (quit) ChibaPet: *.net *.split 20:39 (quit) ChanServ: *.net *.split 20:40 Shambles_: _gcr: I'm not a Racket whiz yet, but a quoted module path is usually relative. Are you sure it has to be a full path? 20:41 (quit) gridapho_: Remote host closed the connection 20:41 (join) gridaphobe 20:42 (join) jschuster 20:42 (join) cataska_ 20:42 (join) shawnps 20:42 (join) m4burns 20:42 (join) dsantiago 20:42 (join) friscosam 20:44 (join) Guest7666 20:44 (join) peeeep 20:44 (join) random_malice 20:44 (join) bro_grammer__ 20:44 (join) kvda 20:44 (join) dnolen 20:44 (join) bremner 20:44 (join) Shviller 20:44 (join) wtetzner_ 20:44 (join) DraX 20:44 (join) cky 20:44 (join) rapacity 20:44 (join) sid0 20:44 (join) em 20:44 (join) maahes 20:44 (join) SeanTAllen 20:44 (join) noam 20:44 (join) jrslepak_neu 20:44 (join) stamourv 20:44 (join) igibson 20:44 (join) tewk 20:44 (join) Haffe 20:44 (join) ChibaPet 20:44 (join) samth_away 20:44 (join) danking 20:44 (join) gf3 20:44 (join) stchang 20:44 (join) ChanServ 20:44 _gcr: Shambles_: That's what (serialize) returns. Take a look in the example: http://blog.racket-lang.org/2009/06/serializable-closures-in-plt-scheme.html 20:44 rudybot: http://tinyurl.com/c3tl45c 20:44 _gcr: Shambles_: See the #"/Users/jay/Dev/svn/plt/collects/web-server/exp/test-serial.ss" path in the output there? That's what I'm talking about 20:44 (quit) shawnps: *.net *.split 20:44 (quit) m4burns: *.net *.split 20:44 (quit) dsantiago: *.net *.split 20:44 (quit) friscosam: *.net *.split 20:45 _gcr: and I'm looking for a way of converting that absolute path into a relative path 20:45 (nick) tauntaun -> Guest4858 20:46 (join) jrslepak 20:50 Shambles_: _gcr: I'm assuming you don't want to convert it after-the-fact... That is odd, because what the guide shows doesn't look like that. 20:50 Shambles_: _gcr: Like a prefab struct looks like: '#s((cute-cat cat 1) "Nermel" "Abu Dhabi") 20:51 (join) shawnps 20:51 (join) m4burns 20:51 (join) dsantiago 20:51 (join) friscosam 20:53 (quit) aalix: 20:54 _gcr: Shambles_: Right; this happens with serializable structs (see http://docs.racket-lang.org/reference/serialization.html?q=serializable&q=serialize#(form._((lib._racket/serialize..rkt)._serializable-struct)) ) 20:54 rudybot: http://tinyurl.com/bwhv75f 20:54 _gcr: and though prefab structs are serializable, not all serializable structs are prefab 20:56 Shambles_: _gcr: Sorry I'm not much help. Maybe someone else can. 20:57 _gcr: Shambles_: Nah, I'll take all the help I can get, haha. Thanks :) 20:57 Shambles_: _gcr: It might not be practical, but maybe you could use transparent or prefab structs instead of classes, at least if there's not a easy fix. 21:05 (join) zyoung 21:25 (quit) dnolen: Remote host closed the connection 21:27 (join) dnolen 21:28 (quit) jamessan: Changing host 21:28 (join) jamessan 21:35 (quit) shawnps: Remote host closed the connection 21:45 (join) nilyaK 21:53 (join) RacketCommitBot 21:53 RacketCommitBot: [racket] plt pushed 1 new commit to master: http://git.io/7zVGyg 21:53 RacketCommitBot: [racket/master] 1d, 2d and 3d function renderers no longer sample outside the function's bounds - Neil Toronto 21:53 (part) RacketCommitBot 22:04 (join) sstrickl 22:06 (join) jyc 22:13 (quit) dnolen: Ping timeout: 252 seconds 22:22 (quit) nilyaK: Quit: Leaving. 22:36 (join) RacketCommitBot 22:36 RacketCommitBot: [racket] plt pushed 1 new commit to master: http://git.io/qvpuCQ 22:36 RacketCommitBot: [racket/master] Made (require plot) more obvious in the plot introduction (suggested by Jens Axel Søgaard) - Neil Toronto 22:36 (part) RacketCommitBot 22:51 _gcr: Is it safe to have a remote TCP server just (read) on the network port? Like just shuttle s-exps back and forth with (read)? 22:51 _gcr: or is there some weird reader strangeness there that could cause security vulnerabilities? 23:04 (quit) danking: Ping timeout: 276 seconds 23:04 chandler: _gcr: I think the primary issue would be an attacker causing your system to use a large amount of memory. 23:04 (join) danking 23:04 chandler: You could sandbox the call to (read) to limit the amount of resources (CPU time and memory) used. 23:05 _gcr: chandler: Ah, hm. mzlib/thread's (run-server) does assign a new custodian. Could I just limit that custodian's memory? 23:06 chandler: I think that'd do the trick. 23:06 _gcr: OK, thanks 23:09 (join) jyc_ 23:10 (join) jyc__ 23:13 (quit) jyc: Ping timeout: 265 seconds 23:14 (quit) jyc_: Ping timeout: 245 seconds 23:18 (quit) karswell: Remote host closed the connection 23:21 (quit) danking: Read error: Operation timed out 23:21 (join) danking 23:28 (quit) kvda: Quit: x__x 23:28 (join) karswell 23:31 (part) _gcr: "ERC Version 5.3 (IRC client for Emacs)" 23:49 (join) antithesis