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