00:01 asumu: joebob: that's ok. Feel free to ask more questions. 00:07 (join) mithos28 00:26 em: can anyone think of a clever way for a computer program to determine the public ip of the computer it is running on, without using any third party website? 00:26 mithos28: What do you mean by public ip? 00:26 em: like when i ssh to my machine I use the public ip to do that. ssh em@24.etc.etc.etc 00:27 em: i think the public ip is the one that shows up when we are on irc without a hostmask too 00:27 em: the public ip is the one that http://whatismyip.org gives you 00:28 em: but naturally you don't want to have to hope that a website like that exists for as long as people are using your program 00:28 em: so hopefully there is some clever way for a program to figure out what the ip is. 00:29 mithos28: I don't understand what the distinguishing factor between that IP and the IP you likely have behind your router is 00:31 mithos28: I'm trying to understand how you would validate a function that supposedly returned your public IP 00:33 em: i may be wrong about this, but say I wanted to send you a file directly from my machine to yours. I think I will need what I am calling your 'public ip'. 00:34 em: if you for example go to the website: http://wimi.com it will tell you your public address 00:34 mithos28: The issue is that many machines behind the same network may have the same public ip 00:35 em: the question is could you figure out your public ip address without relying on a website like wimi.com ? 00:35 em: well yeah 00:35 em: but in that case the person will do some sort of port forwarding I think. 00:36 mithos28: Right so you will also need the right ports 00:36 mithos28: What I assume you want to do, is to take two computers and have them talk directly to each other? 00:36 em: yeah 00:36 em: over the internet 00:38 mithos28: How will the computers discover one another? 00:38 em: the users will share public ip addresses with one another. Perhaps in an email or something. 00:39 em: but it is asking a lot of a user to 'go find your ip address'. I'm trying to be user friendly. It would be nice if the program could determine it to make that easier on a user. 00:40 (join) jeapostrophe 00:40 (quit) jeapostrophe: Changing host 00:40 (join) jeapostrophe 00:41 mithos28: http://stackoverflow.com/questions/905406/obtaining-own-external-ip-address-in-posix-c 00:41 rudybot: http://tinyurl.com/d3bawze 00:43 mithos28: I don't think the question makes any sense still. I don't think such an IP number exists, any number you get could be only valid for that one connection, and that would still be following the spec. 00:45 asumu: BTW, I think it's nice that Google will tell you your IP if you look up "what is my ip" 00:45 asumu: They even show you your IPv6 if you're going through that. 00:46 jonrafkind: i bet 'whatismyip.com' took a big hit 00:47 em: asumu: yes i saw that, and that is nice, and if it turns out that the only way to get a public ip is to ask some other website i guess i would code it to ask google since google seems likely to exist for as long as people use my program 00:47 mithos28: em: The only issue would be parsing the results page 00:47 em: i dont feel so confident that i can count on 'whatismyip.com' existing for as long as people use my program 00:47 mithos28: as that will change a lot 00:48 em: yeah you never know if you can trust their results format 00:48 em: mithos28: i dont understand what's confusing about my question. 00:48 em: everyone knows that we all have a public ip 00:49 em: i may be wrong but i think our public ip is what shows up here in irc if we don't use a hostmask 00:49 mithos28: That is a public ip which works for the irc connection. 00:49 asumu: You could write an FFI to a C library that implements NAT traversal and the like: e.g, http://nice.freedesktop.org/wiki/ 00:49 em: .. 00:50 mithos28: I'm claiming that it would be valid for that ip on any other port to not connect to my machine 00:51 (quit) jeapostrophe: Ping timeout: 264 seconds 00:54 em: im assuming that you want people to contact you 00:54 em: you want to be able to give them a public ip that they can use to communicate via my program 00:55 em: im assuming that my user might be computer illiterate and asking them to (1) figure out your ip address and exchange it with your friend, might be prohibitively difficult for them 00:55 em: if my program had a way to at least figure out their ip for them, that would make it easier. 01:02 (quit) mithos28: Quit: mithos28 01:05 (quit) joebob: Quit: Page closed 01:07 (join) Nisstyre 01:10 (join) mithos28 01:13 (join) crundar 01:14 (quit) jao: Ping timeout: 244 seconds 01:19 (join) mhi^ 01:34 (join) zwak 01:35 (join) form3 01:36 (join) sklentikle 01:47 (quit) hash_table: Ping timeout: 246 seconds 01:51 (join) crundar__ 01:55 (quit) crundar: Ping timeout: 244 seconds 02:11 (join) lewis1711 02:18 asumu: I've finally figured how to use make-syntax-introducer and why I'd want to use it. 02:19 jonrafkind: nice 02:19 jonrafkind: I used it once 02:21 jonrafkind: looks like i ripped it out though 02:21 (join) mceier 02:22 (quit) crundar__: Read error: Connection reset by peer 02:27 (join) bitonic 02:38 (join) hkBst 02:38 (quit) hkBst: Changing host 02:38 (join) hkBst 02:41 jonrafkind: man, no triangle in slideshow/pict 02:52 (quit) jyc_: Remote host closed the connection 02:52 lewis1711: rackets class system makes very little sense 02:54 (join) thebifnif 03:07 (join) djcoin 03:09 (quit) mithos28: Quit: mithos28 03:10 (quit) pcavs: Quit: Leaving. 03:11 (join) mithos28 03:13 (join) pcavs 03:14 jonrafkind: lewis1711, you mean the augride, pubment, stuff like that? 03:14 (quit) mithos28: Client Quit 03:23 lewis1711: jonrafkind: every time I try and use it I leave scratching my head. 03:23 jonrafkind: yea me too 03:23 jonrafkind: if you stick to just define and define/override you can do alright 03:24 lewis1711: super-new :/ 03:24 jonrafkind: ah yea that too 03:24 jonrafkind: and the way fields are setup is strange sometimes 03:24 jonrafkind: (field) (init-field) (define) 03:24 jonrafkind: i guess you should find something that works and just stick to it 03:25 jonrafkind: dont try to understand or use the whole system 03:49 (quit) jrslepak: Ping timeout: 268 seconds 03:49 (quit) maahes: Ping timeout: 240 seconds 03:50 (quit) thebifnif: Quit: Leaving 03:56 (join) jrslepak 03:56 lewis1711: I think I might just do some syntax sugar with hash tables instead 04:00 (join) maahes 04:04 (quit) noisetonepause: Ping timeout: 268 seconds 04:05 lewis1711: rudybot: (define-syntax-rule (record name . slots) (begin (define (name key) (hash-ref (make-hash slots) key)))) 04:05 rudybot: lewis1711: your sandbox is ready 04:05 rudybot: lewis1711: Done. 04:05 lewis1711: rudybot: (record coord '(x . 1)) 04:05 rudybot: lewis1711: Done. 04:05 lewis1711: rudybot: (coord 'x) 04:05 rudybot: lewis1711: error: procedure application: expected procedure, given: '(x . 1) (no arguments) 04:06 lewis1711: like that, except working :) 04:07 (join) mye 04:09 mye: when I used 'Jump to Binding Occurrence' in DrRacket, is there a way to jump back to where I left? 04:11 (quit) ivan\: Quit: ERC Version 5.3 (IRC client for Emacs) 04:22 (quit) pcavs: Quit: Leaving. 04:32 (join) neilv 04:59 (quit) jonrafkind: Ping timeout: 256 seconds 05:06 (join) gciolli 05:11 (quit) mye: Quit: mye 05:20 (join) ivan\ 06:03 (join) Znudzon 06:03 neilv: hm. i have a process created with "subprocess", and i think i want any stdout or stderr to go to a racket logger 06:04 (join) jesyspa 06:04 neilv: i guess i just start a thread that syncs on the two input ports and turns each line into a log-debug call 06:31 (part) lewis1711 06:32 (join) noisetonepause 06:52 (quit) gciolli: Read error: Connection reset by peer 06:55 (join) masm 06:57 neilv: if drracket gets a flood of log messages, clicking stop repeatedly won't stop it 07:08 (join) gciolli 07:15 (join) carleastlund 07:15 (quit) gciolli: Quit: Leaving. 07:15 (join) gciolli 07:38 (quit) carleastlund: Quit: carleastlund 07:41 (join) jeapostrophe 07:41 (quit) jeapostrophe: Changing host 07:41 (join) jeapostrophe 08:02 (quit) noisetonepause: Ping timeout: 246 seconds 08:07 (join) crundar 08:10 (join) pcavs 08:12 (join) RacketCommitBot 08:12 RacketCommitBot: [racket] plt pushed 1 new commit to master: http://git.io/fIq4eQ 08:12 RacketCommitBot: [racket/master] add syntax error check when the arrow in a reduction - Robby Findler 08:12 (part) RacketCommitBot 08:32 (quit) pcavs: Quit: Leaving. 08:34 (join) carleastlund 08:35 (quit) masm: Quit: Leaving. 08:38 (join) masm 08:43 (join) pcavs 08:47 neilv: core: ELF 32-bit LSB core file Intel 80386, version 1 (SYSV), SVR4-style, from '/usr/local/racket-5.3/bin/gracket -N /usr/local/racket-5.3/bin/drracket -J DrRa' 08:47 neilv: haven't had that happen in a while 08:55 (join) hash_table 09:06 (quit) masm: Quit: Leaving. 09:08 (quit) Nisstyre-laptop: Ping timeout: 256 seconds 09:14 (join) masm 09:15 (join) crundar__ 09:16 (quit) jeapostrophe: Ping timeout: 244 seconds 09:19 (quit) crundar: Ping timeout: 248 seconds 09:22 (quit) crundar__: Ping timeout: 252 seconds 09:27 (join) RacketCommitBot 09:27 RacketCommitBot: [racket] plt pushed 1 new commit to master: http://git.io/a_H-Mg 09:27 RacketCommitBot: [racket/master] sqrt 2 to show #i numbers - Matthias Felleisen 09:27 (part) RacketCommitBot 09:27 (quit) hash_table: Ping timeout: 246 seconds 09:39 (quit) Znudzon: Quit: Leaving 09:43 (join) samth 09:43 (quit) samth: Changing host 09:43 (join) samth 09:45 (quit) Nisstyre: Ping timeout: 248 seconds 10:00 (join) Nisstyre 10:11 (join) mye 10:27 (quit) mceier: Quit: leaving 10:36 (join) Shviller 10:37 (join) jeapostrophe 10:37 (quit) jeapostrophe: Changing host 10:37 (join) jeapostrophe 10:42 (join) hash_table 10:42 (join) noisetonepause 11:14 (join) crundar 11:15 (quit) noisetonepause: Read error: Connection reset by peer 11:24 (join) noisetonepause 11:36 (join) anRch 11:41 (join) Jeanne-Kamikaze 11:43 (join) ssbr_ 11:48 (join) joebob 11:49 joebob: can anyone help me interpret this line? (if (= a 0) (f2 b) (f4 (- a 1) (f5 (- a 1) b) b)) 11:50 joebob: im stuck on (f4 (- a 1) (f5 (- a 1) b) b)) really 11:51 ianjneu: f4 takes 3 arguments 11:51 ianjneu: 1st is a - 1, last is b, the middle is a call to f5, a 2 argument function, with a - 1 and b. 11:53 joebob: ok it's clear now. thanks 11:57 (quit) jrslepak: Quit: What happened to Systems A through E? 12:04 (quit) pcavs: Quit: Leaving. 12:09 (quit) hkBst: Quit: Konversation terminated! 12:09 (join) crundar__ 12:10 asumu: Is there a summary of what the new error message format is supposed to be now somewhere? 12:10 asumu: I suspect that scheme_wrong_return_arity has a slightly broken format, but I'm not sure what the standard format is. 12:12 (quit) crundar: Ping timeout: 240 seconds 12:13 (join) RacketCommitBot 12:13 RacketCommitBot: [racket] plt pushed 1 new commit to master: http://git.io/lYxa0Q 12:13 RacketCommitBot: [racket/master] Added $PLT/compiled-root/ to git's ignore list so we have somewhere convenient - Carl Eastlund 12:13 (part) RacketCommitBot 12:13 (join) MayDaniel 12:18 (quit) jeapostrophe: Ping timeout: 244 seconds 12:19 (join) jeapostrophe 12:20 (quit) vu3rdd: Remote host closed the connection 12:32 (join) Demosthenes 12:39 (join) RacketCommitBot 12:39 RacketCommitBot: [racket] plt pushed 2 new commits to master: http://git.io/A_wEow 12:39 RacketCommitBot: [racket/master] syntax/parse/experimental/template: fix ellipses/depth rules again - Ryan Culpepper 12:39 RacketCommitBot: [racket/master] syntax/parse/experimental/template: improve prop handling & syntax checks - Ryan Culpepper 12:39 (part) RacketCommitBot 12:40 mye: asumu: there's something in section 9.2.1 of the docs if that's what you mean 12:43 (join) jonrafkind 12:43 (quit) jonrafkind: Changing host 12:43 (join) jonrafkind 12:44 (join) Kaylin 12:45 (quit) anRch: Quit: anRch 12:47 (join) pcavs 12:47 (quit) ssbr_: Ping timeout: 252 seconds 12:58 (quit) crundar__: Ping timeout: 248 seconds 12:59 (join) ssbr_ 13:07 (quit) mye: Remote host closed the connection 13:08 (join) mye 13:10 (quit) jeapostrophe: Ping timeout: 246 seconds 13:13 (join) jrslepak 13:14 (quit) ssbr_: Ping timeout: 246 seconds 13:15 (join) jeapostrophe 13:15 (quit) jeapostrophe: Changing host 13:15 (join) jeapostrophe 13:16 (quit) jeapostrophe: Remote host closed the connection 13:17 (quit) djcoin: Ping timeout: 248 seconds 13:22 (join) jeapostrophe 13:22 (quit) jeapostrophe: Changing host 13:22 (join) jeapostrophe 13:38 (quit) masm: Ping timeout: 246 seconds 13:39 (join) dzhus 13:39 (quit) neilv: Quit: Leaving 13:49 (quit) Nisstyre: Ping timeout: 264 seconds 13:49 (quit) Jeanne-Kamikaze: Quit: Leaving 13:56 (quit) bitonic: Ping timeout: 244 seconds 14:01 (join) Nisstyre 14:06 (join) mceier 14:23 (join) crundar 14:37 (join) mye_ 14:40 (quit) pcavs: Quit: Leaving. 14:40 (quit) mye: Ping timeout: 246 seconds 14:40 (nick) mye_ -> mye 14:49 (quit) Kaylin: Read error: Connection reset by peer 14:53 (join) crundar__ 14:57 (quit) joebob: Quit: Page closed 14:57 (quit) crundar: Ping timeout: 246 seconds 15:11 (quit) ChanServ: shutting down 15:12 (join) pcavs 15:17 (join) ChanServ 15:24 mye: why doesn't check syntax work for submodules? 15:24 (quit) crundar__: Ping timeout: 260 seconds 15:25 asumu: mye: I think Robby just fixed that recently. 15:26 asumu: So if you try a pre-release build it may work. 15:26 mye: asumu: ah, I thought that may be the case 15:27 (join) masm 15:28 (join) Kaylin 15:32 (part) CoverSlide 15:35 (join) crundar 15:46 (quit) masm: Quit: Leaving. 15:50 (join) snorble_ 15:53 (quit) Kaylin: Read error: Connection reset by peer 15:55 (join) Kaylin 16:02 (quit) dzhus: Ping timeout: 244 seconds 16:06 (quit) pcavs: Quit: Leaving. 16:07 Cryovat: I've been a bit unfaithful recently 16:07 Cryovat: Been leafing through a Haskell book 16:08 Cryovat: Thinking in terms of laziness is a headful :/ 16:08 Cryovat: Coming from a background as an imperative/oo programmer, it's almost harder than thinking in terms of lists 16:12 (quit) samth: Ping timeout: 260 seconds 16:12 ianjneu: Faith is for the weak. 16:15 (join) pcavs 16:19 stamourv: Cryovat: Laziness is tricky. It makes it especially hard to reason about space usage. 16:19 bremner: how often do you need to think about laziness though? 16:20 bremner: (in a lazy language) 16:20 asumu is dealing with a laziness issue right now... 16:22 jonrafkind whips asumu. get back to work! 16:23 asumu: rudybot: (force asumu) 16:23 rudybot: asumu: error: reference to an identifier before its definition: asumu in module: 'program 16:31 Cryovat: bremner: The example in the book (Real World Haskell) was a module for writing JSON 16:31 Cryovat: In the example, they stored two versions of the resulting string in the tree at once 16:31 Cryovat: One with linebreaks, and one "compact" 16:32 Cryovat: It was kind of an epiphany for me, but at the same time hard to accept that neither strings never materialized before you asked for it 16:50 (quit) Shvillr: Quit: bye 16:50 (join) Shvillr 16:50 jonrafkind: hm, its annoying that if I have a colorized pict that I can't recolorize it 16:51 jonrafkind: I guess coloring it destroys some state that can't be overwritten? 16:52 tewk: color it lazily :) 16:59 (quit) crundar: Ping timeout: 268 seconds 16:59 bremner: Cryovat: I guess I tend to think about that kind of thing as syntactic sugar for closures. That doesn't make it easy to analyze, but at least it isn't magic 16:59 (join) crundar 17:01 Cryovat: That makes sense, thanks :) 17:05 (quit) pcavs: Quit: Leaving. 17:12 (join) pcavs 17:16 (quit) crundar: Ping timeout: 248 seconds 17:21 (quit) hash_table: Ping timeout: 244 seconds 17:25 (join) anRch 17:32 (join) crundar 17:36 (quit) jrslepak: Quit: What happened to Systems A through E? 17:41 (quit) jeapostrophe: Ping timeout: 248 seconds 17:43 (quit) gciolli: Quit: Leaving. 17:47 (join) jeapostrophe 17:47 (quit) jeapostrophe: Changing host 17:47 (join) jeapostrophe 18:06 (join) hash_table 18:09 (quit) anRch: Quit: anRch 18:14 (join) Fare 18:25 (join) yoklov 18:29 (quit) yoklov: Client Quit 18:30 (join) yoklov 18:40 (quit) carleastlund: Quit: carleastlund 18:42 (join) jrslepak 18:46 (join) RacketCommitBot 18:46 RacketCommitBot: [racket] plt pushed 4 new commits to master: http://git.io/ck2abA 18:46 RacketCommitBot: [racket/master] Slideshow viewer: "s" and "a" keys navigate next/previous by title - Matthew Flatt 18:46 RacketCommitBot: [racket/master] error message fix - Matthew Flatt 18:46 RacketCommitBot: [racket/master] slideshow/pict: make `colorize' accept list of bytes (as documented) - Matthew Flatt 18:46 (part) RacketCommitBot 18:51 (quit) jeapostrophe: Ping timeout: 260 seconds 18:53 (join) Nisstyre-laptop 19:13 (join) lewis1711 19:17 (quit) jrslepak: Quit: What happened to Systems A through E? 19:22 lewis1711: I have a list of identifiers I pass into a macro "slots ..." 19:23 lewis1711: how can I make them all symbols? 19:24 ianjneu: syntax->datum 19:24 ianjneu: or, easier, '(slots ...) 19:24 ianjneu: if you're in a syntax interpolation context 19:25 lewis1711: ianjneu: that does the trick, thanks 19:26 lewis1711: I had (list slots ...) 19:28 ianjneu: ah 19:28 ianjneu: quote is a lovely beast 19:29 (join) jeapostrophe 19:29 (quit) jeapostrophe: Changing host 19:29 (join) jeapostrophe 19:29 lewis1711: also, what's a good way to implement type predicates? 19:29 lewis1711: like when you make a struct foo, you get foo? 19:29 ianjneu: In typed racket? 19:30 lewis1711: no regular racket. I just mean the procedure that tests a type. like integer? 19:30 lewis1711: but for a custom data type 19:30 lewis1711: my first instinct would be to give each instance a generated uinique id thing, and test that 19:31 ianjneu: uh, so how are you representing your "types"? 19:31 (quit) jesyspa: Quit: leaving 19:32 ianjneu: You just want a function that says yes if it's what you want and no if not. If something is an integer or a string, its predicate is (lambda (x) (or (string? x) (integer? x))) 19:33 ianjneu: structs are generative, so to protect your type abstractions, you should wrap your representation in a 1-field struct and not export it. 19:34 ianjneu: that way only your module has the ability to modify the data structure. 19:36 lewis1711: http://pastebin.com/fJXZTLTB that's the thing I am making 19:36 lewis1711: which is esssentially just a closure over a hashtable 19:36 (join) dyoo 19:37 dyoo: lewis1711: could you reuse the low-level infrrastructure for structs? The make-struct-type function 19:37 dyoo: gives you the pieces for making type-tagged values 19:37 dyoo: http://docs.racket-lang.org/reference/creatingmorestructs.html#(def._((quote._~23~25kernel)._make-struct-type)) 19:37 dyoo: (or you could just use the high-level 'struct' form) 19:39 lewis1711: that looks handy 19:39 (quit) jeapostrophe: Ping timeout: 246 seconds 19:40 dyoo: lewis1711; I'm looking at your record code now. I can't help but feel that someone must have done this before! :) Is the point that the records act like objects with key/value pairs? 19:43 lewis1711: dyoo: I guess the point is I end up making a lot of my own structures like this. so i thought I should write macros to do it for me 19:43 (join) dnolen 19:44 dyoo: ok, I'm trying to see how much of struct you can reuse, since so much of the rest of Racket likes structures... give me a sec 19:47 (join) RacketCommitBot 19:47 RacketCommitBot: [racket] plt pushed 2 new commits to master: http://git.io/D85KWg 19:47 RacketCommitBot: [racket/master] avoid the default handler for call-with-continuation-prompt in - Robby Findler 19:47 RacketCommitBot: [racket/master] remove redunant arguments (they were the same as the default args, in 70-something places) - Robby Findler 19:47 (part) RacketCommitBot 19:48 lewis1711: I dislike structs because each struct has its own referrers. I like the idea of just being able to send a symbol to any struct and get something back 19:48 (join) jrslepak 19:48 lewis1711: though I guess you can do stuff with struct inheritance 19:50 (join) RacketCommitBot 19:50 RacketCommitBot: [racket] plt pushed 2 new commits to master: http://git.io/TgQOew 19:50 RacketCommitBot: [racket/master] change `stream-append' to use its last argument as the result tail - Matthew Flatt 19:50 RacketCommitBot: [racket/master] doc fix - Matthew Flatt 19:50 (part) RacketCommitBot 19:52 dyoo: lewis1711: understood. I'm trying something out... 19:53 (join) carleastlund 19:53 ianjneu: You can just use structs and also make a definition that uses case on the symbols of the fields to dispatch to the accessors. 19:54 ianjneu: Then you get pattern matching too 20:00 dyoo: lewis1711: here, try this out: https://gist.github.com/3759037 20:01 dyoo: it uses structs underneath the surface, but still should have the same interface as what you had earlier. It reuses the predicate we get out of structs 20:02 (quit) MayDaniel: Read error: Connection reset by peer 20:03 dyoo: ... on second though, this might just be too ugly code. Hmm. There's probably a much simpler way to do this. 20:06 lewis1711: wow 20:06 lewis1711: I don't understand most of that but it works really well 20:06 lewis1711: I just finished wrapping my head around "begin" :) 20:07 dyoo: no, I think I overengineered it 20:07 dyoo: I"m looking at it again to see if it can be much simpler 20:07 dyoo: that's the problem with learning macros: then it's all too easy to do the messy solution... :) 20:08 lewis1711: my knowledge of macros is limited to "define-syntax-rules" and "begin" 20:08 (quit) Demosthenes: Ping timeout: 248 seconds 20:10 asumu: Wow, Matthew fixed that stream bug really fast. 20:10 asumu: It took me a long time just to find it. 20:14 dyoo: lewis1711; ok, updated the gist to be a slightly simpler version. It's a bit different because it preserves the existing constructors and such, and also adds in a "new-XXX" constructor 20:18 (part) dyoo 20:41 danl-ndi: is anyone familiar with the config module? loading an ffi module it wants lib-search-dirs to be a path-string but it's #f 20:42 danl-ndi: I'm having trouble figuring out the relationship between setup and config modules...... 20:44 (quit) jonrafkind: Ping timeout: 256 seconds 20:50 (join) billyoc 20:50 (join) jesyspa 20:57 (join) jeapostrophe 20:57 (quit) jeapostrophe: Changing host 20:57 (join) jeapostrophe 21:21 (quit) jesyspa: Quit: leaving 21:29 (quit) jeapostrophe: Ping timeout: 240 seconds 23:03 (join) jonrafkind 23:03 (quit) jonrafkind: Changing host 23:03 (join) jonrafkind 23:04 (quit) Shvillr: Ping timeout: 256 seconds 23:04 (join) Shvillr 23:18 (quit) dnolen: Remote host closed the connection 23:19 (quit) cataska: Quit: leaving 23:29 (join) cataska 23:45 (join) jeapostrophe 23:45 (quit) jeapostrophe: Changing host 23:45 (join) jeapostrophe 23:52 (quit) jeapostrophe: Ping timeout: 252 seconds