00:14:13 Imaginary-base arithmetic is not much different from negative-base arithmetic, since an imaginary-base number may be considered as the interleave of its real and imaginary parts; using INTERCAL-72 notation, 00:14:15 x(2i) + (2i)y(2i) = x(2i) ¢ y(2i). 00:14:16 —Wikipedia 00:14:21 wow, INTERCAL actually used in a serious example 00:14:25 O_o 00:14:31 :D 00:14:35 we've finally made it, guys 00:14:37 we're mainstream! 00:14:38 that isn't INTERCAL-72 notation 00:14:39 though 00:14:50 it would be more like DO .1 <- ALSDFJSALDFJO@I#U$L!@JOUQE(W 00:14:57 it's using its notation for interleave. 00:15:00 also, intercal is not line noise. 00:15:06 it's pretty close 00:15:08 I've coded in it 00:31:20 we're mainstream! <-- then what to do now 00:32:19 shit this is so fucking difficult 00:32:22 I'm gonna try gadts 00:32:29 -!- comex has joined. 00:32:35 coppro, also ¢ is Princeton syntax for interleave. Isnot $ it for more modern? 00:32:41 "-72" 00:32:56 ehird, yes I said that 00:33:01 "Princeton syntax" 00:33:05 very clearly there 00:33:12 Wikipedia says "using INTERCAL-72" 00:33:18 Therefore what you are saying about more modern syntax is irrelevant 00:33:28 AnMaster: most modern compilers will accept $, but ¢ is the canonical operator 00:33:28 ehird, I was just trying to remmeber 00:33:29 plus 00:33:38 it would be more like DO .1 <- ALSDFJSALDFJO@I#U$L!@JOUQE(W <-- you used $ there 00:33:45 oh 00:33:45 >_< 00:33:47 that was incidental 00:33:48 He was writing line noise 00:34:01 ehird, true, doesn't change that he included it 00:34:11 and intercal is different line nose IME 00:34:14 more " for a start 00:34:26 I was disagreeing with that before—god, this is fruitless. 00:34:44 ehird, I know you were 00:34:44 ... 00:35:04 Your mom. 00:36:00 The irrelevance of integralosity 00:37:50 -!- augur has joined. 00:38:13 I wanna be CDATA'd 00:38:18 ehird, that's what she said 00:38:27 I do hope you got my pun. 00:38:38 it was on The irrelevance of integralosity 00:38:43 not the last line 00:38:48 Oh. 00:38:53 It's much better if you read it as the last line. 00:38:55 I already started typing when you wrote it 00:39:08 ehird, hm? 00:39:28 I wanna be CDATA'd → I wanna be sedated (reference to http://en.wikipedia.org/wiki/I_Wanna_Be_Sedated) 00:39:33 "I wanna be sedated" "That's what she said" 00:39:43 XD 00:39:53 Thus implying that the sexual prowess of the butt of the joke is so limited that women ask to be sedated so that they will not feel it as much. 00:39:57 Just call me joke explainer 00:40:47 ehird, you are claiming that title? then you will have to duel Ryan North first 00:41:52 Woot it worked 00:41:55 I'm so happy 00:42:02 -!- soupdragon has quit ("Leaving"). 00:42:38 ehird, what did 00:43:06 This Haskell code 00:43:27 plan9port switched to hg? 00:44:39 From? 00:44:43 ehird, cvs 00:44:51 I think it's always been hg. 00:44:52 there's no ghc for p9, but there's hugs 00:45:00 hugs sucks 00:45:08 ehird, they why is there .cvsignore in there still 00:45:08 yea 00:45:19 ehird, and lots of related cvs files 00:45:21 AnMaster: Dunno, then. 00:46:19 My brain just exploded. 00:46:21 I can't handle pattern bindings for existential or GADT data constructors. 00:46:22 Instead, use a case-expression, or do-notation, to unpack the constructor. 00:46:23 —GHC 00:47:07 ehird, XD 00:47:20 ehird, are most that funny? 00:47:31 No, most of them are just technical and very confusing. 00:47:41 ehird, very confusing. Like? 00:47:47 You end up patternmatching on the first words and the structure of the error message to debug problems. 00:47:53 AnMaster: sec 00:47:58 I'll get a good one 00:48:28 at least gcc errors are usually not very cryptic. Unless you are doing lambda ;P 00:48:32 Inferred type is less polymorphic than expected 00:48:34 Quantified type variable `me' escapes 00:48:35 g++ on the other hand... 00:48:35 When checking an existential match that binds 00:48:37 x :: Element me BODY 00:48:38 The pattern(s) have type(s): WrapElem BODY 00:48:40 The body has type: Element me BODY 00:48:41 In a case alternative: WrapElem x -> x 00:48:43 In the expression: 00:48:44 case 00:48:46 (decompose (BODY [WrapElem (CDATA "poop")] :: Element BODY HTML)) 00:48:47 of { 00:48:51 WrapElem x -> x } 00:48:53 Admittedly, that's when doing crazy code 00:49:00 ehird, nonense to me 00:49:07 nonsense* 00:49:23 It's a rather specialised error. :) 00:49:58 ehird, what does it mea 00:50:00 mean* 00:50:19 We have: 00:50:21 data WrapElem a = forall me. WrapElem (Element me a) 00:50:25 So basically, you can have e.g. 00:50:25 ehird, also is there no line number there? 00:50:30 That's on the previous line 00:50:31 [WrapElem Foo] 00:50:33 You can have that 00:50:38 And that means that you can have 00:50:44 mhm 00:50:52 [WrapElem (something whose me type variable is Blah), WrapElem (something whose me type variable is Baggo)] 00:50:53 And it works 00:51:02 So it lets you do heterogenous lists of a sort, yeah? 00:51:07 The problem is, what I did is basically 00:51:09 I see 00:51:11 Take the first element of that list 00:51:17 and extract the innards from the WrapElem 00:51:19 The problem is 00:51:23 The type of that list is [WrapElem Something] 00:51:26 So 00:51:33 We don't know what type "me" will be from that 00:51:42 So it's breaking the abstraction of WrapElem, and letting you break things, if it lets you get the value out 00:51:43 Something being like void* ? 00:51:52 AnMaster: No, being irrelevant to the issue 00:51:58 ah 00:52:03 —Because the inner type variable "me" would have to escape and leak from WrapElem. 00:52:07 So you can't do it. 00:52:15 Of course, this is... not so common to do. 00:52:23 ehird, is there a way to get at the value then? 00:53:04 also what does WrapElem do? 00:53:14 Sure; if all the values inside the WrapElems share a typeclass (and this is in the type signature), you can extract it to use methods of that type class on it 00:53:16 So we can do 00:53:23 data Showable = forall a. (Show a) => a 00:53:30 (show is the class of values that can be given a good string representation) 00:53:32 ah 00:53:33 *Show is 00:53:34 and then 00:53:42 [Showable 1, Showable "butt", Showable [1,2,3]] 00:53:44 erm 00:53:49 data Showable = forall a. (Show a) => Showable { unShowable :: a } 00:53:52 then [Showable 1, Showable "butt", Showable [1,2,3]] 00:53:54 and we can do 00:54:00 map (show . unShowable) thatList 00:54:04 ah 00:54:08 unShowable extracts the value of type (Show a) => a from the list 00:54:15 and then we call show on it 00:54:17 and we get back 00:54:18 but not possible in generic? 00:54:20 ["1", "butt", "[1,2,3]"] 00:54:24 AnMaster: ? 00:54:30 It's not possible without a typeclass. 00:54:33 ah 00:54:35 Or, well, a function that works on values of any type. 00:54:39 Like id :: a -> a :P 00:55:00 Basically a lot of this stuff is because we want a useful feature of the type system, but there's some hole that lets us break the type system with it 00:55:02 So we just plug that hole 00:55:03 ehird, that would be a useless non-transformation in general 00:55:14 id is useful sometimes in Haskell 00:55:17 oh? 00:55:32 well I imagine as a parameter to not map but similar funcs 00:55:36 it could be useful 00:55:48 Prelude> :t foldr id 00:55:49 foldr id :: b -> [b -> b] -> b 00:55:51 So: 00:55:57 :t? 00:56:03 show-me-the-type-of 00:56:05 ah 00:56:07 foldr 3 [succ, succ, pred] → 4 00:56:09 Erm 00:56:11 foldr id 3 [succ, succ, pred] → 4 00:56:25 Whereas foldr in general is foldr :: (a -> b -> b) -> b -> [a] -> b 00:56:25 I guess ti would get you the tail of the list you are folding? 00:56:28 oh foldr 00:56:31 well the head then 00:56:35 ?? 00:56:41 So id is just a → a 00:56:42 nvm 00:56:45 But since our list contains functions 00:56:51 It turns into (a → b) → (a → b) 00:56:55 Which is the same as 00:57:01 (a → b) → a → b 00:57:11 Well 00:57:15 They have to be monomorphic but 00:57:20 it's (a → a) → a → a 00:57:22 ehird, wouldn't fold* require a function that takes both accumulator and current value from list 00:57:22 get it? 00:57:24 So the second argument, a, becomes the type of foldr's next argument 00:57:33 AnMaster: it does. 00:57:39 I was trying to explain it but you're not listening so I won't bother 00:57:39 ehird, id does that?? 00:57:46 I was listening 00:57:49 trying to 00:58:27 ehird, also yes I see what you mean there I think 00:58:28 Okay, we need lambdabot in here 00:58:30 Frsrs 00:58:32 To explain 00:58:44 Basically 00:58:52 Prelude> :t foldr 00:58:53 foldr :: (a -> b -> b) -> b -> [a] -> b 00:58:54 Prelude> :t id 00:58:56 id :: a -> a 00:58:57 So, if we pass id as the first argument of foldr 00:59:02 It must be of type (a → b → b) 00:59:06 That's the same as 00:59:07 EgoBot can do some haskell 00:59:09 a → (b → b) 00:59:11 aha 00:59:14 Now 00:59:19 id's first argument must have the same type as its second 00:59:21 So this turns into 00:59:24 so it is basically optimising it? 00:59:27 (b → b) → (b → b) 00:59:34 AnMaster: What? 00:59:40 That sentence makes no sense whatsoever. 00:59:43 ehird, well, optimising the type 00:59:49 to make it as simple as possible 00:59:51 It's not optimising... It's specifying 00:59:55 Making it less general 00:59:57 So anyway 01:00:00 well okay 01:00:03 We have id :: (b -> b) -> (b -> b) 01:00:04 bad word choice 01:00:09 Because of that specification 01:00:11 Right? 01:00:13 yes 01:00:17 makes perfect sense 01:00:17 This is the same as 01:00:20 (b -> b) -> b -> b 01:00:29 (when we want two arguments in haskell we just curry it) 01:00:30 makes kind of sense yes 01:00:39 So, since 01:00:46 foldr :: (a -> b -> b) -> b -> [a] -> b 01:00:51 Our next parameter is b, which as we can see in our id signature is b. 01:00:54 So that's any value. 01:00:55 !haskell foldr id 1 [(+1), (*10), (+1)] 01:01:00 oerjan: i explained that 01:01:03 plz don't interrupt my explanation 01:01:07 AnMaster: So, the list. 01:01:09 21 01:01:11 ehird, it does make kind of sense yes 01:01:13 Well, what's the "a" in our id type? 01:01:15 (b -> b). 01:01:26 So we give it a list of functions of b -> b. 01:01:45 oerjan, oh *now* I see how it can be useful too 01:01:48 very cool 01:01:57 Here's how that evaluates: 01:02:13 ehird, in his defence oerjan's example *did* help a lot 01:02:18 Alright 01:02:29 (+1) `id` ((*10) `id` ((+1) `id` 1))) 01:02:34 The last 1 because we're at the end of the list 01:02:36 right 01:02:38 So we take foldr's second parameter 01:02:43 Now, we can just eliminate the ids there; they do nothing. 01:02:45 So we get 01:02:55 (+1) ((*10) ((+1) 1)) 01:02:58 ehird, foldr starts at head and goes to tail? Or was it the reverse 01:02:59 In more common terms, 01:03:04 ((1+1)*10)+1 01:03:06 AnMaster: yes 01:03:10 not the reverse, you got it 01:03:13 right 01:03:16 foldr is the same, but it nests leftwards instead of rightwards 01:03:22 foldr has the nice property that you can use it on infinite lists 01:03:23 so foldl is the reverse? 01:03:25 ooh, I wonder if this works 01:03:28 no 01:03:35 AnMaster: they're identical in behaviour apart from when given infinite lists 01:03:40 mostly, foldl is faster 01:03:42 but foldr works on infinite lists 01:04:02 ehird, foldr would be tail recursive in scheme, but foldl wouldn't? Or isn't it cons style list? 01:04:16 It is. 01:04:19 Let me show you the source 01:04:25 no, the other way around 01:04:30 [01:04] @src foldl 01:04:31 [01:04] foldl f z [] = z 01:04:33 [01:04] foldl f z (x:xs) = foldl f (f z x) xs 01:04:35 [01:04] @src foldr 01:04:36 [01:04] foldr f z [] = z 01:04:38 [01:04] foldr f z (x:xs) = f x (foldr f z xs) 01:04:39 No need to understand Haskell 01:04:41 Just look at where the parens are in the recursion structure 01:04:47 hm 01:04:50 You can see there why foldl doesn't work on infinite lists 01:04:52 but foldr grows the stack 01:04:58 foldr looks tail recursive indeed 01:05:02 or wait no 01:05:06 * oerjan realizes he should have used a list that wasn't its own reverse... 01:05:07 meh 01:05:08 misread 01:05:14 oerjan, :D 01:05:15 !haskell foldr id 1 [(+1), (*10), (+2)] 01:05:16 31 01:05:23 oerjan: here's a fun example for you: foldr id [] $ cycle [(1:)] 01:05:29 for AnMaster: 01:05:33 cycle [x] is an infinite list of x 01:05:36 [x,x,x,x,...] 01:05:40 also, (:) is cons 01:05:44 so (1:) [3,4] is [1,3,4] 01:05:51 ehird, so foldl is tail recrusive, but foldr is not? 01:05:52 So we have an infinite list of functions which, when given a list, prepend 1 to them 01:06:00 You know how foldr id works 01:06:03 So we start with [] 01:06:05 yep 01:06:06 saw it 01:06:10 And, each element of the infinite list, we run (1:) on it 01:06:13 The result? 01:06:15 [1,1,1,1,... 01:06:18 And this *actually works*. 01:06:24 hm right 01:06:25 You can run it in GHCi and see the 1s appearing as fast as your CPU will let them. 01:06:34 (f $ x is just f x) 01:06:42 except sometimes when you would have to do f (blah) you can do f $ blah 01:06:47 ehird, well it makes sense to not compute the list until it is required 01:06:48 just an aid 01:06:53 AnMaster: yep 01:06:54 seems like a lazy feature 01:06:57 Indeed 01:07:06 ehird, nothing mind boggling in that 01:07:13 It's just so cool that you can say things like "Apply this infinite list of functions to this empty list" and get something back 01:07:16 Something relevant 01:07:24 AnMaster: Fine, want something more interesting? 01:07:31 AnMaster: for scheme, the foldl equivalent is tail recursive. for haskell, lazy evaluations makes everything a lot more fishy 01:07:34 ehird, it is just very functional and high level. I would expect a CAS to be able to do it as well 01:07:39 Prelude> take 10 $ foldr id [] $ map (:) [1..] 01:07:40 [1,2,3,4,5,6,7,8,9,10] 01:07:49 oerjan, yeah 01:07:50 So map (:) [1..] turns into [(1:),(2:),...] 01:07:52 etc 01:07:53 which is why there is foldl' to force evaluation at each step 01:08:15 ehird, but why can't foldl work on infinite lists 01:08:21 you can stop at the step you need, no? 01:08:25 [01:04] [01:04] @src foldl 01:08:26 [01:04] [01:04] foldl f z [] = z 01:08:28 [01:04] [01:04] foldl f z (x:xs) = foldl f (f z x) xs 01:08:29 Trace the evaluation 01:08:37 foldl f z (1:xs) = foldl f (f z x) xs 01:08:39 lets see 01:08:40 erm 01:08:43 wait 01:08:47 let's say z = 0 01:08:56 foldl f 0 (1:xs) = foldl f (f 0 1) xs 01:09:01 uhm 01:09:03 ehird, is z the accumulator? 01:09:06 Yes 01:09:10 So we do foldl f (f 0 1) xs 01:09:14 ehird, those short variable names really confuses me 01:09:17 etc etc etc etc 01:09:20 Until we reach f z [] 01:09:22 And then we return z 01:09:26 We never build anything up 01:09:31 We compute it all via tail recursion, then return the accumulator 01:09:31 oh 01:09:40 right 01:09:43 AnMaster: The short variable names are only confusing in hyper-abstract code 01:09:51 Which you don't have to write very often :) 01:09:52 ehird, why not use map for that thing 01:09:58 Er, how? 01:10:03 I mean 01:10:07 that infinite list 01:10:16 mapping over infinite list makes sense 01:10:23 I did 01:10:28 right 01:10:32 [01:07] Prelude> take 10 $ foldr id [] $ map (:) [1..] 01:10:33 [01:07] [1,2,3,4,5,6,7,8,9,10] 01:10:35 [01:07] So map (:) [1..] turns into [(1:),(2:),...] 01:10:38 ah there 01:10:38 ehird: that foldr id [] $ cycle [(1:)] could use undefined or anything at all of the right type instead of [], since it is never actually used 01:11:04 oerjan: indeed 01:12:07 Haskell is wonderful once you know it 01:12:17 The problem is that Haskell makes you want to do abstract, awesome code 01:12:29 And by doing so, you run into difficulties 01:12:31 And this makes it seem like Haskell is difficult 01:12:41 It's just that the language's awesome power encourages people to do crazy things :-) 01:12:50 s/power/purity/ 01:13:18 # pacman -Ss tdb 01:13:18 extra/tdb 1.2.0-1 01:13:18 A Trivia Database similar to GDBM but allows simultaneous commits 01:13:26 what the hell is a "Trivia database" 01:13:29 map f = foldr ((:).f) [] iirc 01:13:42 something for "in popular culture" sections on wikipedia? 01:14:06 AnMaster: also http://foldr.com/ 01:14:08 (enable js) 01:14:30 ehird, why is there no foldl? 01:14:34 as in 01:14:36 foldl.com 01:14:37 it used to exist 01:14:41 but it expired or something 01:15:13 ehird, it shows "The web page you tried to visit might have been trying to steal your personal information. That page was removed after being identified as a "phishing" web page." 01:15:14 wth 01:19:44 I want to write a Scheme→C compiler. 01:19:53 So I will. 01:20:49 ehird: And your implementation method? 01:21:04 CPS-transform followed by Cheney on the M.T.A. 01:21:07 * pikhq is going to guess the awesome one. 01:21:11 Simple, beautiful, performant! 01:21:20 Implemented in Haskell, because dammit I want to write some Haskell. 01:21:36 pikhq: You guessed right :P 01:21:38 Heheh. 01:21:39 ehird, and read that paper on regex. Of course I knew that regex were equiv with NFA and DFA. They teach that sort of thing at university 01:21:47 + I knew it before 01:21:56 AnMaster: Yes, but it's a practical paper about practical implications. 01:22:04 And also a guide to implementing NFAs efficiently. 01:22:12 (for regexps) 01:22:19 ehird, yes indeed. I would have gone to DFA instead 01:22:35 The argument is advocating NFA, so that's unlikely. 01:23:07 ehird, hm? as in, since I didn't know about the efficient NFA algorithm 01:23:25 Ah, I see. 01:23:32 but I did know it was equiv with DFA and DFA was fast 01:23:39 That algorithm is implemented by the inventor of computer regxps. :) 01:24:05 -!- FireFly has quit ("Leaving"). 01:24:09 ehird, for practical purposes I would have said "argh I can't back ref" 01:24:23 Meh :P 01:24:47 I actually use back ref quite often 01:25:00 sure not all the time 01:25:08 Is there any sort of guarantee in a regular C program that the first N memory locations won't be allocated? 01:25:12 I guess there is, up to a point. 01:25:37 #f = 0, #t = 1, '() = 2, ASCII characters = 3 to 259. 01:25:44 ehird, you mean near NULL? 01:25:46 Apart from that, lower bit is 1 means that it's a fixnum. 01:25:49 Otherwise, it's a pointer. 01:25:59 ehird, if you mean the first page of memory: "no" 01:26:00 AnMaster: I need memory locations 0 to 259 to be free, to be specific. 01:26:07 ehird, not in generic 01:26:21 Hmm, pointers to variables on the stack end with 0, right? 01:26:45 ehird, on linux "most likely" page 0 won't be mapped since it kernel usually forbids it 01:26:53 Good enough for me 01:26:57 dosemu (or was it dosbox) depends on it though 01:27:04 so does sheepshaver 01:27:15 ehird, as for ending on zero 01:27:17 depends 01:27:33 ehird, it will likely be aligned 01:27:37 so a 4 byte integer yes 01:27:45 a char? maybe not 01:27:59 ehird, not guarantee though 01:28:20 all implementation defined and could in theory vary between runs 01:28:38 /* 01:28:39 Anatomy of a value: 01:28:40 0 #f 01:28:42 or between calls 01:28:42 1 #t 01:28:43 2 () 01:28:45 3 to 258 \0-\255 01:28:47 Otherwise, if the low bit is 1, it's a fixnum. Otherwise, it's a 01:28:48 pointer to a tag. 01:28:50 */ 01:28:51 AnMaster: What about calloc, I wonder? 01:28:56 ehird, ? 01:28:58 (Cheney on the M.T.A. is basically oriented around putting most values on the stack.) 01:29:01 ehird, it will zero the bytes 01:29:03 what about it 01:29:11 AnMaster: I mean, will calloc return an even pointer? 01:29:13 Probably, I guess. 01:29:27 ehird, not guaranteed afaik 01:29:55 ehird, in practise on linux: yes 01:30:10 but not even guaranteed on posix iirc 01:31:19 ehird, btw I will probably get 24 mbit/s ADSL. Will considering distance to exchange reach probably around 18 mbit/s 01:31:21 Well, either it does that or it breaks. 01:31:22 Not my issue. 01:31:33 AnMaster: Move and get 100 Mb/s. 01:31:43 I'm currently on ADSL2 but artificially capped 01:31:48 at 8 mbit down 01:32:02 ehird, yeah, three blocks iirc 01:32:04 :P 01:32:28 ehird, would be useless however 01:32:41 Meh 01:32:41 since most other places can't keep up with that 01:32:46 ??? 01:32:48 Yes they can 01:32:56 ehird, mirrors I mean 01:32:58 BitTorrent, kernel.org, ... basically everywhere download speed matters. 01:33:05 hm really? 01:33:06 meh 01:33:06 You saw how fast Deewiant downloaded that kernel. 01:33:11 Less than 20 seconds 01:33:15 what kernel? 01:33:16 For the entire kernel source 01:33:21 and I didn't 01:33:26 AnMaster: You did, you commented on it 01:33:30 When we were trying to strip down Linux 01:33:35 oh then 01:33:36 right 01:33:37 2.6.3x for some x 01:33:41 thought you mean recently 01:33:43 Like 60 megs in under 20s 01:34:20 ehird, was it fizzie's system? 01:34:20 or Deewiant? 01:34:22 I forgot 01:34:31 Deewiant 01:35:31 #define is_boolean(v) ((v) < 2) 01:35:32 #define is_nil(v) ((v) == 2) 01:35:34 #define is_char(v) (((v) > 2) && ((v) < 259)) 01:35:36 La dee dah 01:36:22 Before AnMaster says "evaluated twice", let me say "compiler output". 01:36:34 ehird, I didn't plan to 01:36:49 ehird, also what did you need the low mem locations for? 01:37:21 /* 01:37:23 Anatomy of a value: 01:37:24 0 #f 01:37:25 1 #t 01:37:26 ye 01:37:27 2 () 01:37:28 yes* 01:37:28 3 to 258 \0-\255 01:37:29 I saw that 01:37:30 Otherwise, if the low bit is 1, it's a fixnum. Otherwise, it's a 01:37:31 pointer to a tag. 01:37:33 */ 01:37:38 This way, I have inline storage of booleans, nil, characters and small integerss. 01:37:39 I just don't know how it fits in 01:37:41 *integers 01:38:01 oh 01:38:02 Leaving big integers, other numbers, symbols, pairs, procedures and a handful of other types boxed. 01:38:03 right 01:38:32 ehird, sure all the masking required will be faster? 01:38:45 Sure. 01:38:50 ehird, also which gc will you use? 01:38:52 AnMaster: masking of what? 01:38:55 exactly 01:39:02 Also, gonna write my own. 01:39:12 ehird, masking to test every time you want to number chrunch a cons style list 01:39:14 Trivial stop-the-world, noncompacting mark and sweep. 01:39:22 *crunch 01:39:28 yeah 01:39:36 AnMaster: Faster than dereferencing a pointer and checking it for equality, which is what you'd have to do anyway. 01:40:04 mhm true 01:40:08 ehird, what about vectors? 01:40:51 ehird, how will you store vectors 01:41:09 Boxed. 01:41:19 Scheme isn't a language with efficient representation, you know. 01:41:29 ehird, it could be in theory 01:42:08 Only with heuristics. 01:42:58 ehird, well yeah, there should be some "I will not redefine -+*/ lambda, define + a few more" option 01:43:29 to allow proper constant folding and so on 01:43:38 That's not Scheme. 01:43:45 ehird, actually it could work without it 01:43:46 JIT it 01:43:53 Doesn't help. 01:43:59 and if those are overridden, just recompile it 01:44:03 ehird, doesn't it? 01:44:08 lol, well, okay, that could work 01:44:36 ehird, 80% at least of the programs won't actually redefine those 01:45:04 probably 98% or something 01:45:45 * ehird wonders if multiple *v in the same expression will be optimised away 01:45:54 after all, theoretically the value could change between them 01:46:13 ehird, depends on if the compiler can say it won't 01:46:20 is it volatile? 01:46:24 No. 01:46:36 #define tag_of(v) \ 01:46:37 (is_boolean(v) ? tag_boolean : \ 01:46:38 is_nil(v) ? tag_nil : \ 01:46:40 is_char(v) ? tag_char : \ 01:46:41 is_fixnum(v) ? tag_fixnum : \ 01:46:43 is_symbol(v) ? tag_symbol : \ 01:46:44 then it most likely will be optimised away, unless it is global and other functions are called 01:46:45 is_pair(v) ? tag_pair : \ 01:46:46 panic("Invalid tag %d (%x, %b)", *v, *v, *v)) 01:46:47 Yay. 01:46:48 in betweem 01:46:51 between* 01:46:58 or other such edge case 01:47:30 ehird, does it need to check the tag all the time 01:47:35 Yes. 01:47:45 It's fast enough. 01:47:53 ehird, not really in the case of: (+ 4 2 (- 2 4)) 01:48:15 That's a problem almost all Scheme implementations share. Stop bugging me about it. 01:48:20 ehird, since it just got the value it knows the type 01:48:30 ehird, yes but why not write it *better* 01:48:42 it would be fun 01:48:42 Because I'm just trying to have fun, not deal with gnarly edgecases. 01:48:45 ah 01:48:57 Since it's compiling to C, GCC can compile away a lot of the more stupid things. 01:49:02 ehird, is there any scheme implementation that won't 01:49:06 won't* do that 01:50:05 Stalin almost certainly doesn't. 01:50:22 eh...? 01:50:30 Google it. It's a Scheme compiler. 01:50:30 ehird, chicken? 01:50:33 R4RS. 01:50:41 ah 01:50:46 -!- jpc has quit (Remote closed the connection). 01:50:47 ehird, any R5RS? 01:50:57 and what are the major diffs between R4RS and R5RS? 01:51:01 I don't know. I don't want to think about it. Also, I need to go to the toilet soon. 01:51:05 AnMaster: Some stuff. 01:51:13 Stalin only works on a subset of R4RS, anyway. 01:51:21 But it's faster than hand-written C programs for number-crunching. 01:51:35 ehird, that's impressive 01:51:36 how 01:51:43 Very good compilation. 01:52:15 skeleton.c:55: warning: comparison between pointer and integer 01:52:18 Repeat 7945983459345 times. 01:52:23 I wonder what the flag to disable that warning is. 01:52:39 ehird, cast one 01:52:49 ehird, also be wary of integer and pointer size 01:52:53 No, a compiler flag. 01:52:53 you want intptr_t 01:52:55 Also, it has to be equal. 01:53:09 ehird, you use intptr_t not int then? 01:53:14 I use void *. 01:53:21 ehird, and for integers? 01:53:25 void * 01:53:29 ouch :D 01:53:32 with the low bit being 1 01:53:39 AnMaster: that's the standard implementation technique 01:53:43 all schemes do it, even ruby does it 01:53:50 ehird, the C way of doing it is intptr_t in C 01:53:54 Don't care. 01:53:59 also you invoke undef behaviour I believe 01:54:04 skeleton.c:55: error: invalid operands to binary & (have ‘void *’ and ‘int’) 01:54:07 Oh, fuck off you stupid compiler. 01:54:22 ehird, intptr_t is the answer 01:54:28 Shut up. 01:54:36 just trying to be helpful 01:54:41 I'll just cast. 01:54:59 ehird, to? 01:55:21 if you say "int" well you just dropped x86_64 compatibility 01:55:27 I never say that. 01:55:30 I always use pointers. Always. 01:55:31 good 01:55:35 meh 01:55:35 Even when doing arithmetic. 01:55:56 ehird, gcc can optimise less then possibly. Not sure 01:56:09 skeleton.c:55: error: invalid operands to binary & (have ‘void *’ and ‘void *’) 01:56:11 >_< 01:56:17 ehird, see. I told you so 01:56:24 #define cast(v) ((long) v) it is 01:56:32 ehird, :P 01:56:35 ehird: s/long/intptr_t/. 01:56:36 *(v) 01:56:44 pikhq: This will break if sizeof void* != sizeof long anyway 01:56:46 So why bother 01:56:46 intptr_t is guaranteed to be the same size as a pointer. 01:56:51 pikhq, indeed 01:57:05 Name one architecture where sizeof void * != sizeof long but has intptr_t 01:57:09 I'll wait here. 01:57:20 ehird, what is wrong with intptr_t though 01:57:26 why do you hate it 01:57:28 It doesn't solve my casting woes, for one. 01:57:35 I don't hate it, it's just not a solution to any of my problems. 01:57:37 So stop suggesting it. 01:57:38 it does as well as long does 01:57:41 ehird: Doesn't Win64 have 32-bit longs? :P 01:57:42 Exactly. 01:57:44 And no better. 01:57:46 pikhq, yes it does 01:57:48 pikhq: I depend on POSIX. 01:57:49 iirc 01:58:14 Slight disadvantage of using macros here is that all of my errors point to the same line :P 01:58:15 ehird: Just use intptr_t. It can only break by not existing. 01:58:37 I officially rename this channel #intptr_t 01:58:43 intptr_t is c99 only, anyway 01:59:11 is it? so what? 01:59:34 ehird, by depending on POSIX you will have a C99 compiler 01:59:34 And if something's sufficiently braindead to not offer stdint.h, it can fuck off. 01:59:48 in fact you might not have a c89 one iirc 01:59:49 I bet that number-of-platforms-supporting-C99-and-intptr_t < number-of-platforms-not-supporting-C99-but-having-sizeof-long-be-sizeof-void-pointer 01:59:49 ehird, ^ 01:59:50 :P 02:00:26 ehird: intptr_t is "correct". Assuming sizeof(long) == sizeof(void*) is "retarded". 02:00:37 And will make a Win64 porter kick you in the balls. 02:00:46 can you shut the fuck up and let me code how i like because it's for fun thx 02:01:01 ehird, also since you depend on POSIX, number-of-platforms-supporting-C99-and-intptr_t == 100% of your goal 02:01:15 Turns out POSIX support doesn't mean total POSIX support. 02:01:20 It just means "not Windows". 02:01:32 ehird, MacOS classic? 02:01:48 ehird, also internix 02:01:56 sigh 02:03:49 brb 02:08:25 * pikhq should design an architecture with: 16-bit shorts, 32-bit ints, 64-bit longs, 128-bit long longs, and 256-bit pointers. 02:13:31 night → 02:13:57 pikhq: Fine. intptr_t it is. 02:14:10 I would like to note that Cheney on the M.T.A. is unportable anyway. 02:14:19 It depends on calloc, which is not specified by either C or POSIX. 02:14:33 (Unless you want to malloc everything, but that'd be painful.) 02:15:05 -!- anmaster_l has quit (Read error: 110 (Connection timed out)). 02:16:31 Also, the gc will have to look at the C stack. 02:16:35 Or did neither of these things cross your mind? 02:16:42 http://www.opengroup.org/onlinepubs/000095399/functions/calloc.html There's the calloc spec. 02:17:26 Sorry, I meant the Single UNIX Specification. 02:17:28 [3] Maximally portable implementations may shun alloca, since it is not required by either ANSI C or Unix. 02:17:32 And I mean alloca. 02:17:44 I doubt POSIX has alloca, either. 02:17:58 Yeah, POSIX isn't ANSI C or POSIX. 02:18:03 Erm. 02:18:04 alloca. 02:18:11 Or SUS. 02:18:17 And, since my gc will have to inspect the C stack... 02:18:21 I'm already pretty damn unportable. 02:20:52 You could, of course, just use variable-length automatic arrays. 02:20:56 Which are C99. 02:21:46 And the GC? 02:22:14 The best that can be done with that is make it not *too* unportable. 02:22:21 (see: Boehm GC) 02:24:13 Anyway, why do I need intptr_t? If I never use an integer type and do arithmetic on the (void *) it's irrelevant. 02:24:16 And that would give me total support 02:24:18 s/$/./ 02:25:35 Except that you're casting from void * to long for some of the arithmetic. 02:26:39 -!- nooga_ has joined. 02:27:46 pikhq: Am I? 02:28:00 I only did that for ((v)&1), which I'm sure could be written in another way. 02:28:19 -!- nooga has quit (Read error: 60 (Operation timed out)). 02:28:24 skeleton.c:57: error: invalid type argument of ‘unary *’ (have ‘int’) 02:28:29 Woot, now I get to cast in the other direction 02:29:00 ... int to void*? I MURDER YOU. 02:29:36 intptr_t to (void *). 02:29:47 What's that? You hate the fact that the compiler choose a value for it? Oh how cute. 02:29:52 STFU. 02:30:09 Argh. Right. Damned GCC, expanding the typedefs. :P 02:30:33 http://sprunge.us/hSje 02:30:34 Whoa. 02:30:45 This is your brain on macros. 02:31:06 http://sprunge.us/TSXD 02:31:09 This time, through indent 02:31:24 oh lol 02:31:31 it's erroring because *(void *) is-a void 02:31:39 Hahaha. 02:31:48 i hate c's integer/pointer model :( 02:31:53 why can't we just have a type 02:31:55 "word" 02:32:00 *word is-a word 02:32:05 and you can do arithmetic on it 02:32:07 and that's it 02:32:23 Hmm, seems that *wasn't* the issue 02:32:29 I'm halfway to making these inline functions 02:32:43 Tada 02:34:17 wait, does panic() actually exist in linux c compilations as in the kernel panic? 02:34:19 and just not work? 02:34:21 lol 02:34:24 * ehird changes the name of panic 02:34:52 I'm pretty sure that Linux's panic() function is kernelspace-only. 02:35:01 It definitely doesn't have a man page. 02:35:16 right, it was just complaining about tag_name and wrong but not panic not existing 02:35:25 Huh. 02:37:20 -!- MizardX has quit (Read error: 110 (Connection timed out)). 02:38:30 * ehird restructures his tag functions. 02:38:35 /me restructures his tag functions. 02:38:36 #define tag_of(v) \ 02:38:38 ((v) < 2 ? tag_boolean : \ 02:38:39 (v) == nil ? tag_nil : \ 02:38:41 (v) < 259 ? tag_char : \ 02:38:42 (v) & 1 ? tag_fixnum : \ 02:38:44 *(enum scm_tag *)(v)) 02:38:45 #define check_tag(v,t) \ 02:38:47 (tag_of(v) == (t) \ 02:38:49 || (wrong("Expected type %s, but received %s", \ 02:38:50 tag_name(t), tag_name(tag_of(v))), 0)) 02:38:52 That's simpler. 02:39:16 (((((scm_value) 3+('g'))) < 2 ? tag_boolean : (((scm_value) 3+('g'))) == ((scm_value) 2) ? tag_nil : (((scm_value) 3+('g'))) < 259 ? tag_char : (((scm_value) 3+('g'))) & 1 ? tag_fixnum : *(enum scm_tag *)(((scm_value) 3+('g')))) == (tag_boolean) || (wrong("Expected type %s, but received %s", tag_name(tag_boolean), tag_name(((((scm_value) 3+('g'))) < 2 ? tag_boolean : (((scm_value) 3+('g'))) == ((scm_value) 2) ? tag_nil : (((scm_value) 3+('g'))) < 259 ? 02:39:18 tag_char : (((scm_value) 3+('g'))) & 1 ? tag_fixnum : *(enum scm_tag *)(((scm_value) 3+('g')))))), 0)); 02:39:20 Damn common subexpressions. 02:39:27 I'ma rewrite check_tag as an inline function. 02:41:11 There. It's simple now. 02:41:26 http://sprunge.us/IMfG 02:41:37 (That long line and the first argument to check_tag being macro results, obviously.) 02:41:51 The former is tag_of(v), the latter is char('g'), although come to think of it that needs renaming. 02:43:02 Oops; s/scm_tag/enum scm_tag/. 02:43:38 pikhq: __attribute__((noreturn)), yeah? 02:45:24 "Your program is wrong and you should feel bad." is, I think, a good error message. 02:46:25 pikhq: Ooh, I just had a ridiculous idea. 02:46:39 Do # "foo.scm" line in the generated C source, then use __FILE__ and __LINE__ in the error messages. 02:46:41 I like it! 02:49:37 ehird: Heheh. 02:49:57 inline void _wrong(char *file, int line, char *fmt, ...) __attribute__((noreturn)) { 02:50:00 Apparently this is wrong and/or invalid. 02:50:09 (Erm, why did I specify inline?) 02:50:25 Ah, it works if I put noreturn before void. 02:50:37 Or just after void, which I prefer. 02:50:52 Heh, slight issue 02:51:01 Internal functions have to call _wrong instead of wrong 02:51:05 To propagate the lines 02:51:32 Stick noreturn in the function declaration, not the definition. 02:51:37 ??? 02:51:39 Where? 02:51:44 Oh, I see what you mean. 02:51:47 I have no function declarations, sir/ 02:51:49 *sir. 02:51:52 Well, for user functions, yes. 02:51:54 For internal functions, no ned. 02:51:56 *need 02:52:23 Okay, then. 02:53:37 -!- zzo38 has joined. 02:53:52 -!- jpc has joined. 02:55:02 ehird@meson:~/src/scm2c$ ./skeleton 02:55:03 ERROR: Expected a boolean, but received a char 02:55:05 in skeleton.c, around line 83 02:55:07 ehird@meson:~/src/scm2c$ 02:55:08 ^_^ 02:58:30 pikhq: Here's a fun thing stolen from the Cheney on the M.T.A. example: 02:58:53 blahtype symbol_foo = {tag_symbol, "foo"}; 02:59:01 scm_value quote_foo = &symbol_foo; 02:59:13 Then the only time you need to cons for a symbol is when (string->symbol) is called. 02:59:54 Today at the Free Geek, I was on testing scanners. It was not too difficult to figure out, but I HAD TO INSTALL TWO PACKAGES IN ORDER TO DO SO, and I still couldn't find the 12V cord for some of the scanners. What is wrong with these people? 03:00:35 They want to infest your system with bloatware. Isn't it obvious? 03:00:40 Although I think the cord thing is just a global conspiracy. 03:03:15 No, it was the computer there, it was meant for printer testing but they do scanner testing at that station, too. 03:03:27 They have cords for all sorts of other voltages, but not 12 volts 03:03:40 Programs writing programs? 03:03:41 …How perverse. 03:03:44 ^ an actual comment on a site 03:03:46 >_< 03:03:51 And so the idiot discovers compilers 03:04:27 ehird: Which site? 03:04:37 http://hackaday.com/2009/12/31/coffeescript-like-aspirin-for-javascript/ 03:04:43 Was linked from somewhere that was linked from somewhere etc 03:05:08 Argh. Hack A Day usually has smarter people... 03:07:53 So much stupid there. 03:08:15 The language itself is pretty nice, it's like JavaScript turned into something that looks like a functional language. 03:08:21 Which is, uh, exactly what it is. 03:08:41 "Generally it seems to be a language based on definitions instead of assignments and such. This reduces the number of lines needed in many cases and makes the program simpler to debug." 03:08:45 ENGLISH OPTIMISER RUNNING 03:08:49 "It seems like a functional language." 03:08:58 I think a function should be like: (x;x*x) or like {x;return x*x;} depend how you wanted it 03:09:29 Yeah, Coffeescript looks like a decent strict functional language. 03:09:40 zzo38: (\x -> x*x) 03:09:42 That acceptable? 03:09:59 pikhq: It borrows postfix-conditions from Perl. I like postfix-conditions. 03:10:08 update-alternatives: using /usr/bin/scheme-r5rs.scheme48 to provide /usr/bin/scheme-r5rs (scheme-r5rs) in auto mode. 03:10:10 update-alternatives: using /usr/bin/scheme-srfi-7.scheme48 to provide /usr/bin/scheme-srfi-7 (scheme-srfi-7) in auto mode. 03:10:15 Debian is so... generic. 03:10:25 OK, but I was just saying there is many good thing in Mozilla Javascript, but now I think we should have some short functions too, and a few other things, such as backward exceptions, and other things 03:10:44 ehird: Postfix conditions aren't bad. Tiny bit quirky, but not bad. 03:10:54 Make a decent number of things look nice. 03:11:06 print item foreach item in list if verbose 03:11:23 Yeah, that's the sort of thing that looks nice. 03:11:27 If we go Perl-like and have implicit $_, and rename "foreach" to "each"... 03:11:31 print each item in list if verbose 03:11:33 Or even 03:11:37 if verbose print each item in list 03:11:50 I don't like that kind of postfix conditions because the condition has to be calculate first and therefore should be written at first 03:12:12 zzo38: ... 03:12:14 zzo38: code is for humans first, machines second 03:12:27 Why should evaluation order have anything to do with your syntax? 03:12:53 What ehird said. 03:13:25 The Forth programming language does it correctly, in my opinion 03:13:43 print item/42, beep for each item in list if verbose and beepy 03:14:07 The Forth programming language does not have syntax for humans. 03:14:12 Yes it does. 03:14:18 (Sorry; I like Forth.) 03:14:28 ("for", "each" and "for each" being equivalent.) 03:14:30 It has syntax for machines that humans don't have too much trouble with. 03:15:06 (So you can also write: beep, print "The number is " number, beep for each number in 1 to 10.) 03:17:10 pikhq: Okay, crazy naturally-reading feature idea: 03:17:19 "until foo ...", where foo is undefined, sets foo to no. 03:17:26 "while foo ...", where foo is undefined, sets foo to yes. 03:17:29 Both on the first iteration. 03:17:37 So you can write "until stop ..." without declaring it. 03:18:45 Other crazy feature: "a; b" is actually "calculate a, calculate b, return a". 03:18:49 Use-case? 03:18:53 verbose: no; flag "Show lots of debug output." 03:20:00 Heh. 03:20:27 -!- zzo38 has quit (Remote closed the connection). 03:20:51 "say sorted parameters" 03:20:55 This would be a fun language, actually 03:21:29 pikhq: Okay, is this going to far? "for each foo" → "for each foo in foos". 03:21:39 Does proper pluralisation; "for each person" → "for each person in people". 03:21:42 *too far 03:22:09 If it's not going too far, then I declare "say contents for each parameter" to be the most readable cat(1) ever written. 03:22:46 Seems fun, if hard to implement. 03:23:09 Probably end up being the best language with an English-ish syntax. 03:23:20 Well, the transformation is 03:23:27 say contents for each parameter 03:23:42 say contents for each _ in parameters 03:23:46 say contents _ for each _ in parameters 03:23:53 for each x in parameters, 03:23:55 say contents x 03:24:00 for x in parameters, 03:24:04 say contents(x) 03:24:05 and finally 03:24:09 for x in parameters, 03:24:12 say(contents(x)) 03:24:44 pikhq: Actually, it's not really Englishy so much as allowing free word order and implying variables. 03:25:22 ehird: Thus why it's the best. It doesn't suck. ;) 03:25:30 -!- nooga has joined. 03:25:38 Also, bare keyword arguments. 03:25:54 For instance, "with file named filename" is with (file(named=filename)). 03:26:13 "with file myfile named filename" is with (file(myfile, named=filename)) 03:26:23 (Of course, the function would have metadata specifying what the keyword arguments are. 03:26:26 s/$/)/ 03:28:57 I wish C identifiers were more flexible 03:29:17 The more I read about CoffeeScript, the more I like it. 03:29:21 It pattern matches. 03:29:46 Screw Javascript. 03:30:04 define_symbol(symbol_x2D_x3E_string, "symbol->string"); 03:30:07 Yay, name mangling! 03:31:28 Pattern matching you say? 03:31:29 list is 03:31:31 (): say "Empty." 03:31:32 (one): say "One item." 03:31:34 (one,two): say "Two items." 03:31:35 otherwise: say "Some items." 03:32:26 pikhq: Unfortunately, my C code will be rather inefficient. :( 03:32:27 ehird: Heheh. 03:32:33 Sadly. 03:32:51 Even just recursing will be "look up name in current environment, handle errors, check type, call function pointer". 03:34:03 I think I'll omit arity checking, though. 03:34:09 Correct me if I'm mistaken but can't the compiler do arity checking? 03:35:14 Arity checking is mandatory in ISO C if the function has defined arity. 03:36:00 Oh, of course, gcc will do my arity checking. 03:36:03 Thanks, gcc! 03:36:06 struct procedure { 03:36:07 enum scm_tag tag; 03:36:09 scm_value (*fn)(); 03:36:10 scm_value closure[]; 03:36:12 }; 03:36:19 I guess that's a closure, not a procedure, technically. 03:36:22 fn doesn't have defined arity. 03:36:30 ...oh, of course. 03:36:42 Meh 03:36:45 Let it burn 03:36:51 Hah. 03:38:31 * ehird notes that if he uses C global variables to model Scheme toplevel definitions, he doesn't need to make every function a closure. 03:38:35 After all, they won't close on anything. 03:38:51 ...so, wait, I don't have to look up in an environment. Sweet. 03:38:53 Thank you, C! 03:40:00 Heheheh. 03:40:26 Now I have to implement some basic functions. 03:40:31 Meanwhile, I've added global closures to my functional C. 03:40:39 Sweet. 03:40:46 We should merge projects :P 03:40:50 (onerr is a global closure, which can be replaced with a different closure) 03:41:12 :P 03:41:18 Now remove all non-closure-defining functions apart from main. 03:41:25 All you will have is closures, and main. 03:41:29 Heheheh. 03:41:35 Also: you must implement cons with lambda, not as a C structure. 03:41:36 GO FOR IT 03:41:39 GOFER IT 03:41:43 Or Scheme it. 03:41:48 yuk yuk 03:41:51 Removing all non-main closures will be easy. 03:42:02 Implementing cons with lambda will by somewhat annoying. 03:42:09 But only somewhat. 03:42:17 After all, lambda now mallocs. 03:42:51 -!- nooga_ has quit (Read error: 110 (Connection timed out)). 03:44:28 void proc_recurse(scm_proc cont) noreturn { 03:44:29 return proc_recurse(cont); 03:44:31 So, C isn't Turing-complete, I guess. C-except-where-pointers-can-be-infinite is, though, right? 03:44:31 } 03:44:35 Hand compiled Scheme procedure, that. 03:44:40 (define (recurse) (recurse)) 03:44:44 *Hand-compiled 03:44:47 uorygl: No. 03:44:49 There is no such C. 03:44:54 Because of sizeof. 03:45:10 Well. 03:45:13 sizeof returns in multiples of char 03:45:13 ehird: sizeof is in multiples of char. 03:45:16 If you have a bignum char... 03:45:18 Then yes, C is TC. 03:45:23 If char could be infinite, then it could be TC. 03:45:34 *However*, char must have a maximum value. 03:45:37 Most ridiculously overblown char type EVAR 03:45:40 pikhq: Ah, right. 03:45:45 Hmm. 03:45:51 This is a C99 restriction. 03:45:53 pikhq: What if some bit pattern was reserved for "infinity"? 03:45:55 The word "except" is omnipotent; it can do whatever it takes to make things work. 03:46:10 C90 makes no such restriction. 03:46:12 And (infinity-X) is, for X, infinity->0, _->infinity 03:46:18 Thus, C90 is TC. 03:46:19 infinity+X is infinity, etc 03:46:26 Does C99 forbid you having such a magical value? 03:46:30 So let's assume that it removes sizeof or something. 03:46:33 If so, just make 0 = infinity internally 03:46:35 Or turns it into C90. 03:46:36 and 1 = 0, etc 03:46:42 No? 03:46:48 Then CHAR_MAX is INFINITY. 03:47:08 Hmm. That... Is actually entirely valid. 03:47:17 data FancyInteger = FI Integer | PosInfinity 03:47:17 skeleton.c:99: warning: function declared ‘noreturn’ has a ‘return’ statement 03:47:19 :P 03:47:19 >_< 03:47:23 I'm trying to help you, compiler! 03:47:51 * ehird wonders how to disable it 03:47:53 ehird: Nuke the return or the noreturn. ;) 03:48:18 pikhq: No; it's "noreturn" and defined to nothing if not GNUC. 03:48:36 Ah. 03:48:40 And "return" helps dumb compilers know that we don't need to set up things to remember our values. 03:48:45 So I'll just ignore the warnings. 03:49:00 ... #define return 03:49:01 :P 03:49:07 XD 03:49:15 I wonder if gcc does totally ignore them if you do noreturn anyway 03:50:13 pikhq: http://sprunge.us/WMZV 03:50:19 I think "unmitigated failure" is an appropriate term here. 03:50:22 (This is with -O3.) 03:50:36 So, who wants to figure out how a stripped-down version of Haskell could be turned into something looking like assembler code? 03:50:39 *call proc_recurse*. 03:50:42 *facepalm* 03:51:00 pikhq: Oh ha, I didn't even notice that 03:51:04 pikhq: I was thinking more of the SEVENTY BAJILLION movls beforehand 03:51:32 ehird: Heheh. Yeah... 03:51:51 (This is Haskell where the entire program is one expression built out of these primitives: case ... of {... -> ...}, \... -> ..., ... ..., let ... = ... in ..., and constructors) 03:51:55 uorygl: Haskell->Core->STG->Asm, I believe, is the transformation path. 03:52:03 skeleton.c:103: error: non-static initialization of a flexible array member 03:52:04 skeleton.c:103: error: (near initialization for ‘(anonymous)’) 03:52:06 Dude, I specified {}. 03:52:07 Fuck off. 03:52:23 uorygl: And you just described Core right there. 03:53:12 pikhq: Well, making it static completely eliminated it from the assembly. XD 03:53:19 I think static unless the user specifies to export it is a good idea. 03:53:35 Especially since every function call will result in calling a function. 03:53:49 ehird: static __attribute__((used)) will force it to be compiled in, BTW. 03:53:54 ehird@meson:~/src/scm2c$ ./skeleton 03:53:56 Segmentation fault 03:53:57 Though, you probably don't want that... 03:53:57 That... you... 03:53:59 You just fail. 03:54:09 You should fuck a pig, because you fail that much, gcc. 03:54:18 pikhq: BTW, actually, I don't _want_ tail call optimisation. 03:54:30 Cheney on the M.T.A. relies on the stack getting too big often... 03:55:16 ehird@meson:~/src/scm2c$ ./skeleton 03:55:17 poop 03:55:19 poop 03:55:20 Segmentation fault 03:55:22 I would appreciate more than two calls, however. 03:55:24 Sorry, but GCC does TCO on all -O levels. 03:55:33 pikhq: great. Now consider an assembly language where you have a "put this data structure on the heap" instruction. And stuff. 03:55:36 ... Except 0. 03:55:36 pikhq: Except not on noreturn functions. 03:55:40 Or something. 03:55:53 ehird: Really. That's odd. 03:55:56 pikhq: Well... 03:55:58 I pasted you that asm. 03:56:03 http://sprunge.us/WMZV 03:56:06 That was with -O3. 03:56:06 True. 03:56:14 Simply 03:56:17 void noreturn proc_recurse(scm_proc *cont) { 03:56:18 return proc_recurse(cont); 03:56:19 } 03:56:21 Compare without the noreturn? 03:56:48 .globl proc_recurse 03:56:49 .type proc_recurse, @function 03:56:51 proc_recurse: 03:56:52 pushl %ebp 03:56:54 movl %esp, %ebp 03:56:55 .L7: 03:56:57 jmp .L7 03:56:59 So... noreturn tells GCC "be really dumb-fuck retarded about tail calls". 03:57:11 Now, if it didn't _also_ do a billion movls, that'd be great. 03:57:15 Apparently. 03:57:20 ehird: well, it gave you a busy loop; what did you want? 03:57:39 uorygl: The tightest loop. 03:57:50 uorygl: I want a recursive call. 03:57:53 It *should* overflow the stack. 03:57:55 -foptimize-sibling-calls 03:57:57 Optimize sibling and tail recursive calls. 03:57:58 Enabled at levels -O2, -O3, -Os. 03:58:00 Kerching 03:58:14 So, -fno-optimize-sibling-calls, et viola. 03:58:18 Well, then, have it calculate proc_recurse(cont) and then do something before returning. 03:58:18 Yep. 03:58:28 uorygl: No; because it should not try and save things like it did. 03:58:30 Because that's retarded. 03:58:46 Why do you want a stack overflow? 03:58:54 So the garbage collector runs. 03:59:08 T.28: 03:59:10 pushl %ebp 03:59:11 movl %esp, %ebp 03:59:13 popl %ebp 03:59:14 ret 03:59:16 .size T.28, .-T.28 03:59:17 .p2align 4,,15 03:59:19 Question. How the fuck does this recurse? 04:00:22 ehird: ... What the fuck? 04:00:26 Just... What the fuck? 04:00:46 * ehird adds puts("poop") in there to try and make sense of it 04:00:57 gcc needs a "do all your regular TCO stuff except say call, not jmp" option :P 04:01:25 Hmm. 04:01:35 It seems that the sttrategy it uses is... 04:01:39 pikhq: I see the issue. 04:01:47 noreturn+return = gcc makes fals assumptions 04:01:51 *false 04:01:58 Conclusion: Pick one. 04:01:58 That'd do it. 04:02:00 #define return 04:02:01 I pick removing noreturn. 04:02:08 It's just counterproductive. 04:02:25 pikhq: Doesn't work 04:02:29 "noreturn" appears to break recursion too. 04:03:15 Yay! 04:03:17 It does what I want now. 04:03:31 ...no, it doesn't. 04:03:36 pikhq: Does -O3 normally break code this wantonly? 04:04:36 -!- jpc has quit (Read error: 110 (Connection timed out)). 04:04:43 No, but when it DOES break code, it does so that wantonly. 04:04:51 Argh, -O2 breaks it too 04:04:53 WHY OH WHY 04:05:01 static void proc_recurse(scm_proc *cont) { 04:05:03 return proc_recurse(cont); 04:05:04 } 04:05:07 There is NO excuse for not compiling that properly. 04:05:37 -O0 produces the best code of all 04:05:39 proc_recurse: 04:05:41 pushl %ebp 04:05:42 movl %esp, %ebp 04:05:44 subl $24, %esp 04:05:45 movl 8(%ebp), %eax 04:05:47 movl %eax, (%esp) 04:05:48 call proc_recurse 04:05:50 leave 04:05:51 ret 04:06:12 Is there, like, an __attribute__((recurses)) I can use? 04:09:02 pikhq: The really fucking retarded solution? If you give it a non-void return type, it works fine. 04:09:11 Hurr void expressions on their own are useless 04:09:11 ehird: AAAAGH. 04:09:12 Nobody has side effects 04:09:18 SO FEKING RETARDED. 04:09:26 *FUCKING 04:09:31 I think this is definitely a sweary occasion. 04:10:18 * ehird decides to write some nice library functions to take his mind off the pain 04:11:02 BTW, I'm having trouble getting code as retarded as what you're getting. 04:11:13 gcc (Ubuntu 4.4.1-4ubuntu8) 4.4.1 04:11:16 Linux 32-bit 04:11:24 -O3 -S 04:11:32 also -fno-optimize-sibling-calls sometimes 04:11:43 gcc (Gentoo 4.3.4 p1.0, pie-10.1.5) 4.3.4 04:11:52 x86_64, with -O3 -m32 -S 04:12:26 Compiling void proc_recurse(void *c){return proc_recurse(c);} 04:12:49 I think it's your compiler that's borked. 04:13:03 Maybe 4.4 regressed. 04:13:18 Anyway, it's the default Ubuntu compiler. 04:14:54 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=445536 Well, here's an *old* bug doing the same thing. 04:17:00 Not finding any regressions. 04:18:16 http://sprunge.us/XWTH That's with -O3 -m32 -fno-optimize-sibling-calls -S 04:19:07 pikhq: va_end should be right before the }, right? 04:19:11 http://sprunge.us/RDdL And that's with the __attribute__((noreturn)) added. 04:19:12 Even if it will never be reached? 04:19:34 pikhq: Ugh, your code is so much nicer. 04:19:44 Also, I count old=2003 or earlier. :P 04:19:48 **old* 04:19:53 old=2005 or earlier. 04:20:14 No, va_end comes before return. Right. 04:20:25 va_end needs to be after you are done using va_arg. 04:20:52 There, I wrote +. 04:20:57 Properly variadic and all. 04:21:09 Only does fixints, though, but that's all I have. 04:21:15 Even checks for integer overflow. 04:21:27 I strongly suspect your compiler is just borked. Build a new one. 04:21:38 Ubuntu's and therefore Debian's stock compiler? 04:21:39 Broken? 04:21:41 Hahaha. No. 04:22:37 static void cons(scm_proc *cont, scm_value car, scm_value cdr) { 04:22:38 scm_pair p = { tag_pair, car, cdr }; 04:22:40 return cont->fn(cont->closure, &p); 04:22:41 } 04:22:42 But it's generating code that doesn't even recurse. 04:22:43 I hope that's... valid. 04:22:48 * ehird adds inline to that 04:22:54 That's fekking borken. 04:23:21 I love the part where there's no malloc in my program 04:23:26 It's so relaxing. 04:23:41 Also, 4.4.1 is not the stock Debian compiler. It was the compiler in Debian unstable for a while. 04:23:50 Oh, I think I meant to ask a question. 04:23:51 s/unstable/testing/ 04:24:10 * ehird realises that his architecture doesn't work if you redefine a function at the top level. 04:24:14 Bah. I'll fix it later. 04:24:17 pikhq: Ubuntu. 04:24:23 Ubuntu would not ship a broken compiler, man. 04:24:31 That's Apple's forte. 04:24:36 ehird: Ubuntu has before. 04:25:00 static inline void proc_car(scm_proc *cont, scm_pair *p) { 04:25:06 I like the part where I get some type-checking for free. 04:25:31 Hmm, but now I know the answer to my question, so I'd have to ask a different question, if any at all. 04:26:03 "Ubuntu would not ship a broken compiler" "But it's producing incorrect code!" "Not. Broken." 04:26:10 I'd file a bug report, honestly. 04:26:14 I mean not broken because of Ubuntu 04:26:16 Eh, I might 04:26:20 I might just build my own gcc, too 04:26:24 Unless it breaks that too :P 04:26:28 static inline void proc_cons(scm_proc *cont, scm_value car, scm_value cdr) { 04:26:30 scm_pair p = { tag_pair, car, cdr }; 04:26:31 return cont->fn(cont->closure, &p); 04:26:33 } 04:26:34 Cool implication of this: 04:26:52 If you do (cons 1 2), and pass it to a function: That function gives you a reacharound. By which I mean it accesses a pointer on your stack to read the pair. 04:27:04 GCC is actually rather hard to break. 04:27:09 Scheme: Perfect if you're gay for programming languages. 04:27:46 pikhq: I think it's just a pathological case 04:28:09 ... Which functions correctly on my older compiler. 04:30:06 Yes. 04:30:16 Look, if you want I'll give you ssh and you can compile gcc for me. 04:31:13 * ehird just remembered an sf story soupdragon should read 04:31:18 * ehird links it here for later linkage: http://docs.google.com/Doc?id=ddv7939q_20gw8h9pcx 04:36:54 pikhq: Sweet: thanks to gcc, unused core library functions will be automatically removed from the result. 04:37:56 pikhq: also, it only breaks with "static" in front 04:38:00 try it with static in front 04:38:01 bet it breaks 04:42:43 I get null with "static". :P 04:42:57 * pikhq defines a main 04:43:26 __attribute__((used)) 04:43:31 or, yeah, call it in main 04:43:34 and watch the fail 04:43:37 Doesn't break. 04:43:52 ...you should compile gcc for me :P 04:44:37 Though I'm not entirely sure why it's doing subq $8, %rsp;call proc_recurse 04:47:01 It's the __attribute__((noreturn)) that makes it slightly weird. 04:48:07 Right. 04:48:31 But... Correct. 04:48:31 What gives the optimal results (least saving-variables before the call, but still an actual call instruction)? 04:48:46 Without noreturn, using "return foo" and the -fno-...? 04:48:54 __attribute__((noreturn)). 04:49:50 -fno-... leaves around "leave;ret". 04:50:24 But does that not cause TCO? 04:50:28 Oh, wait, noreturn stops TCO. 04:50:58 I don't know why it does, but it does. 04:51:01 pikhq: static noreturn works for you? 04:51:07 Yes. 04:51:24 god damn you :P 04:52:40 Gentoo: it has correct compilers. :P 04:52:41 pikhq: Do those static noreturns have a "return" statement in them? 04:52:51 Yes. 04:53:08 The generated code is the same without. 04:53:21 right, so leave it in for dumb compilers 04:53:26 Right. 04:54:00 My library has cons, car, cdr and +. 04:54:11 What else, I wonder? 04:54:17 (Simple stuff.) 04:54:42 Incidentally, behold my + implementation! http://sprunge.us/egVj 04:54:56 Whether it could actually be any more complicated is open to debate. 05:08:01 pikhq: Hmm, that actually doesn't impose all that much penalty over a non-variadic version, does it? 05:08:04 Sure it could! 05:08:07 Make it idiomatic C++. 05:08:19 ehird: Not much at all. 05:09:00 http://www.josbuivenga.demon.nl/calluna.html 05:09:01 My god; the typeface, it is beautiful. 05:09:05 And since it's static, GCC will helpfully unroll it if it would make sense to. 05:09:12 pikhq: XD 05:09:52 Calluna is a good-looking font. 05:09:53 I sort of want to buy Calluna. Sure, I have the regular face, but damn it's pretty. 05:10:00 On the other hand... 05:10:01 $119. 05:10:08 I don't really have that much money to spend on a typeface. 05:10:45 -!- jpc has joined. 05:12:26 * ehird imagines an italic &c glyph in Calluna, gets sad because he can't have it. 05:12:35 Why do I torture myself so? 05:13:49 karma. it's all that book burning you did in a previous life. 05:14:05 I must have been a dick. 05:35:52 -!- ehird has quit (Read error: 60 (Operation timed out)). 05:54:46 -!- oerjan has quit ("Good night"). 07:01:47 -!- FireFly has joined. 07:03:03 -!- Slereah has joined. 07:03:21 -!- coppro has quit (Read error: 60 (Operation timed out)). 07:05:19 -!- coppro has joined. 07:06:12 -!- coppro has quit (Remote closed the connection). 07:13:17 -!- Slereah_ has quit (Read error: 110 (Connection timed out)). 07:16:39 -!- coppro has joined. 07:27:31 -!- coppro has quit ("I am leaving. You are about to explode."). 07:29:24 -!- coppro has joined. 07:42:33 -!- coppro has quit ("I am leaving. You are about to explode."). 07:46:38 -!- coppro has joined. 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 08:10:12 -!- coppro has quit (farmer.freenode.net irc.freenode.net). 08:10:13 -!- fungot has quit (farmer.freenode.net irc.freenode.net). 08:10:13 -!- yiyus has quit (farmer.freenode.net irc.freenode.net). 08:10:14 -!- Pthing has quit (farmer.freenode.net irc.freenode.net). 08:10:14 -!- rodgort has quit (farmer.freenode.net irc.freenode.net). 08:10:14 -!- Deewiant has quit (farmer.freenode.net irc.freenode.net). 08:10:14 -!- lifthrasiir has quit (farmer.freenode.net irc.freenode.net). 08:10:14 -!- olsner has quit (farmer.freenode.net irc.freenode.net). 08:10:15 -!- mycroftiv has quit (farmer.freenode.net irc.freenode.net). 08:10:15 -!- bsmntbombdood has quit (farmer.freenode.net irc.freenode.net). 08:10:15 -!- EgoBot has quit (farmer.freenode.net irc.freenode.net). 08:10:15 -!- zeotrope has quit (farmer.freenode.net irc.freenode.net). 08:10:16 -!- uorygl has quit (farmer.freenode.net irc.freenode.net). 08:10:16 -!- puzzlet has quit (farmer.freenode.net irc.freenode.net). 08:10:16 -!- comex has quit (farmer.freenode.net irc.freenode.net). 08:10:16 -!- dbc has quit (farmer.freenode.net irc.freenode.net). 08:10:16 -!- sebbu has quit (farmer.freenode.net irc.freenode.net). 08:10:17 -!- mtve has quit (farmer.freenode.net irc.freenode.net). 08:10:17 -!- HackEgo has quit (farmer.freenode.net irc.freenode.net). 08:10:17 -!- SimonRC has quit (farmer.freenode.net irc.freenode.net). 08:10:17 -!- Ilari has quit (farmer.freenode.net irc.freenode.net). 08:10:18 -!- cal153 has quit (farmer.freenode.net irc.freenode.net). 08:10:18 -!- nodd has quit (farmer.freenode.net irc.freenode.net). 08:10:18 -!- Gregor has quit (farmer.freenode.net irc.freenode.net). 08:10:19 -!- fizzie has quit (farmer.freenode.net irc.freenode.net). 08:12:24 -!- coppro has joined. 08:12:24 -!- comex has joined. 08:12:24 -!- Pthing has joined. 08:12:24 -!- cal153 has joined. 08:12:24 -!- dbc has joined. 08:12:24 -!- nodd has joined. 08:12:24 -!- zeotrope has joined. 08:12:24 -!- sebbu has joined. 08:12:24 -!- rodgort has joined. 08:12:24 -!- yiyus has joined. 08:12:24 -!- fungot has joined. 08:12:24 -!- mycroftiv has joined. 08:12:24 -!- EgoBot has joined. 08:12:24 -!- bsmntbombdood has joined. 08:12:24 -!- olsner has joined. 08:12:24 -!- lifthrasiir has joined. 08:12:24 -!- Deewiant has joined. 08:12:24 -!- Ilari has joined. 08:12:24 -!- mtve has joined. 08:12:24 -!- SimonRC has joined. 08:12:24 -!- HackEgo has joined. 08:12:24 -!- uorygl has joined. 08:12:24 -!- puzzlet has joined. 08:12:24 -!- Gregor has joined. 08:12:24 -!- fizzie has joined. 08:29:40 -!- FireFly has quit ("Leaving"). 08:33:02 -!- nooga has quit (Read error: 110 (Connection timed out)). 08:41:51 -!- jpc has quit ("I will do anything (almost) for a new router."). 08:55:30 It depends on calloc, which is not specified by either C or POSIX. Yeah, POSIX isn't ANSI C or POSIX. <-- Happy typo day! 08:56:46 This is your brain on macros. <-- since a compiler will generate it, will it matter? 09:02:18 say contents for each parameter <-- end tell 09:03:37 lol 09:04:24 If you have a bignum char... <-- then what would CHAR_BIT be? 09:05:06 -!- ais523 has joined. 09:09:11 So... noreturn tells GCC "be really dumb-fuck retarded about tail calls". <-- it could be a side effect of what it actually tells gcc. Which is "this function won't return, so you can know that any code after the call to it is dead, and you don't need to handle it actually returning ever, no need for a function epilogue either there!" 09:11:26 pikhq: The really fucking retarded solution? If you give it a non-void return type, it works fine. <-- returning a value from a void function is undefined isn't it? 09:11:50 oh wait it isn't that. Still that line is strange. I'm not sure it is well defined indeed 09:12:28 link? 09:13:17 Speaking of the N900, there's a rather funky package in the repository: easy-deb-chroot. It installs a 1.5G Debian (lenny) image you can chroot into; there's Iceweasel w/ Java, Gimp and the full OpenOffice.org suite installed by default, but you can obviously install anything in the Debian arm port. 09:13:40 Unless it breaks that too :P <-- --enable-bootstrap 09:15:10 Gentoo: it has correct compilers. :P <-- unsurprising 09:17:05 * AnMaster gets to end 09:17:05 coppro, link to? 09:17:33 -!- Pthing has quit (Remote closed the connection). 09:18:15 AnMaster: the source file he's discussing 09:18:30 hm 09:18:45 coppro, there was only snippets, mostly inline in irc 09:18:58 static void proc_recurse(scm_proc *cont) { 09:18:58 return proc_recurse(cont); 09:18:58 } 09:19:01 maybe you meant that 09:19:35 oh 09:19:53 why is it messing with noreturn then? 09:19:53 coppro, there were multiple versions of it, would be easier to check logs yourself. Instead of me repasting it all 09:20:43 :( 09:20:48 * coppro is too lazy 09:22:35 coppro, he is implementing a scheme->C compiler 09:22:40 oh 09:22:40 ehird that is 09:22:52 how's he doing call-cc? 09:23:01 coppro, I don't think he got there yet 09:23:24 might as well start there once you have your data structures 09:23:29 if you can't to call-cc, no point 09:23:51 AnMaster: he's likely at school, considering the day of the week, time of the day, his age and the fact that it's termtime 09:24:02 right 09:24:16 coppro, s/to/do/ ? 09:24:26 ais523, oh hi there 09:24:27 yes 09:24:33 ais523, and probably, but he log reads 09:24:41 I did notice he wasn't in channel 09:24:55 ehird, school? Does not happen! 09:25:04 Does not compute. 09:25:08 coppro, was that a reference to Nation? 09:25:11 yeppers 09:25:25 I use that all the time now 09:25:26 also it looks like fizzie didn't spot it. 09:26:03 coppro, didn't they make an play or opera or Nation iirc? Think I read about that somewhere. 09:26:04 Well, I haven't read it. Too new, you see. 09:26:19 AnMaster: s/or N/of N/? 09:26:26 coppro, indeed 09:26:50 dunno 09:26:50 wouldn't surprise me 09:27:52 also lag spikes 09:28:45 very irritating 09:28:45 jumps between 2 and 30 seconds of lag 09:28:45 only on freenode 09:29:27 -!- cal153 has quit (Read error: 60 (Operation timed out)). 09:31:58 -!- SimonRC_ has joined. 09:32:05 -!- SimonRC has quit (Broken pipe). 09:39:42 -!- cal153 has joined. 09:47:15 -!- anmaster_l has joined. 09:58:49 -!- Pthing has joined. 10:06:20 Heh... Lag reading is frozen at 104s lage... 10:08:31 Ilari, 0.1 atm for me. And yes I had similar issues a moment ago 10:12:00 lagging a lot for me too every now and then 10:12:25 ah 10:12:43 [470] #freenode ##overflow Forwarding to another channel Forwarding to another channel 10:12:43 ok, /that's/ unusual 10:13:02 looks like loads of people are rushing over to #freenode to see what's going on 10:13:02 ais523, not really 10:13:02 ais523, it does happen after lots of joins 10:13:02 oh wiat 10:13:02 wait* 10:13:24 you mean the double message 10:13:38 *that* is strange 10:13:38 why was forwarding repeated 10:13:38 ais523, also no, just lots of spambots joining and then directly being banne 10:13:38 banned* 10:14:06 this connection seems unlaggy though 10:14:24 lindbohm.freenode.net 10:14:33 hm seems to be in Sweden 10:14:40 and ##overflow is a pretty pointless channel, seeing as it's moderated and has no ops 10:14:44 it only exists for the message in the topic, I think 10:14:47 anmaster_l: no, I mean the channel ##overflow itself is pretty pointless 10:14:49 (lag at 79s for me...) 10:14:59 anmaster_l: no, I mean the channel ##overflow itself is pretty pointless 10:15:00 err what 10:15:05 hm seems to be in Sweden 10:15:05 and ##overflow is a pretty pointless channel, seeing as it's moderated and has no ops 10:15:05 it only exists for the message in the topic, I think 10:15:05 anmaster_l: no, I mean the channel ##overflow itself is pretty pointless 10:15:12 anmaster_l: it's moderated, and has no ops, therefore nobody can be voiced 10:15:14 that is what it reads like here 10:15:15 .... 10:15:20 I don't know what you replied to 10:15:54 ais523, issue: There is nothing that " anmaster_l: no, I mean the channel ##overflow itself is pretty pointless" matches up to on my end 10:16:02 I don't know what you replied to <-- neither do I, this lag is making regular conversation pretty much impossible, we're going to have to start quoting I think 10:16:51 01 ais523, " I don't know what [...]" Or use serial numbers. I use odd, you even 10:17:02 03 and no it isn't octal 10:17:30 01 ais523, " I don't know what [...]" Or use serial numbers. I use odd, you even <--- that still makes no sense because it would be unclear what people were replying to 10:18:30 05 (in reply to ais 01, which should have been 02 in fact) how so? 10:19:41 07 ais523 it works like threads on mailing lists. that "in reply to" header whatever the spelling was (in-reply-to?) 10:19:55 05 (in reply to ais 01, which should have been 02 in fact) how so? <-- because the arrow method of quoting gives more context (you don't need to quote a quote, so it doesn't get ridiculously long), and doesn't have a message 100 problem 10:20:30 07 ais523 it works like threads on mailing lists. that "in reply to" header whatever the spelling was (in-reply-to?) <-- and I'm not really sure about in-reply-to just because I set my email client not to do threads (threads are just a poor substitute for proper quoting) 10:21:06 09 ais523, in reply to "message 100 problem", well we could just add a third digit, in fact I don't know why I added a 0 to begin with 10:21:33 09 ais523, in reply to "message 100 problem", well we could just add a third digit, in fact I don't know why I added a 0 to begin with <-- also, the whole odd/even thing fails as soon as anyone else wants to talk 10:21:59 11 ais523 in reply to "email client not to do threads" <-- what the heck. It is still useful on high traffic lists where you only want to follow some discussions 10:22:57 what the heck. It is still useful on high traffic lists where you only want to follow some discussions <-- but it fails utterly as soon as a discussion forks; forcing people to reply to the most recent message all the time is no way to do a conversation 10:23:31 13 ais523, in reply to "odd/even thing fails", well then what about using the first digit as a person id, the the remaining (variable count) as a message id. Or generate something like an UUID for every message (a7bc5039-c606-4956-9cd6-22c560783927) 10:24:06 well then what about using the first digit as a person id, the the remaining (variable count) as a message id. Or generate something like an UUID for every message (a7bc5039-c606-4956-9cd6-22c560783927) <-- you're seriously overthinking this 10:24:10 15 ais523, it doesn't fail utterly in that case. It works fine to keep two forks. 10:24:35 17 in reply to "overthinking", yes it was a joke 10:24:44 it doesn't fail utterly in that case. It works fine to keep two forks. <-- it doesn't work fine to keep 80 to 100 forks, which is what a high traffic discussion should become 10:25:13 19, in reply to "80 to 100 forks" works, for 5 forks or such it works. 10:25:27 21 which is what I consider a high traffic list 10:25:44 23 even on lkml I doubt you hit 80 to 100 forks 10:26:07 25 and yes some quoting is useful. but >>>>>>>>>>>>>>>>>>>>>>>>> is really irritating 10:26:13 27 two levels work fine 10:26:44 29 maybe up to 3 or 4 at most. More than that and you end up with wrapping issues and what not 10:27:32 31 ais523 ^ 10:28:09 even on lkml I doubt you hit 80 to 100 forks <-- pretty much half of messages end up as forks if people reply to the message they actually should reply to, rather than the most recent one 10:28:47 and yes some quoting is useful. but >>>>>>>>>>>>>>>>>>>>>>>>> is really irritating <-- have you never heard of an indentation reset? 10:29:08 33 (in reply to ais523 replying to msg 19), sure, but most of those won't get replies in my experience. 10:29:27 35 (in reply to ais523 replying to msg 25), no I haven't 10:29:31 have you never heard of an indentation reset? <-- or, fwiw, simply editing out the messages you aren't responding to 10:29:46 plus ping is low enough atm 10:29:50 so we don't need it 10:30:07 right now at least 10:31:28 ais523, anyway, did you get into #freenode? 10:31:39 I haven't tried for a while 10:31:41 trying again now 10:31:51 nope, went to ##overflow again 10:32:03 ais523, flood option is 15.3 10:32:06 err 10:32:08 15,3 10:32:18 so it means 3 clients per 15 seconds I believe 10:32:27 ais523, try again every few seconds for a while 10:32:41 since the quota is filled up with spambots very fast 10:32:46 anmaster_l: respond to a channel being DOSed by DOSing it? 10:32:58 ais523, no. But that is the only way to get in 10:33:07 it isn't dosing it 10:33:10 just retrying the opteration 10:33:35 ais523, for ever 4 spambots about one real user is getting in 10:33:53 ah, got in this time 10:34:06 ais523, quite quiet atm. 10:34:20 yes, surprisingly so 10:34:36 ais523, wasn't a while ago 10:37:54 ais523, those like "urcahnqk" look like those spambot thingies 10:41:56 -!- oerjan has joined. 10:45:24 -!- MizardX has joined. 10:47:57 oerjan, hi there 10:48:04 hi AnMaster 10:48:26 ais523, getting lag issues again on my other connection. Sigh 10:48:43 ah now it showed up here finally 10:48:45 took a while 10:52:20 oerjan, ais523: does either of you understand xkcd today 10:52:27 I don't 10:52:52 do either* ? 10:57:38 it is a robot battle 10:57:42 apparently 10:58:15 Based on the last frame, it might be some sort of a soccer-style game the robots are supposed to play. 10:58:44 They do that sort of stuff quite a lot. 10:59:31 There's http://en.wikipedia.org/wiki/RoboCup for example; though I have no idea if they do anything that'd involve >1 ball in the game at the same time. 11:03:00 hm okay 11:09:26 -!- oerjan has quit ("Lost terminal"). 11:23:36 wow: http://blogs.perl.org/users/cpan_testers/2010/01/msnbot-must-die.html 11:23:54 it seems that Microsoft DOSed the CPAN testers, probably by accident 11:28:54 hm 11:29:01 did he mail them about the issue? 11:29:12 he/she* 11:34:30 not sure, there isn't much info on the page 11:34:41 true 11:44:19 -!- Pthing has quit (Remote closed the connection). 11:45:16 he/she/it* -- stop with the discrimination against genderless AI entities. 11:45:43 hm good point 13:17:25 -!- FireFly has joined. 13:23:34 -!- soupdragon has joined. 14:23:22 ais523, how goes esoteric projects atm? 14:23:35 on hold while I do RL work 14:23:42 right 14:24:38 -!- kar8nga has joined. 14:35:00 -!- ineiros has quit (Read error: 110 (Connection timed out)). 14:50:53 -!- ineiros has joined. 14:57:18 -!- nooga has joined. 15:18:06 -!- BeholdMyGlory has joined. 15:23:15 -!- anmaster_l has quit (Read error: 60 (Operation timed out)). 15:52:03 ais523: what kind of rl work? :o 15:53:37 augur: teaching, and research 15:53:46 WAT 15:53:48 how old are you :| 15:53:50 I just came back from teaching Java 15:53:52 augur: 22 15:53:56 oh ok 15:53:59 TAing? 15:54:01 yep 15:54:16 where are you a TA? 15:54:31 whats your gradschool, that is 15:54:43 TA? 15:54:43 not "The CS Dept. x3" that would be a bad answer :| 15:54:46 what does that for 15:54:48 teaching assistant 15:54:56 ah 15:55:03 -!- anmaster_l has joined. 15:55:05 a far more complex program than a proof assistant! 15:55:21 AnMaster: it's probably the #1 most popular job done by postgraduate students in order to gain extra money 15:55:35 but I'm doing it simply to give me an extra year for my research 15:55:38 ais523: where do you go to gradschool? 15:56:27 augur: Birmingham University 15:56:31 cool cool 15:57:13 yeah ais523 is not just a pretty face 15:57:19 -!- nodd has changed nick to oklopol. 15:57:33 nodnol! 15:57:47 ais523, sounds reasonable. But don't you need to take a course^Wmodule in pedagogy then? 15:58:01 TAing doesnt require that, no 15:58:04 hm 15:58:08 because its not for like 15:58:10 highschool 15:58:12 as a result, most TAs are rather rubbish 15:58:12 its for universities 15:58:16 I know I would be a bad teacher, it isn't like I can explain thing 15:58:27 i can explain things SO WELL OMG 15:58:31 :P 15:58:32 i've been told i should be a teacher 15:58:37 well, not to someone who doesn't know most of it already 15:58:45 me neither 15:58:56 im also teaching a pseudo-class this upcoming semester on intro programming for some fellow ling grads 15:59:09 which makes me want to ask -- if anyone has suggestions, do tell 15:59:23 i'd love to know what you think i should do. im going to try and do it like SICP 16:00:14 augur, isn't it specified what the class should be about? 16:00:21 like which language and such 16:00:27 no, because im the one who made the class up 16:00:42 its just for some fellow grad students who recently realized "hey, i should learn to program" 16:00:57 augur, as for lisp, in general most people who aren't really good at the concepts it uses tend to have way easier to learn an imperative language first 16:01:06 just to get the idea of "control flow" and such 16:01:13 and "function" 16:01:25 well, im going to cover a lot of basis, but people here i think understanding recursion well enough 16:01:30 yeah you learn functions much better from non-functional programming 16:01:36 we have lots of people who do semantics, lambda calculus all over the place, etc 16:01:45 I'd imagine linguists would have an easier time with a Lisp than with anything else. 16:01:45 at least that is my observation. If they are math students then Lisp might in fact be easier 16:02:06 -!- soupdragon has quit ("Leaving"). 16:02:23 oklopol, not really, but lisp is quite hard as a concept, python would possibly be a good start if you hadn't done *any* programming before 16:03:58 maybe so, i don't really want to think about hard problems like these 16:05:35 ok im off 16:05:36 bye guys 16:06:17 bai 16:06:49 bie 16:08:09 buy 16:08:13 * uorygl coughs. 16:13:01 -!- soupdragon has joined. 16:14:03 -!- nooga has quit (Read error: 104 (Connection reset by peer)). 16:16:56 -!- soupdragon has quit (Client Quit). 16:18:30 -!- soupdragon has joined. 16:24:39 -!- augur has quit (Read error: 110 (Connection timed out)). 16:44:12 -!- ehird has joined. 16:45:29 yodelling absolutely puts yodelling 16:45:59 so, we're getting insanely active 16:46:03 two >200 KiB logs in five days 16:46:33 01:02:18 say contents for each parameter <-- end tell 16:46:44 Hey, at least mine has sane semantics and is more of a translation of Perl to lighter-weight syntax. 16:46:51 say foreach @ARGV is how that works in Perl, after all. 16:46:59 foreach → for each is obvious, and @ARGV → parameters too. 16:47:14 01:09:11 So... noreturn tells GCC "be really dumb-fuck retarded about tail calls". <-- it could be a side effect of what it actually tells gcc. Which is "this function won't return, so you can know that any code after the call to it is dead, and you don't need to handle it actually returning ever, no need for a function epilogue either there!" 16:47:16 Exactly 16:47:18 That's true :P 16:47:33 I want it to do that, but still CALL 16:47:38 I]t seems my gcc is broken 16:47:39 *It 16:47:41 ehird, I'm not surprised that noreturn messes up if you *do* in fact return 16:47:45 since pikhq compiled it 16:47:46 with 4.3 16:47:50 and it worked perfectly 16:47:53 exactly how i wanted it 16:47:55 In every which way. 16:47:56 AnMaster: It isn't just noreturn 16:47:58 I never got it to break. 16:48:00 it messes up with just static 16:48:00 ehird, it could be that it just happened to work but it shouldn't 16:48:01 ah 16:48:01 with no noreturn 16:48:11 okay that's strange 16:48:22 Gentoo's GCC vs. Ubuntu's. 16:48:36 I'm going with Gentoo's being correct; that sucker gets tested a lot. 16:48:51 01:23:24 might as well start there once you have your data structures 16:48:53 01:23:29 if you can't to call-cc, no point 16:48:55 Cheney on the M.T.A. 16:48:56 'nuff said. 16:51:13 * pikhq finds that his C lambdas close much more nicely when you implement the closures as a void*[]. 16:51:24 That's what I'm doing, heh. 16:51:46 I'm considering going with the Cheney on the M.T.A. hand-translated style, though, and just defining closure[0-n] 16:51:51 for easier allocation 16:51:54 (alloca is kinda meh) 16:51:58 Much nicer than creating a bunch of structs. 16:54:24 -!- SimonRC_ has changed nick to SimonRC. 16:54:32 *c = (void*[]){xgc_malloc(sizeof(unsigned int) * (n+1)), &f}; 16:54:39 Now *that's* how you close. 16:54:39 :P 16:54:43 pikhq: Of course, my case is rather different to yours... 16:54:48 Being that malloc() is pretty much verboten. 16:54:53 (Unless I really need a *big* data structure.) 16:55:02 Whereas I feel free to just use malloc everywhere. 16:55:07 And never, ever, ever free. 16:55:16 (that's Boehm GC's job!) 16:55:28 pikhq: Yeah, but you can't use a struct initialiser and then return a reference to it. 16:55:58 Not really. 16:56:10 Pity, too. 16:56:32 pikhq: But I can! 16:57:10 * pikhq mutters 16:59:07 pikhq: I love how I barely have to implement any scoping. 16:59:36 If we declared a variable and haven't gone to a new continuation, use it directly. Otherwise, fetch it from our environment. 16:59:44 (which is just env->varname.) 17:00:53 If I add global function pointers so you can redefine top-level functions, then the additional logic is just "if there's no lexical bindings of this before the top level, assign to the pointer named global_whatever or something." 17:01:41 ehird: Yeah, that's about as simple as it gets. 17:03:11 pikhq: btw, I know Linux won't allocate anything below at least (void *)259, most likely, but do you know about other OSs? 17:03:13 BSDs? 17:03:26 #define F ((scm_value) 0) 17:03:27 #define T ((scm_value) 1) 17:03:29 #define nil ((scm_value) 2) 17:03:30 #define tag_char(x) ((scm_value) 3+(x)) 17:03:32 #define tag_int(x) ((scm_value) (x<<1)+1) 17:03:33 is what I have 17:03:47 So I depend on: pointers' low bit is 0, no pointer is <259 17:04:19 I could, of course, make it 1, 3, 5 for F/T/nil, but that breaks the fact that you can do if (foo) to detect #f. 17:04:36 and I could also spread out the chars so they have low bit 1, but I think this way is nicer 17:04:38 easier unpacking 17:04:47 ehird: Most UNIXs won't allocate the first page. 17:05:02 Know of any that do? 17:05:07 No. 17:05:11 hmm, wait, I know that 0 won't be allocated 17:05:17 so it could be 0, 1, 3 for F/T/nil 17:05:20 and that preserves the if 17:05:29 It's generally not allocated so that NULL is guaranteed to segfault. 17:05:30 pikhq: then again, even pointers isn't mandatory either is it? 17:05:54 ehird: Not mandatory, just common. 17:06:46 then i'll just leave it as is because i'm depending on common behaviour anyway 17:06:55 I should just call it a Scheme compiler for x86 Linux 17:07:00 c is just my assembly :P 17:07:29 I think even Boehm GC assumes even pointers. 17:07:35 ... And Boehm GC runs everywhere. 17:07:51 -!- augur has joined. 17:07:52 03:45:16 he/she/it* -- stop with the discrimination against genderless AI entities. 17:08:04 Or, you know, genderless humans. 17:08:11 Rather more likely :P 17:10:08 -!- jpc has joined. 17:13:52 08:00:57 augur, as for lisp, in general most people who aren't really good at the concepts it uses tend to have way easier to learn an imperative language first 17:13:54 false 17:15:42 ehird, well, it is based on observation about average people. Not on observation of those in this channel 17:16:23 also yes it is not a scientifically rigours study 17:16:27 yes,* 17:16:33 It is still false; imperative programming is only intuitive because that's how it's taught. 17:16:47 Certainly perhaps a "man on the street" could understand a list of instructions but not a simple mathematical function, but 17:16:50 ehird, so both are equally easy to learn? 17:16:56 1. This man is not, will never be, and is not suitable to be a programmer. 17:17:01 2. These are linguists we're talking about. 17:17:10 You know the curry-howard isomorphism? Programming is logic? 17:17:17 Types are statements and values are proofs? 17:17:25 There's one of those for linguistics and logic. 17:17:26 ehird, oh right linguists. That probably means some fancy language will be easier indeed 17:17:30 And thus linguistics and (functional) programming. 17:17:45 -!- augur_ has joined. 17:17:55 I would say that functional programming has a higher learning curve, but much fewer stubbed toes after the initial climb. 17:18:16 Most definitely. 17:18:41 And beginning programmers have a *lot* of stubbed toes, because writing understandable, reliable imperative code is almost impossible. 17:18:42 Much agony results from debugging imperative code. 17:19:00 Especially in low-level languages, where a bug can readily rewrite the stack... 17:19:32 what's this about curry howard for linguistics 17:19:37 * pikhq finds that his C lambdas close much more nicely when you implement the closures as a void*[]. <-- as a array of void pointers? Why? 17:19:40 an* 17:21:04 soupdragon: i don't remember where I saw it, but it was on lambda the ultimate or something, also, augur has said it 17:21:20 basically your linguist notation is the typed lambda calculus, iirc 17:21:22 AnMaster: void **c=xgc_malloc(sizeof(void*)*2);c[0] = foo;c[1]=&bar; vs. struct the_closure_t {int *a;int *b} *c=xgc_malloc(sizeof(struct the_closure_t));c=(struct the_closure_t){foo, bar}; 17:22:22 link? 17:22:23 BTW, that struct declaration has file scope. 17:22:40 Or, you know, genderless humans. <-- that exists? 17:22:49 soupdragon: "i don't remember where I saw it" 17:23:03 AnMaster: occasionally but very rarely 17:23:26 AnMaster: Probably. Gender is fluid: you have transgendered people, people who's gender identity is basically in-between, etc. 17:23:32 (If I meant "sexless humans" I would have said that.) 17:23:34 "because writing understandable, reliable imperative code is almost impossible." <-- for new programmers only you mean? 17:23:41 No. 17:23:45 I mean it very literally. 17:24:03 ehird, for experienced programmers I find it "hard" instead of "almost impossible" 17:24:11 If you disagree, then you don't have a strict enough definition of reliable. 17:24:13 I agree with ehird; I can write relatively understandable imperative code, and sometimes it even ends up reliable, but it's nowhere near as good as equivalent functional code would be 17:24:17 unless it's very simple 17:24:25 Coding in a functional language makes you totally rethink how reliable things can be. 17:25:04 Heck, Dijkstra spent the entire life of a genius trying to figure out how to write understandable, reliable imperative programs. 17:25:10 He... sort of succeeded. 17:25:19 what's the point in even saying this 17:25:24 ehird, I think Unix managed fairly well considering that tools like valgrind didn't even exist back then. 17:25:25 not ever program is a function 17:25:32 not every program is a function* 17:25:35 soupdragon: But every program is a function. 17:25:36 and indeed 17:25:40 AnMaster: Unix was not reliable and it has never been reliable. 17:25:45 I didn't say imperative was better than functional 17:25:50 that's ridiculous pikhq, that's like saying everything is made from atoms 17:26:00 soupdragon: Heheh. 17:26:00 And you think the original Unix code was understandable? Wow. 17:26:01 I just said it wasn't quite as unreliable as ehird wanted to suggest 17:26:22 The original Unix code used fixed size buffers for a huge number of things. 17:26:24 ehird, I'm well aware of that parts of it wasn't 17:26:27 AnMaster: you haven't even programmed in any purely functional programming languages, let alone programming seriously in one, so it's understandable you would think that. 17:26:34 also what about modern *nix 17:26:38 like FreeBSD 17:26:40 But Unix's code was definitely not understandable; it was a mess. And it was extremely unreliable. 17:26:43 I read parts of freebsd kernel 17:26:47 fairly understandable 17:27:01 Y'know the term "buffer overflow"? The Unix opinion on them was "Why would you want to make the buffer overflow, anyways?" 17:27:02 AnMaster: you have no idea how reliable code can be because you've only ever used impure languages 17:27:07 there's not really any way to explain it 17:27:24 ehird, I coded in scheme quite a bit. I don't mention everything in this channel. Far from everything is esolang related 17:27:37 ... Scheme's not purely functional. 17:27:39 Scheme is not a purely functional language. 17:27:43 Neither is Erlang. 17:27:43 pikhq, I was getting to that 17:27:51 I'm aware of neither being pure 17:27:57 The gap between functional and purely functional is immense, and it is where the immense reliability emerges. 17:28:12 I'm also aware of that both give better results than imperative languges 17:28:37 The Haskell code I have written *can only fail if the compiler or the kernel have bugs*. 17:28:39 however, haskell does have a steep learning curve. I only went up it a tiny bit 17:28:46 (or, of course, you run out of memory) 17:28:50 pikhq how do you know that? 17:29:00 AnMaster: It only has that learning curve because you are used to other kinds of code. 17:29:06 soupdragon: It's fairly trivial to see. 17:29:08 pikhq, or logic errors. 17:29:15 pikhq: that's false; you cannot ensure that without dependent types 17:29:17 pikhq what sort of programs are you thinking about then? 17:29:18 but it's close to the truth 17:29:22 AnMaster: the type system helps you guarda gainst those, too. 17:29:35 Anyway, I'm not interested in debating this , really. 17:29:40 AnMaster: That's the only way for almost *any* Haskell code to fail. 17:29:42 -!- augur has quit (Read error: 110 (Connection timed out)). 17:29:44 ehird, I have always said I wanted strong typing, that being one of the things I really miss in erlang 17:29:46 pikhq: false 17:29:56 AnMaster: Strong typing as you know it is a waste of time. 17:30:11 ehird, if the compiler does it automatically it isn't 17:30:18 It is utter folly and makes programs incredibly inexpressive until you get to around the H-M + typeclasses level. 17:31:35 you can express a C-like language in haskell (using a monad) and then writing programs in this is equally hard as writing them directly in C -- functional programming doesn't help anything 17:31:40 also it helps catch some bugs certainly. erlang has optional type annotations. Using those I found very useful. Such as the system can tell that it is possible to pass something that won't work somewhere 17:31:41 or suc 17:31:44 such* 17:31:57 soupdragon: Let me borrow a term from Conal, then: denotational programming is more reliable. 17:31:58 and I understood that haskell has a very useful type system, I assume thus it is even better 17:32:02 soupdragon: And then you're not doing functional programming, you're making Haskell into the ultimate imperative language. 17:32:15 Anyway, I'm very bored about this because AnMaster has no hope in hell of understanding. 17:32:18 So let's talk about something else. 17:32:26 AnMaster: Learn Haskell, and be enlightened. 17:32:34 pikhq: he said he tried to bugt gave up 17:32:34 pikhq, what about other pure languages 17:32:44 ehird, no I said I tried and put it on hold 17:32:45 pikhq I still want to know what programs you wrote that are obviously correct 17:32:47 hmm, I'd like something like the Splint dialect of C, but with a less cumbersome syntax and that actually works 17:32:50 AnMaster: aka gave up 17:33:01 ehird, like you and most of your projects? 17:33:04 well I'm not like that 17:33:06 Anyway, please let's not tell AnMaster to learn Haskell; I Might End Up Maintaining His Code™. 17:33:12 AnMaster: you're boring 17:33:16 soupdragon: even versions of true in commercial UNIX have had bugs found in them before 17:33:24 ehird, what has that got to do with anything 17:33:24 soupdragon: Whole lot of relatively trivial ones. 17:33:27 soupdragon: pikhq was exaggerating 17:33:46 The non-trivial ones are merely *most likely* correct. I've not bothered proving it. 17:34:02 Some people realize "functional programming languages are great for functional programming, most programs are functions" but they express it in an odd way, saying stuff like "SET! makes programming impossible, object orientation is broken, ocaml sucks - the only way to get any real programming done is to use foldr in haskell" 17:34:27 pikhq, what about other pure languages 17:34:32 pikhq, still waiting for an answer 17:34:39 AnMaster: ... Which other ones? 17:34:43 pikhq I got that you didn't prove it but if you can just tell by inspection that they are correct that's pretty cool -- but I guess you don't want to show me any of these for some reason? 17:34:44 Miranda and Gofer!!!!!11 17:34:44 pikhq, that is what I'm wondering 17:34:52 ehird, are those the only ones? 17:34:53 There's Haskell, and a handful of Haskell-oids... 17:34:57 And... ? 17:35:03 AnMaster: very few practical ones. 17:35:10 why so few? 17:35:27 Because they're subtle and require intelligence to create and compile. 17:35:32 hm 17:35:41 soupdragon: http://sprunge.us/ETYc 17:35:41 Compare to, say, Python, which was whacked together in a few days based on a few vague ideas and a lot of C. 17:35:54 soupdragon: cat. 17:36:01 main = interact id 17:36:03 cat. 17:36:10 cat does not have options, btw. 17:36:33 why not make something like haskell but with a simpler syntax and less steep learning curve? 17:36:40 AnMaster: The syntax is simple. 17:36:40 ehird: /bin/cat does. 17:36:45 AnMaster: ... Haskell has a rather simple syntax. 17:36:45 AnMaster because it would still suck 17:36:48 ehird, I meant "simple as lisp" 17:36:48 Removing the learning curve would make it suck. 17:36:53 AnMaster: Liskell. (It sucks.) 17:37:14 AnMaster: why not make something like c but with compiler-enforced safety and no memory management? 17:37:20 ehird, also I didn't intend it as a production language. Rather as a language like scheme, for learning mostly 17:37:24 rather than for performance 17:37:24 it has to be just as fast and low-level 17:37:27 and incur no run-time overhead 17:37:41 AnMaster: I don't intend mine as a production language, either! 17:37:57 It's just for learning. So can I have this safe, no-memory-management C that is fast, low-level and has no runtime penalty for its features tomorrow? 17:37:59 ehird, so you are saying that scheme is impossible or such? 17:38:05 Scheme is not purely functional. 17:38:10 that's true 17:38:13 pikhq: btw you should use http://community.haskell.org/~ndm/cmdargs/ for command line args :P 17:38:23 ehird: Probably. 17:38:23 it's all type system and shizz 17:38:24 but it is the same vs other more advanced lisps really 17:38:29 pikhq: TYPE SYSTEM 17:39:37 pikhq okay I guess I see what you mean -- you are programming at such a high level that there's no confusion about what's going on here 17:39:53 pikhq: btw it should be putStr not putStrLn 17:39:59 plus I have yet to find a good haskell tutorial. 17:40:14 ehird: Dankon. 17:40:26 AnMaster: if neither Learn You a Haskell nor Real World Haskell get you understanding haskell, it is merely your imperative mindset that is broken. 17:40:53 ehird, the former I just found silly, the latter I don't remember seeing 17:40:57 * AnMaster googles 17:41:10 oh was it book only? 17:41:10 "Waah, it's silly. It sucks and Haskell sucks and you suck." 17:41:13 No. 17:41:13 rather than website 17:41:24 Look, I'm really uninterested in talking about this, so please don't highlight me about it again. 17:41:25 AnMaster, it's meant to be silly so its' fun to read 17:41:27 "Waah, it's silly. It sucks and Haskell sucks and you suck." <-- never said that. 17:41:35 I recommend that book it's good 17:41:35 I said don't highlight me about it again. 17:41:41 what I said is, I found it silly and not fun at all 17:41:50 thus it didn't work for me 17:41:53 pikhq: btw - for stdin is baad 17:41:54 maybe you just don't want to know haskell 17:42:10 it breaks the uniform identifierspace that is the filesystem and requires every program to do additional processing 17:42:15 when /dev/stdin is a perfectly good name :( 17:42:17 ehird: Yes, but 'tis the standard. 17:42:21 soupdragon, I don't have the money to pay for books currently except course literature. That is expensive as it is 17:42:21 bah 17:42:23 you can do better! 17:42:36 AnMaster: it's published online you dumbfuck 17:42:40 there's a whole link on the homepage to read it 17:42:44 you're being deliberately obstructive 17:42:44 AnMaster not sure what that has to do with it 17:42:53 ehird, hm then I misread the result 17:43:09 Real World Haskell is *also* available online. 17:43:19 ehird, first result was amazon.com you see 17:43:46 then o'reilly 17:43:57 yeah, no books are both online and sold 17:44:00 the site for the book was only at the 7th place 17:44:02 http://diveintopython.org/ is a LIE 17:44:06 ehird, well it didn't say near the top 17:44:11 and stop being silly 17:44:21 I'M VERY SERIOUS NOW :| 17:44:32 ehird, everyone just looks at the top few results at google usually 17:45:13 After I just said "it's not just a book"? 17:45:19 You're just wasting our time. 17:45:37 anyway 17:45:40 what was I saying 17:46:43 ehird, hm? where? If you mean " AnMaster: it's published online you dumbfuck" then it was afterwards 17:46:56 -!- nooga has joined. 17:46:56 no 17:46:56 anything before that I must have missed 17:46:59 before 17:47:46 ehird, well unable to locate it, but I don't really care. Won't make you change your mind anyway. *shrug* 17:47:46 pikhq: ohai 17:47:51 i done rewrite your program as oneliner 17:47:58 main = putStr =<< (fmap concat $ getArgs >>= mapM readFile) 17:48:07 ok technically "cat" on its own a nop 17:48:11 but i'm paid by the anticharacter! 17:48:18 oh was it book only? 17:48:19 "Waah, it's silly. It sucks and Haskell sucks and you suck." 17:48:19 No. 17:48:22 oh you mean that no? 17:48:28 [17:40] oh was it book only? 17:48:29 [17:40] No. 17:48:31 import UnixInOneLine 17:48:31 [17:40] rather than website 17:48:36 ehird, see order here 17:48:36 cat = unix id 17:48:45 it looked like it was connected to that quoted line 17:49:00 soupdragon: is unix "interact but with file arguments" :P 17:49:07 ehird, like trying to point out the sarcasm in a very clear way 17:49:25 ehird, please do remember the timing issues with irc. 17:49:37 Fix your massive lag. 17:49:45 -!- augur_ has quit (Read error: 110 (Connection timed out)). 17:49:48 ehird, 0.1 seconds yes 17:49:53 that is what my meter shows 17:49:59 meh. 17:50:41 ehird, * Ping reply from ehird: 1.01 second(s) 17:50:49 either most of the lag is on your end or between servers 17:50:52 182 ms here. 17:51:00 ehird, well then between servers 17:51:00 ehird: cat was one of my earlier Haskell programs. 17:51:05 not much I can do about that 17:51:35 meh 17:51:44 echo time! 17:52:04 main = putStr =<< getArgs 17:52:05 main = putStrLn =<< (unwords <$> getArgs) 17:52:13 pikhq: type error. 17:52:19 Ah, right. 17:52:35 Yeah, getArgs :: IO [String]. Need some unwords. 17:53:13 main = putStr =<< (fmap (reverse . concat) $ getArgs >>= mapM readFile) 17:53:28 ohai i turned you into tac 17:53:33 (Except it's character-based tac, not line-based.) 17:53:38 (Also, it prints the last argument first.) 17:53:54 main = interact $ unlines . map reverse . lines 17:54:00 stdio-only tac. 17:54:03 Whoo. 17:56:54 * ehird decides that a good compilation strategy is transforming the Scheme program into an sexp form of C. 17:57:05 ...although I don't want to implement macros right now. 17:59:38 lol, OS X ehird:staff shows up in linux as 501 dialout 18:01:14 -!- kar8nga has quit (Remote closed the connection). 18:02:12 ehird, what distro? 18:02:21 on arch iirc users start below 1000 18:02:23 kubuntu 18:02:26 probably Snow Leopard 18:02:33 well yeah users would start about 1000 there 18:02:34 "shows up in linux as" 18:02:34 ais523, -_- 18:02:45 (sorry, I'm in a misinterpetitive mood at the moment) 18:02:51 I didn't actually get around to upgrading to Snow Leopard 18:02:56 ais523, also that would be version, not distro 18:03:10 Well, technically Snow Leopard is a distribution of Darwin. :P 18:03:17 ais523, it's like saying jaunty is a different ubuntu distro than karmic 18:03:24 With its own, proprietary windowing system and applications. 18:03:29 ehird, note "technically" 18:03:35 AnMaster: sometimes it feels like that! 18:04:03 where can I list all the fs types i can mount? 18:04:05 ais523, it requires a mind bending definition of distro though 18:04:13 ehird, atm? somewhere in /proc 18:04:20 /proc/filesystems 18:04:22 The argument following the -t is used to indicate the file system type. The file system types which are currently sup‐ 18:04:23 ported include: adfs, affs, autofs, cifs, coda, coherent, cramfs, debugfs, devpts, efs, ext, ext2, ext3, ext4, hfs, hfs‐ 18:04:25 plus, hpfs, iso9660, jfs, minix, msdos, ncpfs, nfs, nfs4, ntfs, proc, qnx4, ramfs, reiserfs, romfs, smbfs, sysv, tmpfs, 18:04:26 udf, ufs, umsdos, usbfs, vfat, xenix, xfs, xiafs. Note that coherent, sysv and xenix are equivalent and that xenix and 18:04:28 coherent will be removed at some point in the future — use sysv instead. Since kernel version 2.1.21 the types ext and 18:04:31 xiafs do not exist anymore. Earlier, usbfs was known as usbdevfs. Note, the real list of all supported filesystems depends 18:04:31 ehird, however, loading more modules may change which ones are available 18:04:34 on your kernel. 18:04:36 or just man mount 18:04:38 hfs-plus then 18:04:43 ehird@meson:/media$ sudo mount -t 'hfs-plus' -o user=ehird,group=ehird /dev/sda2 Macintosh\ HD 18:04:45 mount: unknown filesystem type 'hfs-plus' 18:04:47 ehird, "note the real list" 18:04:48 *look of disapproval* 18:05:00 ok, it's really "hfsplus" 18:05:03 thanks, misleading man page 18:05:04 I love you 18:05:04 ehird, yes see. 18:05:16 ehird: "hfsplus" on my manpage 18:05:24 it's nroff you should probably hate, rather than the manpage itself 18:05:34 ehird, it is just line broken there 18:05:42 eh didn't work giving -o uid=ehird,gid=ehird ;( 18:05:46 *:( 18:05:50 ais523: yar 18:06:06 wth 18:06:12 man mount give me the plan9 page 18:06:24 okay only that shell 18:06:25 whatever 18:07:10 ehird: those are filesystem-specific options, and hfsplus has no specific options it seems 18:07:26 >_< 18:07:32 I'll just have to chown the directroy then 18:07:34 *directory 18:07:36 NUCLEAR OPTION 18:07:44 read only filesystem 18:07:45 fml 18:07:48 fine then 18:07:52 I'll just copy all the files 18:07:59 ehird@meson:/media/Macintosh HD/Users/ehird$ cd Music/ 18:08:00 bash: cd: Music/: Permission denied 18:08:06 FFFFFFFUUUUUUUUUUUU 18:08:07 try sudo cd 18:08:10 ehird, wonderful 18:08:11 ais523: lol 18:08:14 I know 18:08:19 (try starting a root shell, then cding) 18:08:21 sudo sucks for being a program 18:08:22 ais523, that... XD 18:08:27 I do "sudo foo >bar" all the time 18:08:29 and get bar: permission denied 18:08:38 ehird, I do sudo su - 18:08:38 and then realise GOD DAMMIT SUDO SHOULD BE HANDLED BY THE SHELL 18:08:42 AnMaster: aka sudo -s. 18:08:47 ehird, there is a difference 18:08:53 ehird, sudo -s doesn't reset umask 18:08:58 Sometimes I do "sudo cp /dev/stdin bar" 18:09:09 I guess "sudo cp <(sudo ...) bar" would also work 18:09:18 ehird, which really matters since mine is set to not allow world any permissions by default 18:09:26 thus I need a reset umask from a login shell 18:09:29 you use umasks? 18:09:30 you're crazy. 18:09:32 for some reason I haven't got it to work 18:09:35 in any other way 18:09:36 ehird, what? 18:09:45 there is *always* a default umask 18:09:47 fairly sure even ais523 will agree here 18:09:57 0022 usually 18:09:57 AnMaster: yes, but seting it yourself 18:10:04 * ehird cp -R iTunes\ Music ~ 18:10:05 umask is as far as I can tell only useful in shellscripts 18:10:07 ehird, why not? it's what it is meant for 18:10:17 oh dear 18:10:21 that's 21 gibibytes 18:10:32 AnMaster: it makes more sense to deny world-execute and world-read to your home dir, then it does to mess with the umask 18:10:40 ais523: *than 18:10:47 err, yes, *than 18:10:49 I should get more sleep 18:11:03 ais523, well yes but that messes up ~/public_html 18:11:12 ais523, since web server can't access it any more 18:11:12 Filesystem Size Used Avail Use% Mounted on 18:11:14 /dev/sda3 61G 4.0G 54G 7% / 18:11:21 ais523: how long do you think copying 21 gibibytes from one partition to another will take? 18:11:40 ais523, thus I need only that to be world read and execute in my home dir. keeping the rest out 18:11:49 ehird: I'm actually not sure 18:11:58 let's find out 18:12:05 Go go gadget cp -R 18:12:19 *time cp -R 18:12:22 it took me maybe about an hour to copy 1 gigabyte from one computer to another via compressed rsync and an Ethernet cable 18:12:33 root@meson:/media/Macintosh HD/Users/ehird/Music/iTunes# time cp -R iTunes\ Music ~ 18:12:36 dun dun dun dun 18:12:37 dun dun dun dun 18:12:39 dun DUN 18:12:44 ais523, gbit or 100 mbit? 18:12:46 ais523: ethernet is slower than disk methinks 18:12:53 ehird: agreed 18:12:56 well, I mean 18:12:57 ethernet+disk 18:12:58 I was just giving that as a comparison 18:13:03 I should be getting, like, 100 mbit/s, sustained 18:13:08 so —whips out Frink— 18:13:16 ehird: actually, slowest was probably trying to compress and decompress stuff on a netbook 18:13:28 AnMaster: not sure; it's gigabit on one computer, but I don't know about the other one 18:13:32 and the slower connection would be used 18:13:33 21 gibibytes / (100 megabits/s) -> minutes 18:13:34 58720256/1953125 (exactly 30.064771072) 18:13:37 About half an hour. 18:13:42 ehird, you will find this crazy: when I need fast transfer between my laptop (has gbit ethernet) and my desktop (100 mbit only) I use ethernet over wirewire instead 18:13:49 that give me about 4 times as fast as 100 mbit 18:13:49 Wirewirewire. 18:14:00 err 18:14:02 firewire* 18:14:06 obviously 18:14:53 thing is, desktop firewire hardware is kind of buggy, it doesn't work after you unplug the cable until next reboot again. that pci card is *really* old though 18:15:00 since 2003 or so I think 18:15:08 maybe 2002? 18:15:16 well early firewire times anyway 18:15:21 ais523: is amarok still okay? 18:15:26 guess you wouldn't know 18:15:40 it was superb back in the kde 3 days, kde 4 seems to have messed up the button layout so i don't know what more they'll change 18:15:43 (they overlap weirdly now) 18:15:51 ehird: it was rather screwed-up when I last tried it 18:16:03 21 gibibytes / (100 megabits/s) -> minutes <-- that ignores protocol overhead 18:16:03 but then, I've been having trouble with Phonon for a while 18:16:07 there is ip then tcp 18:16:10 http://static.kdenews.org/jr/amarok-2-beta-3.jpg 18:16:14 behold the fucked up buttons 18:16:15 also, it doesn't really fit what I want from a media player, I'm using Totem at the moment to play music 18:16:16 AnMaster: disk to disk. 18:16:22 and it serves a different purpose from Amarok 18:16:23 specifically, partition to partition 18:16:38 ehird, ah well then you have to consider seek time 18:16:41 ais523: yeah i usually just put my whole library on shuffle and skip liberally 18:16:43 since it needs to seek back and forth 18:16:46 between the partitions 18:16:46 it's the last fuss 18:16:57 ehird: I have a bunch of .pls files 18:17:05 and Totem set to play them in random order repeatedly 18:17:09 and also skip liberally 18:17:10 AnMaster: true, but every album by itself should be continuous on disk i think 18:17:17 so it shouldn't be too bad 18:17:28 ais523: yes, but if i just drag all my music into amarok i don't need to set up pls files 18:17:31 (I used to use the media buttons for that, but this computer doesn't have them, so I use super-F, super-B, super-P as forwards, back, play/pause) 18:17:37 ehird, you defragged your hfsplus disk recently 18:17:43 I doubt it is continuous 18:17:45 AnMaster: hfs doesn't do defragging. 18:17:46 neither does ext 18:17:53 ehird, hfs did under classical 18:17:54 AnMaster: but i copy the albums in blocks, obvs 18:17:59 you can defrag offline using tar, IIRC 18:17:59 ehird, well, not apple tool 18:18:15 ais523, there was "norton utilities 6.0" with "speed disk" 18:18:19 err 18:18:20 ehird, ^ 18:18:23 ais523: music libraries let me have a very streamlined piracy process, get torrent → download → put into music library → fiddle with tags a bit → it comes up in shuffle 18:18:49 I have a very streamlined process for legitimately adding legitimately obtained music to my playlists, to 18:18:50 *too 18:18:57 ehird, saying that to ais is like, well, I can't think of the right word 18:19:03 yes, but obtaining legitimate music is slower 18:19:06 totem can edit playlists GUI-wise, but I mostly just open them in Emacs and add the new file in 18:19:07 AnMaster: wholly intentional 18:19:14 ehird, I realised that. 18:19:19 :D 18:19:24 ehird: it's mostly from computer games I own legally 18:19:32 either that, or music I wrote 18:19:50 my music is mostly *.flac from cds I own legally 18:19:58 I rip those I listen to often 18:20:02 the rest I keep on cd 18:20:13 ais523: aargh, thanks for the earworm 18:20:29 ugh, what have I done now? 18:20:42 Perceptively Chilly Sonata? 18:20:42 ais523: made me think of video game music 18:20:52 ehird: heh, I actually like video game music 18:20:53 because, even in *.ogg it would fill over 70 GB, (based on taking average compression of a few of the cds and then multiplying by number of cds) 18:20:55 haha wow, i forgot all about gregor's 18:21:01 and have deliberately tried to get it stuck in my head at will 18:21:03 i loved my onerous cake-eating festival one 18:21:05 it was so chaotic 18:21:07 most are 60-70 minutes long so no great variance there 18:21:09 I used to sing it from memory in long car journies 18:21:21 ais523: yes, but you made me get the earworm of ambient background music that lasts 20 minutes 18:21:28 AnMaster: 70GB is a lot? 18:21:33 which is just irritating unless you're actually playing a game 18:21:38 oklopol, for music yes on a 350 GB disk 18:21:45 ehird: I'm trying pretty hard to not burst out laughing now 18:21:53 huh. then what do you use it for? 18:22:03 you don't play games, and you don't watch movies 18:22:14 oklopol, I prefer to keep it in cd form for all but the top favourites 18:22:22 so it's not a lot? 18:22:25 oklopol, source code checkouts 18:22:28 you just like cd's 18:22:32 oklopol, what? 18:22:54 checkouts surely can't take that much? 18:23:01 oklopol, compiled code 18:23:09 oklopol, also photos 18:23:26 oklopol, I have a good camera. Raw format. Creating HDR panoramas is fun 18:23:40 that may easily end up at 1-2 GB working directory for one panorama 18:23:43 yeah 18:23:48 okay i believe you 18:23:58 this time. 18:24:17 oklopol, the data to keep around when done is: the panorama, the raw images, and scripts with settings. Which is maybe 150-200 MB 18:24:25 the scripts being tiny, a few kb or so 18:24:58 obviously if a human writes it, its size is not significant 18:25:13 oklopol, hm? Well most of them are auto generated, describing used settings 18:25:16 no one could ever fill 350 GB 18:25:22 like "this white point and blah blah" 18:25:34 oklopol, how do you mean, panoramas do fill a lot 18:25:49 by typing shit, a human could never fill 350 GB 18:26:10 oklopol, system stuff takes a few gb. around 10 for /usr /var / and such (in total) 18:26:16 swap is at 2 gb 18:26:20 oklopol: AnMaster manually types in his os binarise 18:26:24 *binaries 18:26:26 true story 18:26:35 then home is the rest, and that is more than 75% filled 18:26:52 oklopol, also I said that most was images 18:27:11 if you live for a hundred years, and during each second type like 100 characters, then you get close 18:27:13 ais523: 14 GiB out of 21 GiB copied, it's going quickly 18:27:26 AnMaster: i believed you ages ago, i just said "yeah, scripts can't take much". 18:28:03 oklopol, exactly. Well there is that few hundred kb description of matching control points in the images for the panorama. Ask fizzie about hugin 18:28:12 I'm too lazy to describe details 18:28:13 (100 bytes/s) * 100 years -> gigabytes 18:28:15 315.569259746784 18:28:17 (GB, not GiB.) 18:28:45 Slightly more accurate: 18:28:49 yeah, i did actually calculate it 18:28:53 (500 bytes/minute) * 80 years -> gigabytes 18:28:53 21.0379506497856 18:28:59 500 bytes/min being 100 wpm 18:29:01 hmm 18:29:03 ofc that assumes no sleep 18:29:15 oklopol, anyway what if you record exact time stamp for each key press? 18:29:17 food could be via a tube 18:29:24 also, you've gotta be like 10 to type that fast at least 18:29:27 oklopol, and how the hand moved 18:29:36 so, sleep, let's say tesla pattern all your life 18:29:41 i wonder if chinese would like that job 18:29:48 so 18:30:09 that's 80 minutes of sleep a day 18:30:18 it can't be done 18:30:30 what, the tesla pattern? 18:30:34 http://tesser.org/sleep/teslapattern/ 18:30:35 -!- kar8nga has joined. 18:30:40 yeah and it's such a great pattern we can assume 100 years lifespan 18:30:41 it is done. 18:30:46 oklopol: no :P 18:30:51 anyway so 18:30:58 80 minutes a day 18:31:14 (80 minutes/day) * 80 years -> years 18:31:15 4.4444444444444444444 18:31:16 it must be extremely unhealthy 18:31:22 nooga: it is not 18:31:24 polyphasic sleep is fine 18:31:33 well, tesla is experimental 18:31:39 but uberman seems to have little to no long term effects 18:31:45 and tesla is just more hardcore uberman 18:32:20 (500 bytes/minute) * (80 years - 14.4444 years) -> gigabytes 18:32:22 17.239443470213560991 18:32:28 nothing you do in no way affects how long you live, or how healthy you are 18:32:30 everyone knows this 18:32:37 oklopol: so if you do the tesla pattern all your life, live for 80 years, get fed via a tube, 18:32:48 and spend all your time after age 10 either sleeping or typing at 100wpm 18:33:01 and make no fluctuations in speed, ever 18:33:12 you can produce about 17.23 GB of text. 18:33:20 (again, gigabytes not gibibytes) 18:33:20 heh 18:33:22 fin 18:33:37 ehird, what is it in gibibytes? 18:33:43 less. 18:33:43 ehird: What if you do shift-home,end,shift-insert all the time when it gets profitable 18:33:48 Er, forgot to copy 18:33:48 ehird, how much less 18:33:49 But anyway 18:33:51 Deewiant: left to the reader 18:33:54 AnMaster: work it out yourself 18:33:57 root@meson:/media/Macintosh HD/Users/ehird/Music/iTunes# time cp -R iTunes\ Music ~ 18:33:59 real 21m5.663s 18:34:00 user 0m0.784s 18:34:02 sys 1m30.970s 18:34:03 faster than 100 mbit/s, great 18:34:23 Well, it'll grow exponentially so it'll be a shit-tonne more. Fin 18:34:28 ehird, that time interesting 18:34:41 what is there missing from real 18:34:43 as in 18:34:47 Deewiant: but that's not human creation 18:34:49 what isn't covered by user and sys 18:34:53 AnMaster: disk. 18:34:54 waiting? 18:35:05 ehird, but that would be sys iirc? 18:35:17 hm maybe not waiting for it to finish 18:35:17 waiting for disk, rather. 18:35:22 yeah 18:36:27 Deewiant, shift-home and shift-insert in emacs? 18:36:38 No. Not in Emacs. 18:36:58 ehird, it could be vim, which I don't really remember all the details in 18:37:07 It could be a regular text field. 18:37:28 ehird, oh in X? 18:37:29 right 18:37:35 Sigh. 18:37:39 stfu. 18:38:08 Deewiant, shift-home moves to the top of the history in X apps I tried ? 18:38:33 well depends on program 18:39:11 ehird: are you fluent in acme? 18:39:32 nooga: I can use it. 18:39:55 do you like it? 18:40:22 Let's see if Amarok can do ALAC. 18:40:23 nooga: Yes. 18:41:28 it's weird but has some awesome solutions 18:42:58 plan9 is awesome, it makes you read manpages 18:44:32 nooga, iirc ehird more than once said that most programs shouldn't require documentation to understand 18:44:44 ah yes, AnMaster, always trying to incite conflict 18:44:47 as in, easy to figure out user interface 18:45:02 ehird, just quoting you 18:45:11 for no purpose other than to incite conflict. 18:45:51 ehird, no because I considering you an authority on "usable user interfaces for other people than me" 18:46:28 uhhhhh 18:46:31 no, i mean it 18:47:15 it's exotic 18:47:50 nooga: just ignore AnMaster, he's just trying to get me riled up. 18:48:22 I'm not. I'm just interested in *if* that will happen or not 18:48:36 my goal is not to make it happen, but rather to see if it will happen 18:48:39 ...and then you'll get infuriated and i'll be called idiot again 18:48:55 nooga, hey he will get angry at me not you 18:49:14 but i'm near this time ;( 18:49:19 HatfulOfHollow can't work fast enough. 18:49:43 ehird, a band or artist? 18:50:06 http://www.bash.org/?4281 18:50:38 ehird, ah thought it was about music, since that was recently discussed 19:01:21 http://www.frappr.com/?a=mygroups&id=4644452 average eso hacker 19:02:09 llol 19:02:10 Just another esoteric hacker, 19:02:36 hmm... maybe TAEB should have been called JAPH 19:02:36 whut 19:02:39 frappr's going down? 19:02:44 * ehird exports it 19:02:54 we are compiling a lot of content for this request, thanks for being patient, please only click the link once. 19:02:55 okay... 19:02:56 I wonder why vlc prints "[0x23bbfa8] main input error: ES_OUT_RESET_PCR called" once every time a file is played 19:03:07 Well, I saved the kml 19:03:09 the hexdecimal number varies 19:03:11 Don't know if it has the photos, probably not 19:03:31 what's frappr? 19:03:37 ais523: a map site thing 19:03:40 ais523: the esolang map is on it 19:03:47 (see chanserv line when you come in) 19:03:51 ah, yes 19:03:54 it's going down, apparently, so I backed it up 19:03:57 I forgot all about the esolang map 19:03:58 not with photos i think, it was a small file 19:04:09 but probably the locations and names, maybe the text 19:04:21 hm 19:04:22 what for? 19:04:43 I don't remember such a chanserv line 19:05:02 -!- anmaster_l has left (?). 19:05:02 -!- anmaster_l has joined. 19:05:03 AnMaster: /cycle. 19:05:11 nooga: why not 19:05:31 ehird, well yes I did as anMaster_l 19:05:47 -!- augur has joined. 19:05:51 anmaster_l* 19:06:02 ehird, missing plugin... 19:06:17 js afaik 19:06:24 flash for the little scrolly thing 19:06:31 but that's not mandatory 19:06:37 ehird, I enabled js 19:06:43 well, it's the map. 19:06:51 maybe it needs flash to cycle through things 19:07:01 there is no map on there. As in no actual map 19:07:30 ehird, swfdec didn't work, nor did gnash 19:07:31 enable flash and try 19:07:35 adobe flash 19:07:37 i hate facebook 19:07:40 * ehird gets popcorn 19:07:41 ehird, I'm not crazy 19:07:51 yeah evil frappr security holes 19:09:12 ... 19:10:26 damn 19:10:39 what 19:10:46 found out acme doesn't have syntax highlighting? :P 19:10:59 my irssi is broken, page down does not work after i press page up 19:11:02 -!- nooga has left (?). 19:11:17 -!- nooga has joined. 19:11:20 ;| 19:11:23 ehird, can I get the kml, it says you can't download it twice 19:11:25 -_- 19:11:28 [19:10] what 19:11:29 [19:10] found out acme doesn't have syntax highlighting? :P 19:11:31 AnMaster: I already downloaded it. 19:11:35 ehird, yes, but I can't 19:11:37 since you did 19:11:39 I AM THE SOLE PROPRIETOR 19:11:40 can you send it to me 19:11:43 .... 19:11:48 NO, I WILL RULE THE MAP WITH AN IRON FIST MWAHAHAHAHA 19:11:49 yes ok 19:11:53 thanks 19:12:05 it's in google earth format i think 19:12:12 http://filebin.ca/nbbpfe/126358227137742.kmz 19:12:15 ehird, yes I have that open from my gentoo install 19:12:16 xml based i think too 19:12:18 maybe gzipped xml 19:12:22 since arch doesn't have a package for it 19:12:27 check if it includes the pics 19:12:45 screw syntax highlighting, rio's way of handling text is too weird already 19:13:25 ehird, it doesn't say who for the points 19:13:30 it's unconventional but good 19:13:41 nooga: practice moving your hand to the mouse :p 19:13:43 and no pics 19:13:44 ehird, ^ 19:13:51 AnMaster: that may be a google earth problem 19:13:52 just the points 19:13:55 AnMaster: open it in an editor or sth 19:13:58 try gunzipping it too 19:14:02 (remember to save a copy first) 19:14:12 it's zip 19:14:13 not gzip 19:14:18 that too 19:15:04 the images are in the zip archive 19:15:09 at least some *.jpg are 19:15:23 "Error interpreting JPEG image file (Improper call to JPEG library in state 200)" 19:15:33 for three of the images 19:16:05 ehird, ^ 19:16:22 maybe jpeg2000 or soemthing silly 19:16:30 data readability is unimportant as long as it's there :P 19:16:37 plenty of time to figure out the format 19:17:05 8ff24142d0385118657d3a492b403fbc2_medium.jpg 19:17:07 that one fails 19:17:12 8ff24142d0385118657d3a492b403fbc2_medium.jpg: empty 19:17:17 ehird, that is what file says 19:17:24 so well I don't believe there is any data there 19:17:29 Alright 19:17:30 probably a 0-byte file 19:17:35 What about the others, are they proper jpegs? 19:17:35 ais523, yes 19:17:42 ais523: yeah, maybe just no picture was specified or something 19:17:43 ehird, seems like it, gimp can view them 19:17:50 of people? :P 19:17:51 file says they are jpg 19:18:02 ehird, how many images should there be 19:18:14 there are 12 19:18:18 meh, just use gwenview or something, why would anyone use the GIMP as an image /viewer/? 19:18:20 including the 3 broken 19:18:31 ais523: feh! 19:18:35 Or, just, whatever KDE does. 19:18:36 ais523, I used eog first, them gimp in case eog was unable to handle some strange file format 19:18:42 Whatever KDE does doesn't seem to be an annoying principle to me right now. 19:18:44 ehird, isn't feh a window manager? 19:18:47 AnMaster: no 19:18:49 image manager 19:18:53 erm 19:18:55 not manager 19:18:56 viewer 19:19:06 ehird, ah 19:19:10 well 19:19:12 actually 19:19:24 ehird, I said *window* manager 19:19:26 not image manager 19:19:29 but okay 19:19:43 [19:18] ehird, isn't feh a window manager? 19:19:45 [19:18] AnMaster: no 19:19:46 [19:18] image manager 19:19:48 [19:18] erm 19:19:49 [19:18] not manager 19:19:51 [19:18] viewer 19:19:52 Two-stage error correction system. 19:20:17 ehird, anyway it doesn't include lables for who for most of the data point 19:20:21 ah 19:20:48 ehird, like for those in helsinki 19:20:54 lots of yellow pins there 19:20:57 AnMaster: grep the file for... I don't know, some names 19:20:58 but no names for them 19:21:01 see if the names are at least there 19:21:08 ehird, well those elsewhere have some names 19:21:29 ehird, almost all data points in the file lack names 19:21:31 a few has it 19:21:44 There are yellow square pins on frappr.com too 19:22:01 not square, the round google ones 19:22:37 ehird, the one for oerjan has no label 19:22:43 ehird, at least I can tell that 19:23:04 ehird, also some of the points look dubious 19:23:09 you can compare with frapper 19:23:16 to see if they have a name for oerjan's pin 19:23:18 I could but frappr's interface sucks 19:23:25 lessee 19:23:46 ehird, would be Norway, about where it gets narrow 19:23:49 Trondheim 19:23:52 In Norway there's rune, Wh1teWolf, Joakim 19:23:56 *Rune 19:24:00 Huh, Rune = kipple 19:24:15 * ehird looks for trondheim 19:24:18 ehird, what about oerjan. Is his pin unnamed? 19:24:22 oerjan isn't on the map at all. 19:24:30 ehird, slightly south of the joakim pin 19:24:38 a bit more to the west 19:24:40 and to the left a bit? 19:24:56 ehird, at the south end of some large lakes 19:25:10 or maybe the sea going deep in 19:25:11 I can't see such a pin. 19:25:13 could be fjords 19:25:19 there is one here though 19:25:23 from that kml file 19:25:23 I see a red circle with a dot, but that's just marking Trondheim 19:25:26 it is unnamed 19:25:35 Just a glitch, then 19:25:43 http://toastytech.com/guis/xnetscape.gif ← redhat 5 19:25:48 how many pins are there in total? 19:26:22 $ grep "" 126358227137742.kml | wc -l 19:26:22 531 19:26:23 wth 19:26:28 do we even have that many? 19:26:33 look 19:26:37 the pin I see for trondheim 19:26:39 is right next to the name 19:26:40 Trondheim 19:26:44 so I bet it's just ... marking trondheim 19:26:55 531 is probably the cities it knows plus us handful 19:27:07 ehird, there are *lots* of spurious pins then 19:27:07 hm 19:27:16 ehird, they are unnamed. Very helpful XD 19:27:17 filter the ones that have namse 19:27:18 *names 19:27:30 ehird, also it doesn't explain why there are more than one in Helsinki 19:27:33 about 7 or so 19:27:40 all unnamed 19:27:48 ehird, sec 19:27:53 Helsinki is just AWESOME 19:28:03 The more pins THE MORE AWESOME 19:28:12 ehird, 37 19:28:18 in .fi we have 19:28:19 with names 19:28:20 oklopol 19:28:26 shadikka 19:28:33 keymaker 19:28:38 and tat's it 19:28:40 *that's 19:28:43 AnMaster: 37 sounds right 19:28:48 and a host of unnamed pins :P 19:28:51 http://www.frappr.com/esolang/members 19:28:52 let's count! 19:28:57 8 on first page 19:29:08 8 on the second page, ok, we can assume 8 on a page 19:29:12 there are two unnamed plus one "Gustaf" in Stockholm 19:29:15 ??? 19:29:16 http://www.frappr.com/esolang/members?pg=7 19:29:20 lots of (People) with no name 19:29:22 just some glitch 19:29:27 the 37 are all the real people 19:29:31 right 19:29:33 so just ignore the unnamed ones 19:30:27 ehird, one real in australia? 19:30:35 lemme check 19:30:54 yep 19:30:57 Mark Schad 19:31:13 does it have Castle Hill, New South Wales, Australia 19:31:15 as metadata 19:31:17 also "There is no spoon." 19:31:22 just wondering if truly everything is in there 19:31:36 ehird, yes 19:31:45 ehird, pictures does not show up 19:31:46 however 19:32:20 wait what, now they do after restarting google earth -_- 19:32:49 *pictures do not show up 19:32:50 :P 19:32:52 anyway, good 19:32:54 all saved 19:32:57 not that anybody will want it 19:33:21 ehird, no, there are 12 valid pictures on fappr 19:33:32 but not all of them are valid in the kmz 19:33:44 as in, there are 9 images + 3 empty 19:33:46 well... save them to disk manually and note who's they are. 19:33:48 while there are 12 valid there 19:33:50 in a text file 19:33:53 hm 19:33:54 or if you're daring 19:33:56 make a copy 19:33:57 and put them in that copy 19:33:59 have to figure it out 19:34:11 you could unzip it yourself you know ;P 19:34:20 so could your mom :| 19:34:30 ehird, no, she doesn't know what a zip file is 19:35:06 gregor is missing 19:35:08 hey i just realised my statement works as an innuendo too 19:35:09 as in image 19:35:13 i'm so ... unintentional 19:35:34 ehird, I'm unable to get the right type 19:35:41 they are all *_medium in the zip 19:35:48 but the images on the website are *_small 19:35:54 Mimas: That's no moon. Wait, yes. Yes it is. 19:36:17 AnMaster: change the url 19:36:20 to have _medium 19:36:35 hm 19:36:53 looks scaled up 19:37:35 ehird, also there are huger versions for some 19:37:38 that weren't saved 19:37:44 so save them 19:38:09 funny the large version for Gregor is smaller than the medium 19:38:14 so I was right about upscaling 19:41:11 AnMaster: The "backyard" of the university main building: http://zem.fi/~fis/alvar.jpg 19:41:33 now for the partyyyyyyyyyyyy!!! 19:41:53 s/for/to/ 19:43:01 argh the size *killall -9 firefox* 19:43:12 -!- oerjan has joined. 19:43:13 Huh? It's just some 8000 pixels wide. 19:43:13 * AnMaster opens it in gimp 19:43:21 fizzie, yeah made firefox swap trash 19:43:30 before half was loaded 19:43:44 here's a nickel, buy some ram 19:43:59 My firefox uses 192M RES on that 19:44:00 how much ram does a nickel buy these days 19:44:07 More than 192M 19:44:34 fizzie, gimp timed out 19:44:35 huh 19:45:00 fizzie: that's really pretty 19:45:03 also I have 1.5 GB in this box 19:45:17 oerjan, ais523: does either of you understand xkcd today 19:45:22 finland is pretty 19:45:42 what fizzie said about a game i guess, i assume the point was that they cheated horribly 19:46:23 norway is prettier. so there! 19:46:33 oerjan: it's not like norway is entirely composed of fjords 19:46:51 fizzie: when was that pic taken 19:46:55 The university campus courtyard is perhaps also not the prettiest piece of Finland ever. 19:47:02 no, there are also ravishing mountains 19:47:04 yes but it is pretty. 19:47:10 whereas norway is just boring because i said so 19:47:16 ehird: Four hours ago or so. 19:47:17 norway's too... tranquil. 19:47:26 so it's like ... 21:46 there right? 19:47:32 Now, yes. 19:47:33 so around 18:00. 19:47:52 Closer to 17, actually; I just looked at the hour part. 19:48:01 -!- jpc has quit (Remote closed the connection). 19:48:04 fizzie, alvr? 19:48:06 alvar* 19:48:10 -!- ais523 has changed nick to scarf. 19:48:29 -!- jpc has joined. 19:48:42 AnMaster: The place is called "Alvarin aukio" (Alvar's plaza) after Alvar Aalto. 19:48:43 fizzie, also yes wonderful panorma. HDR no? 19:48:44 hi scarf 19:48:48 hi ehird 19:48:55 just randomly typoed this nick in a whois, and found it wasn't taken 19:48:58 ah wait no 19:48:58 and it's a nice one 19:48:59 it isn't 19:49:05 scarf would be a good name for a bot 19:49:10 those windows are too bright for it to be HDR 19:49:10 why? 19:49:11 i should perform a hostile takeover of that nick 19:49:14 scarf: it feels botty 19:49:19 bots should have names of random nice objects 19:49:22 or concepts 19:49:28 fizzie, very light sky 19:49:29 hmm, I was talking in competitive pokemon channels 19:49:32 unexpected 19:49:32 endeavour, scarf, table 19:49:34 he/she/it* -- stop with the discrimination against genderless AI entities. 19:49:38 and as a result to me, it feels like 1.5 times speed but you can only use one attack 19:49:39 AnMaster: It's actually LDR by accident: turns out the camera disables automatic exposure bracketing when shutter time is >1 second, for some reason. 19:49:45 YM (s)h/it 19:49:51 scarf: wut xD 19:49:53 fizzie, ouch 19:50:19 AnMaster: There's quite a lot of streetlight-etc.-caused "light pollution" in the sky around here whenever it's snowy or otherwise non-clear weather. 19:50:27 ehird, saved large images and those missing medium ones 19:50:33 plus mapping 19:50:41 ehird, pretty useful for revenge-killing things before they sweep your team, also on leads 19:50:42 (as the html table) 19:50:49 There's a few other issues too: the horizon is a bit snakey because leveling it would mean too much cropping or black regions (the tripod wasn't quite level, but there was something like 40 cm of snow and I had to hurry so I didn't bother setting it up well), and there's visible seams in the middle (where the first/last image merge, manual keypoints could fix that). 19:51:35 ehird: oh, i forgot to mention the ravishing archipelagos 19:52:03 oerjan: book me a plane ticket to norway and i'll agree 19:52:06 which include some of the mountains 19:52:10 anyway, it seems the reason for all the Freenode lag is that someone's invented a website that causes visitors to it to repeatedly join Freenode and post spam 19:52:18 POST spam, in fact, it's an IRC/HTTP POST polyglot 19:52:41 isn't it fun how so much evil is esoteric 19:52:56 because the obvious ways are the easiest to defend against 19:53:18 fizzie, hm 19:53:36 fizzie, hugin can level it for you 19:53:52 and yes manual keypoints are good 19:54:01 scarf: The exploit itself is POST, but presumably that site uses javashit? 19:54:05 ooh, the MSNbot story has gone from languishing low on Reddit to getting massively voted up 19:54:07 Ilari: yes 19:54:15 because it keeps sending in a loop 19:54:21 fizzie, btw how many degrees is it? 19:54:27 360. 19:54:31 otherwise I think you'd have to require the visiting user to keep clicking on a button, getting a blank page, going back and trying again 19:54:36 which wouldn't be nearly as effective 19:54:36 then what do you mean in the middle 19:54:41 wouldn't it be at the edges? 19:54:55 ah wait I can spot it 19:55:03 In the middle of the image file there are visible seams. There might be at the edges, too, I haven't looked at it that way. 19:55:07 in the middle of that amphitheatre-like thingy 19:55:07 19:55:11 Yes. 19:55:16 fizzie: wait it's circle not... straight? 19:55:17 aww 19:55:26 next you'll tell me the freaky building geometry isn't real either 19:55:53 ehird, the one for oerjan has no label <-- i'm not on frappr, i have a pretty high threshold for doing things that require registering 19:56:06 it's not registering it's entering a name :P 19:56:09 ehird, it isn't. it is due to a rectilinear projection I think 19:56:13 fizzie, isn't that what you used? 19:56:15 AnMaster: fuck. 19:56:20 i think it wanted my email at least 19:56:22 i thought the architecture was sweet :( 19:56:26 oerjan: huh okay 19:56:29 ehird, I think you were joking though ;P 19:56:34 but I'm not 100% sure 19:56:42 AnMaster: maybe the unnamed points are all the people who visited and it autodetected a location for 19:56:45 but didn't choose to add themselves 19:56:47 AnMaster: Equirectangular. You can't make a rectilinear image with a horizontal FOV larger than 180 degrees. 19:56:50 so oerjan went to the page 19:56:51 got marked in trondheim 19:56:53 ehird, maybe 19:56:53 and went away 19:57:02 ehird, would be kind of strange 19:57:27 zoom in further and tell us what the name of the area is 19:57:31 and ask oerjan if he's there :P 19:57:33 AnMaster: The middle (of the image file) is where the first and last (chronologically) images merge; it's possible the tripod moved during the rotating of it. It was on snow, after all. 19:57:47 fizzie: so is the freaky architecture real 19:57:49 the curvy building 19:58:10 on a slant 19:58:14 ehird: If you're talking about the one with the bright windows, no: that front wall is straight. 19:58:28 wait that's even straight, not just a curvy building not on a slant? 19:58:28 fizzie, do you own a panoramahead? 19:58:29 fml 19:58:34 insert the space 19:58:43 fizzie: show that panorama to the head of university architecture 19:58:48 and tell him to redesign it to look like that 19:59:07 ehird, then the panorama wouldn't look like that 19:59:15 AnMaster: Nope, just a regular tripod. Fortunately most content in that image is sufficiently far away not to suffer badly from parallax problems. 19:59:16 i would be slightly worried if frappr could detect my location more precisely than "trondheim"... 19:59:29 fizzie, yeah 19:59:49 oerjan, even that is spooky 20:00:06 AnMaster: well let's find out! 20:00:09 also, don't care 20:00:12 i want to see it like that in person 20:00:21 the curviness on a slant just looks so beautiful 20:00:26 fizzie, also there is noise if you zoom in, multiple exposures would have reduced noise in many areas as well 20:00:39 the effects of that is wonderful 20:00:43 Sure, but I had a bus to catch. 20:00:56 fizzie, oh also if you are lazy you could send me the photos and *.pto and I could fix it up 20:01:05 I quite like messing around in hugin, it's fun 20:01:42 In any case: if I level the horizon, I have to crop unacceptably much out of the image; the problem is that the camera pitch angle has not been constant during the 360-degree circle. (Most likely because the tripod itself was tilted.) 20:02:20 fizzie, well yes, but you can still fix the issue with that seam 20:02:24 and a few other smaller seams 20:02:38 fizzie, I always aim at getting less than 2 pixels max distance from the optimiser 20:02:43 less if just doing an image stack 20:03:16 fizzie, there are at least two seams near the middle 20:03:16 wow, Reddit thinks the MSNbot spam is because it's looking for "Robots.txt" with a capital R 20:03:22 and doesn't honour "robots.txt" 20:03:37 scarf, that's craz 20:03:39 crazy* 20:03:50 of course, the two are the same on Windows 20:03:52 and I find it doubtful 20:04:05 other redditors seem to disagree, though 20:04:27 scarf, btw it still shouldn't use as many bots at once 20:04:39 yes, and it doesn't seem to honour crawl-delays 20:05:08 fizzie, found five visible semas 20:05:11 seems* 20:05:17 one in the curved house 20:05:17 *seams 20:05:26 Yes, I noticed that one too. 20:05:44 three in the middle building 20:06:03 Though I'm not sure you can call it "the curved house", seeing that it isn't very curved. 20:06:06 and one in the raied brick wall 20:06:14 fizzie, curved in panorama 20:06:49 fizzie, what are those things that look kind of like mountings for swings at the left side of the image 20:06:54 AnMaster: See http://zem.fi/~fis/alvar2.jpg for a partially fixed version. 20:06:56 on that raised bit of land 20:07:10 Hmm... I wonder if the spam attack last night (the GNAA run) was related to that website? 20:07:33 The GNAA targeted *all of Freenode*? 20:07:48 AnMaster: I think they are skylight-style windows, though I don't really know what is under that part of the building. 20:07:49 fizzie, that made the seam in the raised land worse 20:07:51 That's so ambitious it's awesome. 20:08:12 Uh no... It was too targetted in time and space to be via website. 20:08:33 Ilari, gnaa did the recent POST bots? 20:08:41 [20:07] Uh no... It was too targetted in time and space to be via website. 20:08:42 [20:08] Ilari, gnaa did the recent POST bots? 20:08:50 Ilari has figured out the secret to time travel. 20:08:55 Take that, oklopol! 20:08:59 funny the large version for Gregor is smaller than the medium 20:09:00 ? 20:09:04 XD 20:09:08 That's hilarious out of context. 20:09:14 Yup 20:09:17 Gregor, frapper image 20:09:26 * ehird removes all Rs from the world 20:09:26 frappr* 20:09:34 Could the hilarity even increase further 20:09:36 ehird, har! 20:09:38 AnMaster: Hrm. Do you mean "seam in the raised land" that thing below the middlemost "swing mount" window? 20:09:39 AnMaster: you ruined it :( 20:09:39 AnMaster: I figured bit later that it isn't likely that the GNAA run was doing of the IRC HTTP POST spamming website. 20:09:46 Ilari, I'm just surprised since the messages it spammed didn't seem like their style 20:10:02 fizzie, yes 20:10:07 that wasn't as marked before 20:10:31 AnMaster: It is, in fact, a real piece of geography: it looks just like that in the source images too. 20:10:49 AnMaster: The multiple clients in that GNAA run started and stopped in such that it impiles having some kind of central control. 20:10:57 fizzie, middle house, some seams in the snow. Or just very strange snow 20:11:19 fizzie, on those steps a bit up 20:11:21 near where they end 20:11:28 (vertically that is) 20:11:32 horizontally near the middle 20:11:50 some sharp vertical changes in the snow 20:12:37 fizzie, also what about the ends. I don't have a panorama viewer handy 20:12:55 AnMaster: I don't have one either, I haven't checked at all how well they merge. 20:13:14 Also, Someone (With Wikipedia affiliate cloak) impiled that there was more involved than simple DDOS... I know no further details of that... 20:13:57 But the simplest explanation would be small botnet... 20:13:57 ehird: Speaking of the Wave university, you can see the "A!" logo (blurrily) in the flag far right in the image. 20:14:09 Ilari, there were some bots today in #freenode, well a lot. Was due to really cleaver HTTP post to irc.freenode.net:6667 20:14:24 fizzie: indeed 20:14:26 heard from a staffer 20:15:26 fizzie, ah I think I know where to find a panorama viewer 20:16:08 AnMaster: If you have it open in Gimp, you could just copy-paste-layer-move things around a bit. 20:16:11 AnMaster: Of course, that website can provode some coordination. But coordination at small timescales is bit another matter (there are ways, but its more complicated). 20:16:53 yay it is in aur 20:17:30 oh doesn't build it sounds like 20:17:31 meh 20:17:34 AnMaster: Or even Filters/Map/Image tile if you don't mind a duplication of the image size. (Though maybe 16 kilopixels is a bit wide.) 20:18:01 fizzie, I wanted projection correction 20:20:08 fizzie, so what projection did you use? 20:20:27 The vertical FOV is a bit poor; the camera does a (35mm-film-equivalent) 36 mm focal length objective in the maximum tele-position; that translates to horizontal FOV of 51.35 degrees, or vertical in this case because the camera was tilted 90 degrees. 20:20:38 ...? 20:20:48 It's the equirectangular projection. 20:21:26 I'm not sure what the panorama viewers do. 20:21:48 iirc the gnaa just spawn a bunch of clients 20:21:51 centrally 20:21:54 rather than any sort of outsourcing 20:27:07 ehird: Just to make you feel the disillusionment, here's a wide-angle (121 degrees) rectilinear (read: normal camera) projection of the "curved building": http://zem.fi/~fis/alvarr.jpg 20:27:26 fizzie, it fits together but it doesn't use the right projection hrrm 20:27:39 fizzie: jesus christ, it's just a fucking box 20:27:58 wouldn't you rather they redesigned it to the curvy-on-a-slope specification 20:28:17 i love how the ampitheater thing is then followed by the curve reversing in the wrong one 20:28:23 it's great :< 20:29:22 AnMaster: Well, I can make you a cylindrical or spherical one, if the viewer likes those more. 20:29:35 fizzie, I'm not sure... 20:30:50 fizzie, try cylindrical 20:31:10 tesseractical 20:31:59 AnMaster: Stitching. 20:34:09 http://zem.fi/~fis/alvarc.jpg -- cylindrical projection, horizontal FOV 360 degrees, vertical 80 degrees in the original 8000x2137 pixel canvas; then cropped with top=215, bottom=1379. (And left=0, right=8000 of course.) 20:34:11 building another panorama viewer to test it 20:34:31 Though the curvy horizon might also make it look pretty strange. 20:34:53 fizzie, yes possibly. it is slow to download 20:34:58 24,9K/s 20:35:03 fizzie, it must be on your side 20:35:05 what changed 20:35:26 Possibly other interested people. 20:35:28 Who knows. 20:35:35 It's only one Mbps upwards, anyway. 20:35:52 http://zem.fi/~fis/alvarc.jpg is even curvier omg 20:35:57 i think 20:36:04 not as slanty though, so not as good 20:36:06 now do spherical 20:38:17 a lot of the ground went missing fizzie 20:38:43 wait no 20:38:47 I blame that viewer 20:39:39 okay remember to not resize the window before it finished loading the image 20:39:43 or it will fuck it up 20:40:22 xD 20:40:45 That sounds very robust. 20:40:49 fizzie, still that bilding is only curved horizontally now 20:42:07 Bilduing. 20:42:15 building yeah 20:42:24 fizzie, I wouldn't mind some black areas if it was reasonably straight 20:42:47 AnMaster: Coincidentally I am currently stitching an image like that. 20:43:38 fizzie, ah 20:43:40 frankenimage 20:43:42 fizzie, what projection? 20:43:53 Cylindrical, again. It's the more usual one. 20:46:28 AnMaster: http://zem.fi/~fis/alvarhc.jpg - cylindrical, hfov 360, vfov 90 with a canvas of 8000x2546 pixels; cropped with top=148, bottom=1740. (I can't deduce right now whether those cropping details are relevant for a cylindrical projection; they might be, given that the image file doesn't have the horizon in the middle.) 20:46:29 NO 20:46:31 I WANT CIRCULAR 20:46:38 you did cylindrical last time 20:46:42 spherical 20:46:43 whatever 20:47:16 ehird: I can do you a fisheye view with a 360 degree hfov; that's something you don't see every day. (I doubt there are very many fisheye lenses exceeding 180 degrees.) 20:47:29 fizzie, I would love to see it 20:47:34 also I heard of a few at 240 20:47:37 but that is about max 20:47:45 fizzie: do it 20:47:54 you know what would be sweet 20:47:56 panorama glasses 20:47:58 they're computerised 20:48:01 fizzie, also one at almost 360, using a mirror ball mounted in front of it 20:48:04 and if you looked at that university building through one 20:48:06 as a commercial product 20:48:07 it'd look curved like it is 20:48:11 it would be so fucking sweet 20:50:02 Yes, there was also that christmas-ornament mirror-ball panorama tutorial. :p 20:51:28 The 360-degree fisheye is a bit of a... corner case, though: http://zem.fi/~fis/alvarf.jpg 20:51:37 i am tripping balls 20:51:43 purely thanks to that image 20:51:58 fizzie, can we get the original one again with straight horizon 20:52:01 it's like staring into a crystal ball 20:52:04 projection that is 20:52:08 into a universe with black oles 20:52:11 shiit 20:52:37 fizzie: so is that what the world would look like if i could see behind me 20:52:38 :| 20:52:50 AnMaster: That one was actually already there as alvarh.jpg, I just forgot to mention it. 20:53:39 For an image like this with just about 60 degrees of real vertical field-of-view, the cylindrical and equirectangular don't look so different. 20:53:47 [20:52] fizzie: so is that what the world would look like if i could see behind me 20:53:49 [20:52] :| 20:53:50 i must know 20:54:11 I guess it depends on what sort of a lens you'd have in your behind-seeing eye. 20:54:26 I'm sure you could see things cylindrically too. 20:55:01 fizzie, you didn't manage to straighten it very well :/ 20:55:02 it would be so fucking cool if i had 360 degree 3d vision 20:55:09 so i could see behind of things etc 20:55:14 even if they're behind me 20:55:20 i'd be able to see... like... everything 20:55:30 i dislike 2d vision 20:55:33 depth perception is a hack! 20:56:09 ehird, it wouldn't look like that. It is a 3D image mapped into a 2D plane 20:56:11 AnMaster: Yes, well, I didn't want to spend time with it; I just stuck a couple of horizontal-line control points to the "curvy building" so that at least that would be straight. 20:56:21 AnMaster: meh, anyway 20:56:23 point is 20:56:27 360 degree 3d vision = 20:56:31 you can see behind things, and also behind you 20:56:35 fizzie, how large are the source images + hugin project 20:56:39 fizzie, I would like to fix it :) 20:56:57 assuming the download isn't insanely huge 20:57:35 fizzie, the curvy building isn't very straight here at the bottom 20:58:29 which indicates the viewer is confused maybe 20:59:32 It could be just that; it might not understand the unsymmetrically cropped cylindrical projection. 20:59:43 fizzie, well I tried the h one too 20:59:51 hm 21:00:02 That's equally unsymmetrically cropped and a more curious projection, so... 21:00:16 It's not a very large; 19 source images of about 3.5 megabytes, and the project. 21:00:24 fizzie, well it is supposed to support rectirectangular 21:00:54 fizzie, tar.bz2 it up and send it over? 21:00:58 Hmm. Well. Maybe you could try feeding it an uncropped image. 21:00:58 please 21:01:10 Well, if you want. 21:01:11 fizzie, maybe I could find something that works yes 21:01:24 fizzie, oh btw are those jpeg input then? not raw->tiff? 21:01:32 fizzie, yes thanks 21:02:35 JPEG, yes. I don't bother with raw; the camera sensor is so noisy already at ISO100, anyway. I guess you might get a bit more range out of it, but not very much. I was counting on multiple exposures more, but... 21:03:26 fizzie, ah well the noise, there is where multiple exposures help. 4 * exposure settings * direction I found works nicely 21:03:32 I wish I had a faster cf card however 21:04:16 fizzie, btw my camera requires me to hold down the button during all multiple exposures 21:04:21 which is retarted 21:04:29 so I don't use bracketing, I do it manually 21:04:41 to get non-blurry images 21:05:27 hm I wonder if you could reconstruct motion blurred images due to camera moving if you knew exactly how it had moved? 21:05:29 probably not 21:05:42 you don't know what reading is from where :/ 21:06:00 You can sharpen them more intelligently if you know the degradation model, though. 21:06:11 fizzie, so where is the url? ;) 21:06:14 for the project 21:06:20 really? that's interesting 21:07:27 http://en.wikipedia.org/wiki/Deconvolution if you can represent the blurring as a convolution, which you often can. 21:07:47 Actually http://en.wikipedia.org/wiki/Motion_blur has an example of Wiener deconvolution. 21:07:52 fizzie, so where is the url? :)))) 21:08:12 Just a moment. I managed to overwrite (one of) the .pto file(s). :p 21:08:27 fizzie, wow 21:08:41 fizzie, hg to get the old one back? 21:08:50 I always maintain the non-images in bzr 21:09:11 Well, I don't. 21:09:25 kay 21:09:45 fizzie, the hc or h *.pto is enough for me 21:10:04 Yes, I'll just package up the hc .pto. 21:11:21 fizzie, and the images :) 21:13:41 68081068 bytes, that's not too much. 21:13:49 Even with the abysmally slow upload I have. 21:14:00 fizzie, ouch? why so slow? 21:14:12 for me stitching tends to take the main time 21:14:17 in the order of minutes 21:14:25 (7-10 or so) 21:14:31 but then I use larger source images 21:15:00 Yes; the stitching speed also tends to depend quite a lot on the selected output size. 21:15:21 fizzie, btw what sort of mounting for the tripod? ball? 21:16:21 There's some specs at http://www.amazon.com/Velbon-DF-40-Lightweight-Panhead-Release/dp/B000167TXY -- "cheap" was the primary selection criterion. 21:16:42 fizzie, doesn't look like a ball mounting 21:16:48 that's good for panoramas at least 21:17:33 fizzie, my tripod has a ball head, it is abysmal for panoramas. You can't properly level it between images 21:17:45 so you have to make sure to more than cover it all up so you can extract the useful bit 21:18:03 How 'bout 天安门坦克 21:18:16 for panoramas only advantage over hand held is that it is steadier 21:18:37 Gregor, ? 21:18:43 Wrong channel :P 21:18:48 fizzie, still uploading? 21:18:55 Gregor, what channel was it target at? 21:19:54 AnMaster: Oh, it was already there when I said the file size; the URL should have been a privmsg right before that. 21:20:04 ah found it 21:20:17 -!- augur has quit (Read error: 110 (Connection timed out)). 21:20:27 Gregor: talking 'bout google decensoring? :P 21:20:32 fizzie, you said 3.5 MB? it's 65 MB 21:20:44 fizzie, what happened there :D 21:20:50 ehird: Yup 21:20:51 Gregor: The incident is referred to in china as 六四事件 21:20:54 Gregor: "June Forth Incident" 21:20:57 That'd be the best search to try 21:21:05 AnMaster: 19 images of 3.5 MB each. 21:21:09 fizzie, aaah 21:21:11 Google sez that means "64 events" 21:21:12 fizzie, right 21:21:12 Gregor: According to local laws, regulations and policies, some search results are not shown. 21:21:15 Gregor: on http://www.google.cn/search?hl=zh-CN&source=hp&q=%E5%85%AD%E5%9B%9B%E4A%8B%E4B6&btnG=Google+%E6%90%9C%E74%A2&aq=f&oq= 21:21:26 (at the bottom) 21:21:31 So no, Google is still censored 21:21:32 Lamesauce 21:21:36 fizzie, still why do I only get like 76 K/s according to wget. I usually get around 700 K/s from most places 21:21:40 What they're considering is, I believe, withdrawing from China entirely. 21:21:47 Yeah 21:21:49 *withdrawing from 21:22:52 AnMaster: It's still only that 1 Mbps ADSL upwards. That's only 122 Kbps even theoretically speaking. 21:23:07 fizzie, oh it is from your home? not from university website? 21:23:18 I thought you put all your stuff like fungot there 21:23:19 AnMaster: well i like those boring lists of procedures that a) we catch things the other wouldn't, and in what context is it useful? 21:23:22 ^source 21:23:23 http://git.zem.fi/fungot/blob/HEAD:/fungot.b98 21:23:26 I don't think hosting zem.fi on a university connection would be good. 21:23:31 He says it's a laptop, remember? 21:23:35 With I think User Mode Linux subservers. 21:23:37 oh right 21:23:50 ehird: It's linux-vserver right now, I think. It changes from time to time. 21:24:02 fizzie: "It just changes by itself. Sometimes I don't even notice!" 21:24:33 ║ * The name of Heikki Kallasjoki may not be used to endorse or ║ 21:24:34 ║ promote products derived from this software without specific prior ║ 21:24:36 didn't we establish some time ago fungot had reached singularity? 21:24:36 ║ written permission. [How would that even work?] ║ 21:24:37 AnMaster: could be arranged! i'll have to start using the console, which is supposedly a dialect of lisp 21:24:37 bah 21:24:38 well that explains it 21:24:39 real men use BSD2 21:24:40 which doesn't have that clause 21:24:50 AnMaster: yes but it's not Friendly or Unfriendly 21:24:52 it's just Ambivalent 21:24:58 which is why it's not doing anything for us but the universe is still here 21:25:02 ehird, isn't that fizzie? 21:25:13 Cory Doctorow was quoted as saying "worst. singularity. EVER!" 21:25:20 ehird, right 21:25:27 XD 21:25:31 But yes, anything zem.fi is home. All network services of the university department I work are down this whole weekend (today 4PM to Monday-morning), anyway; they're preparing for some Wavey stuff. 21:25:32 All facts, facts that are true. True facts. 21:25:46 fizzie, heh 21:26:55 AnMaster: could be arranged! i'll have to start using the console, which is supposedly a dialect of lisp <-- that was coherent if non-sensical (sp?) 21:26:57 AnMaster: that terminology is best to proceed right to scheme? you are clearly working outside of class 21:27:00 ^style 21:27:01 Available: agora alice c64 ct darwin discworld europarl ff7 fisher ic irc* jargon lovecraft nethack pa speeches ss wp youtube 21:27:05 as I guessed 21:32:03 fizzie, still downloading .... 21:32:10 eta 13 seconds now 21:32:28 fizzie, care to give me a checksum (md5, sha or whatever) 21:32:36 just to make sure it isn't damaged 21:34:39 sha1sum says 5a2a3493518de7d3500c713fd594d4b522442a73. 21:35:06 right, same 21:39:03 fizzie, may I ask, why that set of custom parameters to optimise for? 21:43:16 I don't remember what the set was. If it has the pitch for two images unoptimized, that was because I set those manually to get the row of images forced straight, so that I could crop it better. (Even though it made the horizon snakey.) 21:43:53 -!- augur has joined. 21:43:58 And it might have separate x/y shifts for all images, because that sometimes helps when the camera position has changed between shots. 21:44:42 fizzie, you didn't optimise pitch on two of the images 21:44:47 indeed 21:44:48 hm 21:45:11 fizzie, oh I didn't know about x/y shifts 21:45:34 anyway found a few bad control points, bringing max distance down from 7 to 5 21:46:48 fizzie, different zoom in different images? 21:46:51 The points are all automagics, and I don't think I even did the usual "remove the largest-distance ones" operation. 21:46:57 AnMaster: "nonsensical" isn't hyphenated 21:47:19 scarf, ah ok 21:47:21 Shouldn't be any different zoom. I may have optimized the "view" parameter separately though. 21:47:33 fizzie, you did indeed 21:47:38 and they differ quite a bit 21:47:47 That wasn't probably very intentional. 21:48:43 Anyway, it's a bit trickery that for x/y shift optimization you have to create a separate "lens" for each image, and then you can't (or maybe you can, I just don't know how) have the other lens-specific parameters (such as view) linked. Well, except by not selecting those for optimization ever. 21:49:31 you can't indeed hm 21:57:28 http://02d9656.netsoljsp.com/SarcMark/modules/user/commonfiles/loadhome.do 21:57:29 o_x 22:01:26 ehird, squatter? 22:01:38 what makes you think that 22:01:49 looking at design instead of reading it 22:06:10 -!- BeholdMyGlory has quit (Remote closed the connection). 22:06:33 -!- BeholdMyGlory has joined. 22:06:59 -!- jpc has quit (Connection timed out). 22:07:08 -!- BeholdMyGlory has quit (Remote closed the connection). 22:07:58 -!- BeholdMyGlory has joined. 22:13:55 fizzie, some cleanup done. Adding lots more control points. I usually auto generate about 100 per overlap 22:14:49 fizzie, optimising barrel distortion would be nice but seems impossible with the "different lens" stuff 22:15:22 barrels are best distorted with an axe 22:17:39 oerjan, augh 22:18:08 oerjan, it refers to an optical thingy though 22:18:30 yeah i googled 22:18:51 heh 22:26:13 fizzie, whooo max dist below 2 now 22:33:20 fizzie, tried nona-gpu btw? 22:33:31 I haven't yet 22:33:38 Nope. 22:33:41 not sure if my hardware supports it. geforce 7600 22:33:46 might be too old 22:34:06 OpenGL renderer string: GeForce 7600 GT/PCI/SSE2 22:34:07 So same here. 22:34:14 fizzie, ah no 22:34:23 it is geforce 7600 GS/AGP 22:34:26 Well, same generation anyway. 22:34:44 OpenGL renderer string: GeForce 7600 GS/AGP/SSE2 22:34:45 to be exact 22:34:59 fizzie, true. Is that PCI or PCI express? 22:35:05 PCIE. 22:35:07 ehird: How goes the Scheme? 22:35:09 ah 22:35:19 fizzie, strange they didn't call it PCIX 22:35:23 also stitching now 22:35:29 lets see what it looks like 22:35:30 AnMaster: PCIX was already taken. 22:35:37 Yes, I was about to say that. 22:35:40 I suspect disaster due to different lenses 22:35:44 pikhq, oh right 22:35:46 Though it was "PCI-X". 22:36:41 I have this other panorama, taken today-evening inside the computer science building, but it's slow to play with; there's 99 source pictures, and 13321 (autogenerated) control points so even the optimizing steps take a while. 22:36:43 huh it looks better 22:37:07 may be due to tiff not jpeg 22:37:07 in part 22:38:36 fizzie, btw the house in the middle. what is it 22:38:36 and is it curved? 22:40:30 pikhq: Nothing been done. Probably will work on it very son, though. 22:40:30 and if it is curved, is the top of it really that 22:40:30 as in the diagonal lines down 22:40:30 along the walls 22:40:31 Is there an easy way to find what font an alias maps to on my system? 22:40:31 -!- soupdragon has quit ("Leaving"). 22:41:24 The only curved part that I can think of are the auditorium seats/windows. 22:41:42 -!- scarf_ has joined. 22:41:54 -!- scarf has quit (Nick collision from services.). 22:42:03 -!- soupdragon has joined. 22:42:07 -!- scarf_ has changed nick to scarf. 22:42:15 -!- augur has quit (farmer.freenode.net irc.freenode.net). 22:42:15 -!- anmaster_l has quit (farmer.freenode.net irc.freenode.net). 22:42:15 -!- SimonRC has quit (farmer.freenode.net irc.freenode.net). 22:42:15 -!- zeotrope has quit (farmer.freenode.net irc.freenode.net). 22:42:16 -!- puzzlet has quit (farmer.freenode.net irc.freenode.net). 22:42:16 -!- uorygl has quit (farmer.freenode.net irc.freenode.net). 22:42:17 The diagonal slopes are straight, three-dimensionally speaking; I don't think they necessarily map into lines in an equirectangular projection, though. 22:43:00 -!- puzzlet has joined. 22:43:25 fizzie, right 22:43:26 -!- uorygl has joined. 22:43:32 -!- zeotrope has joined. 22:44:04 -!- zeotrope has changed nick to Guest23566. 22:45:23 -!- comex_ has joined. 22:49:29 -!- Ilari_ has joined. 22:50:36 fizzie, you can link them separately it seems 22:50:36 from the camera and lens tab 22:50:36 at least they have separate "link" click boxes there 22:51:13 -!- cal153 has quit (farmer.freenode.net irc.freenode.net). 22:51:13 -!- HackEgo has quit (farmer.freenode.net irc.freenode.net). 22:51:13 -!- dbc has quit (farmer.freenode.net irc.freenode.net). 22:51:13 -!- mtve has quit (farmer.freenode.net irc.freenode.net). 22:51:13 -!- sebbu has quit (farmer.freenode.net irc.freenode.net). 22:51:13 -!- Ilari has quit (farmer.freenode.net irc.freenode.net). 22:51:13 -!- comex has quit (farmer.freenode.net irc.freenode.net). 22:52:15 -!- scarf has quit (Remote closed the connection). 23:03:12 -!- Ilari_ has changed nick to Ilari. 23:08:27 -!- Ilari has quit (farmer.freenode.net irc.freenode.net). 23:08:27 -!- uorygl has quit (farmer.freenode.net irc.freenode.net). 23:08:27 -!- BeholdMyGlory has quit (farmer.freenode.net irc.freenode.net). 23:08:28 -!- nooga has quit (farmer.freenode.net irc.freenode.net). 23:08:29 -!- jix has quit (farmer.freenode.net irc.freenode.net). 23:08:29 -!- Leonidas has quit (farmer.freenode.net irc.freenode.net). 23:12:26 -!- lifthras1ir has joined. 23:14:34 -!- olsner_ has joined. 23:14:43 -!- Ilari has joined. 23:14:43 -!- uorygl has joined. 23:14:43 -!- BeholdMyGlory has joined. 23:14:43 -!- nooga has joined. 23:14:43 -!- jix has joined. 23:14:43 -!- Leonidas has joined. 23:14:46 -!- BeholdMyGlory has quit (Remote closed the connection). 23:15:33 -!- jpc has joined. 23:16:05 Yes, I'm just not quite sure what it does. At least the values stayed different even though I linked them; but maybe it fixes them in a relativistic sense. 23:16:05 -!- soupdragon has left (?). 23:16:05 FreeType fails so badly at subpixel rendering it's not funny. 23:17:56 -!- mycrofti1 has joined. 23:19:34 Of course, its greyscale rendering is even worse; either you get wispy, badly kerned, unreadable text or put the hinting on slight and get grey, fuzzy, unreadable text. 23:19:34 Sigh. 23:20:49 -!- olsner has quit (farmer.freenode.net irc.freenode.net). 23:20:49 -!- Deewiant has quit (farmer.freenode.net irc.freenode.net). 23:20:50 -!- rodgort has quit (farmer.freenode.net irc.freenode.net). 23:20:50 -!- bsmntbombdood has quit (farmer.freenode.net irc.freenode.net). 23:20:50 -!- lifthrasiir has quit (farmer.freenode.net irc.freenode.net). 23:20:50 -!- mycroftiv has quit (farmer.freenode.net irc.freenode.net). 23:20:50 -!- EgoBot has quit (farmer.freenode.net irc.freenode.net). 23:22:05 -!- anmaster_l has joined. 23:22:06 -!- anmaster_l has quit (Killed by sagan.freenode.net (Nick collision)). 23:22:07 -!- Deewiant_ has joined. 23:22:07 -!- bsmntbombdood_ has joined. 23:22:08 Fontophiles. 23:22:08 Still weird. 23:22:08 It's not my fault that: 23:22:08 1. I have above-average vision, and 23:22:08 2. Freetype makes text unreadable. 23:22:08 I'm not complaining out of æsthetic concerns, but purely the fact that it makes text harder to read. 23:22:08 -!- EgoBot has joined. 23:22:40 -!- augur has joined. 23:22:40 -!- anmaster_l has joined. 23:22:44 -!- kar8nga has quit (Remote closed the connection). 23:22:48 -!- anmaster_l has quit ("Leaving"). 23:22:48 -!- augur has left (?). 23:22:48 -!- augur has joined. 23:22:49 -!- rodgort` has joined. 23:24:51 -!- cal153 has joined. 23:24:51 -!- dbc has joined. 23:24:51 -!- sebbu has joined. 23:24:51 -!- HackEgo has joined. 23:24:51 -!- mtve has joined. 23:24:55 -!- SimonRC has joined. 23:24:55 -!- BeholdMyGlory_ has joined. 23:24:58 -!- BeholdMyGlory_ has quit (farmer.freenode.net irc.freenode.net). 23:24:58 -!- SimonRC has quit (farmer.freenode.net irc.freenode.net). 23:24:58 -!- HackEgo has quit (farmer.freenode.net irc.freenode.net). 23:24:58 -!- dbc has quit (farmer.freenode.net irc.freenode.net). 23:24:58 -!- mtve has quit (farmer.freenode.net irc.freenode.net). 23:24:58 -!- cal153 has quit (farmer.freenode.net irc.freenode.net). 23:24:59 -!- sebbu has quit (farmer.freenode.net irc.freenode.net). 23:25:24 -!- Deewiant_ has changed nick to Deewiant. 23:26:08 -!- anmaster_t has joined. 23:28:56 fizzie, should all be same lens but unlinked for the ones you want different 23:28:56 that seems to work 23:28:56 fizzie, hope that gets through this time 23:28:56 I'm pesimistic thiugh 23:28:56 though* 23:29:24 -!- cpressey has joined. 23:29:41 fizzie, should all be same lens but unlinked for the ones you want different 23:29:41 that seems to work 23:29:41 another try at it 23:31:47 O_O 23:31:47 DAMN YOU NETSPLIT 23:31:54 -!- FireFly has quit ("Leaving"). 23:32:29 Absolutely not. 23:32:55 (to everything) 23:32:58 ehird, full hinting works for me ;P 23:32:58 ehird, or just turn off antialiasing 23:33:11 -!- rodgort` has quit (Client Quit). 23:37:09 AnMaster: yes, perhaps you have substandard vision 23:38:01 -!- rodgort has joined. 23:38:01 -!- mycrofti1 has changed nick to mycroftiv. 23:41:58 mycroftiv: i think mixing roman numerals and decimal is far more interesting, you should change it back 23:42:21 -!- regalia has joined. 23:42:21 -!- regalia has left (?). 23:42:21 -!- regalia has joined. 23:42:21 -!- regalia has left (?). 23:45:08 ehird: if freenode continues exploding, probably will happen 23:47:53 ehird, I wear glasses if that is what you mean. The way you suggest it, it sounds like you consider it stupid or something 23:47:53 fuck off 23:47:57 WHY DOES FREENODE ASPLODE SO MUCH? 23:49:02 -!- augur has quit (farmer.freenode.net irc.freenode.net). 23:49:10 AnMaster, replying to speculation that he might have substandard vision as full hinting is unreadable with "YOU JUST THINK I'M STUPID FUCK OFF" since 2010 23:49:23 AnMaster has an awful lot of "since time" franchises. 23:54:27 -!- augur has joined. 23:54:28 pcc can build a bootable openbsd kernel 23:54:28 sweet 23:58:59 'Night, folks. 23:58:59 -!- cpressey has left (?). 23:59:00 cpressey: long time no see 23:59:00 oh that is c pressey there. Didn't notice at first 23:59:00 hi 23:59:03 ehird, cynical since 1991 23:59:19 (yes, that's before he was born) 23:59:19 cpressey, about funge109 and so on, there seemed to be a general lack of interest in it, I suggest a technical corrigendum to befunge98 instead to make clearer some matters about k and t (plus some other minor details) 23:59:20 hahahaa 23:59:31 oerjan, :D 23:59:37 he quit to avoid talking about befunge 23:59:39 :) 23:59:43 ehird, how weird 23:59:51 anyway that was all I had to say about it 23:59:56 too late 23:59:56 *shrug* 23:59:58 he left before you said it