←2011-12-19 2011-12-20 2011-12-21→ ↑2011 ↑all
00:01:46 <zzo38> I thought of an idea for class of Dungeons&Dragons game. First, decide on a date in game and a date in real time and map those together as reference points. Ensure you have ephemeris data for those dates. Make a class where effects of magic and stuff you can cast depend on the positions of planets and houses and so on.
00:03:48 <kallisti> you could call it real-estate-astronomancer
00:05:11 <kallisti> oh wait, wrong kind of house.
00:05:38 <zzo38> kallisti: Yes, wrong kind of house.
00:06:13 <zzo38> Note I mean astrological houses, not buildings. Astrological houses measure the ecliptic position of rising and setting objects, and the midheaven (highest point of an object in the sky; the same angle as the zenith but not necessarily directly overhead)
00:06:39 <kallisti> yes.
00:07:15 <kallisti> you should redivide the twelve houses into four and then name after Hogwarts' Houses.
00:07:45 <zzo38> There have been a few similar ideas, such as spellcaster features where some spells can be cast only in daytime or only in nighttime. But my idea involves many more things and stuff
00:07:46 <kallisti> you know, to simplify the game, and immerse the players.
00:08:30 <kallisti> zzo38: that's a cool, but likely difficult to use, class idea.
00:08:31 <zzo38> kallisti: I supppose redividing them into four is logical, since in most of the house system used, these four houses will be the same, even if the originals are different. However, I did not intend to simplify the game like that.
00:08:46 <zzo38> And yes, I know it can be difficult to use (especially without a computer).
00:08:58 <kallisti> zzo38: you'd probably want a few spells whose effects are relatively stable but with parameters depending on planet and house position.
00:09:16 <kallisti> and other spells whose effects vary wildly based on those.
00:10:16 <zzo38> Yes, those are ideas. My ideas were to make things chaotic and that you would require a lot of planning and other things to determine the best way to use the magic, so it cannot be used as easily as most magic in the game.
00:10:55 <kallisti> zzo38: still you could have simple magic based on simple rules.
00:11:38 <zzo38> However, I would probably keep the twelve houses, and have certain things you can use to change house system and other things sometimes, depending what you selected at level. And, of course, have restrictions on their use too.
00:11:49 <zzo38> kallisti: Yes; the rules do not have to be extremely complicated.
00:11:51 <kallisti> for example one could be based on the position of three planets, with the position of each planet determining range, damage, and effect (with a cycle of two or three different effects)
00:12:19 <kallisti> you could have a buff spell whose effect is based on the phase of the moon.
00:13:47 <zzo38> Well, that is one thing, for damaging spells. However I was not thinking of damaging spells necessarily. (In fact, playing the game, I rarely use damaging spells.) But I was also thinking of something very different. Like, have a new kind of metamagic changing which way parameters are selected, and have spells keyed to a planet, to a sign, whatever.
00:14:09 <zzo38> And then each one, they have different effects, which are related but that doesn't mean one will be a good substitution for another, necessarily!
00:15:01 <zzo38> Maybe it is advantageous to wait, or to not wait too long, or doing entirely different kind of things, or move to another location, etc
00:20:12 <ais523> now I'm confused; I just typed "lev" into Firefox's awesomebar, and then had no idea why or what it is I'd hoped to find
00:20:31 <zzo38> ais523: Then cancel it and try again.
00:20:37 <ais523> zzo38: I did
00:22:24 <kallisti> ais523: awesomebar? that sounds pretty mythical.
00:22:34 <kallisti> if I type in Haskell or perl programs will it evaluate them?
00:22:40 <ais523> kallisti: it's the name for the history search thing
00:22:50 <ais523> it's actually pretty useful
00:22:52 <zzo38> kallisti: No, but it might evaluate Javascript programs if you type them in.
00:23:00 <ais523> right, it can also evaluate JS
00:23:14 <kallisti> with a javascript URI most likely?
00:24:11 <kallisti> do you think Google would get mad if I made a web service in which you can type in queries and it will perform extra functionionality that google doesn't do, but will then otherwise defer to a Google search?
00:24:37 <kallisti> I would just redirect them to the actual google query page, so it's not like I'm stealing their stuff or anything.
00:25:02 <zzo38> kallisti: In that case I doubt they will care much to sue you or anything.
00:25:14 <zzo38> If they don't like it they will simply make a referer block.
00:26:31 <kallisti> it'd be like wikipedia + google + W|A + programming language interpreters
00:33:54 <kallisti> zzo38: but yes I was thinking you could also do something similar to what you describe, using abstract stat values that are calculating and then used to determine spell parameters.
00:40:49 <kallisti> zzo38: you might like homestuck. It has astrology themes!
00:40:55 -!- tuubow has joined.
00:44:31 -!- augur has quit (Remote host closed the connection).
00:44:49 -!- copumpkin has joined.
00:45:31 -!- augur has joined.
00:49:57 -!- augur has quit (Ping timeout: 240 seconds).
00:51:33 <kallisti> oh... you know what I just realized.
00:52:59 <kallisti> the Trollian handles are all different genetic codes.
00:53:26 <kallisti> the abbreviations I mean. CG, GC, AT, GA, etc..
00:53:33 <kallisti> dunno why I didn't notice that.
00:54:38 <kallisti> so are the kids, after John changes his handle.
00:55:25 <kallisti> I wonder if there's any significance in base pairs. I don't think so.
00:56:13 <kallisti> Feferi is paired with Jade, Sollux is paired with Tavros, Aradia is paired with Rose. Yeah I don't see a connection.
00:56:59 <zzo38> In the Dungeons&Dragons game I play in, I have only one damaging spell which is Energy Ray. It does not do a lot of damage and has chance to miss, but it is useful because you can select which energy you want, such as to light things on fire in case you don't have any other fire.
01:08:02 <kallisti> it would be interesting to have a programming language with blocks that work like ~ATH
01:08:12 <zzo38> What does ~ATH means
01:08:15 <kallisti> so basically blocks form a queue, where a } closes the first block that was opened.
01:09:40 <kallisti> http://mspaintadventures.wikia.com/wiki/~ATH
01:11:43 <zzo38> One thing I thought of, for Dungeons&Dragons game, maybe one time I will be able to mix up some bad people group entire plan simply by adding duplicate cards to one of their deck of cards, or removing a few cards. If the guards like to play solitaire or something, or people play cards to win money, that might divert a lot of things due to time and so on.
01:12:05 -!- tuubow has quit (Ping timeout: 240 seconds).
01:14:20 -!- PiRSquared has joined.
01:19:38 <kallisti> oh god they're changing Facebook more.
01:21:43 <zzo38> Well, I don't use Facebook.
01:21:59 <zzo38> But I think FreeGeek Vancouver uses Facebook for some of their things.
01:29:16 <kallisti> oh, hmmm, apparently I can download an archive of all my Facebook stuff.
01:34:52 -!- cheater has joined.
01:35:46 -!- augur has joined.
01:35:56 -!- oerjan has joined.
01:38:18 <kallisti> > Product 3 `mappend` Product 5
01:38:19 <lambdabot> Product {getProduct = 15}
01:38:24 -!- Jafet has quit (Read error: Connection reset by peer).
01:38:53 <oerjan> *cough*
01:39:19 <kallisti> oerjan: why would I use that again?
01:39:30 <kallisti> when my function is /too/ general. :P
01:39:39 <oerjan> kallisti: to pass to something that requires a Monoid?
01:39:42 -!- Jafet has joined.
01:39:48 <oerjan> e.g. Writer
01:39:50 <kallisti> oerjan: right.
01:39:55 -!- cheater has quit (Ping timeout: 252 seconds).
01:40:32 <oerjan> my subtle lambdabot ping fails for the trivial reason of there being no messages :(
01:41:31 <oerjan> admittedly, Product seems like it would be rather rarely needed for something like that. Sum at least can be used to keep a count.
01:42:12 <oerjan> > mempty :: ((),()) -- i wonder if this exists
01:42:13 <lambdabot> ((),())
01:42:15 <oerjan> yay
01:42:52 <ais523> what monad is that an instance of?
01:42:53 <oerjan> > Data.Foldable.foldMap (Product &&& Sum) [1..5]
01:42:53 <lambdabot> (Product {getProduct = 120},Sum {getSum = 15})
01:42:58 <zzo38> I used Product in the monoidplus package to make instance of MonoidPlus and Semiring and Ring.
01:42:59 <ais523> are tuples a monad?
01:43:04 <kallisti> not that I know of.
01:43:04 <oerjan> ais523: monoid
01:43:13 <ais523> ah, I see
01:43:14 <oerjan> and yes, see my test above
01:43:15 <zzo38> ais523: In monoidplus, pairs are a monad.
01:43:18 <ais523> both start with m
01:43:21 <kallisti> > () `mappend` ()
01:43:22 <lambdabot> ()
01:43:27 <ais523> so it's hard to tell which from an abbreviation
01:43:31 <kallisti> well, technically (Monoid a, Monoid b) => (a, b)
01:43:33 <kallisti> is a Monoid
01:43:40 <kallisti> but not every tuple.
01:44:05 <oerjan> it's the obvious product monoid, product here in the algebra/category sense
01:44:06 -!- Jafet has quit (Ping timeout: 240 seconds).
01:44:07 -!- Jafet1 has joined.
01:44:58 <oerjan> zzo38: the monad for pairs does not treat both parts equally though, nor could it for type reasons.
01:45:38 <kallisti> oerjan: I'm guessing the second element is the monadified part?
01:45:41 <kallisti> if that makes sense..
01:45:53 <oerjan> you could _almost_ make an applicative that worked that way, although it would need a newtype wrapper for the type reasons.
01:46:18 <oerjan> kallisti: yes, the return value type argument always must be the last one
01:46:36 <oerjan> and (a,b) is an abbreviation for (,) a b
01:47:18 <kallisti> yes
01:47:51 <kallisti> you could flip though right?
01:48:03 <kallisti> type Flip t a b = t b a
01:48:29 <kallisti> or is there an easier way? (a ,) ??????
01:48:32 <kallisti> er
01:48:34 <kallisti> (, b)
01:48:35 <kallisti> no...
01:48:37 <oerjan> nope.
01:48:38 <kallisti> that doesn't look right.
01:48:43 <oerjan> you must use something like Flip.
01:49:14 <zzo38> oerjan: I know it doesn't treat both parts equally. The left part is a monoid
01:49:35 <zzo38> It is similar to Writer monad
01:49:36 <oerjan> it's a restriction on haskell's instance resolution to make it more tractable (technically they say that the alternative would require "type lambdas" and probably be undecidable)
01:50:04 <oerjan> zzo38: yes i know
01:51:10 <oerjan> and even if not undecidable, it would probably introduce rampant ambiguity.
01:53:09 <oerjan> btw such Flipping could make sense, e.g. for Either you might want to treat the Lefts as values sometimes.
01:53:33 <oerjan> i mean, it makes sense to have a kind of bimonad
01:54:20 <oerjan> it's a bit like doing CPS with two continuations, one for ordinary continuation and one for errors
01:54:31 <oerjan> which could itself be another example, i think.
01:55:18 -!- cheater has joined.
01:55:46 -!- oerjan has set topic: <itidus21> on a side note, [...] finland is very depressing and a bit of a matrix of plasma | http://codu.org/logs/_esoteric/.
01:58:45 -!- cheater has quit (Excess Flood).
01:58:51 <zzo38> Bimonad? What? There is functor, and return, and join, and then do you need another one join or what?
01:59:13 -!- cheater has joined.
01:59:38 <oerjan> zzo38: you'd have another full monad instance, but parametrized on the second last type parameter instead (so you would need Flip to make it a genuine monad)
02:00:41 <zzo38> O, OK. Then it would just be two monads I guess. And then you could, if you want to, have a way to flip the types and then use the new fmap, return, join, bind.
02:01:33 <zzo38> When are they going to make join into a class method?
02:01:36 <oerjan> instance Monad Flip Either a b where return x = Flip (Left x); Flip (Right e) >>= f = Flip (Right e); Flip (Left x) >>= f = f x
02:02:31 <oerjan> zzo38: i'm not sure it makes much sense before they make Monad a subclass of Functor, which won't happen before they get fully working default methods for superclasses
02:03:00 <oerjan> i think they have some of that working, but i'm not sure if it's enough.
02:03:06 <zzo38> Yes, they should also make Monad a subclass of Functor too.
02:03:18 <zzo38> But any monad is also applicative too.
02:03:37 <oerjan> because you cannot make a default for >>= in terms of join unless you have fmap too
02:03:55 <oerjan> yes, they would of course include Applicative in the chain
02:03:59 -!- cheater has quit (Ping timeout: 255 seconds).
02:04:32 <oerjan> *instance Monad (Flip Either a b) where ...
02:04:38 <oerjan> er
02:04:42 <oerjan> *instance Monad (Flip Either a) where ...
02:05:19 <zzo38> oerjan: Yes; you need fmap to make >>= in terms of join. They could have the function liftM which can be used to make fmap if you define >>= like how the comonads library has liftW to define fmap in case you defined extend
02:05:23 -!- PiRSquared has quit (Quit: ChatZilla 0.9.87 [Firefox 8.0.1/20111120135848]).
02:08:27 <zzo38> Actually I think they should also make liftPair (default: liftPair = liftA2 (,)) a method of Applicative as well, since that would be an alternate way to define them.
02:09:19 <zzo38> And then change sequence to Applicative instead of Monad, and if Applicative is a constraint for Monad then it will still work with program how it does now, too.
02:09:57 <oerjan> i think that's a bit more dubious, while it's an important way in theory due to the connection with category theory, i don't think it's simpler than just using <*>
02:10:28 -!- cheater has joined.
02:11:15 <oerjan> after all, you probably just end up putting (,) everywhere instead of application
02:12:08 <zzo38> Also remove the right zero law from the documentation for MonadPlus, and fix the existing instances to follow the left zero law and monoid law (some of the existing ones don't, such as Parsec)
02:12:46 <oerjan> i've always heard the right zero law is optional, it's just nice to have if you can make it
02:13:11 <zzo38> Which libraries have Alternative or MonadPlus instances for IO monad? I think someone told me once and copied the code but I realize it is not properly following the monoid law
02:13:19 <zzo38> oerjan: Yes, they should write that in the document.
02:13:38 -!- Jafet1 has quit (Ping timeout: 252 seconds).
02:14:25 <oerjan> not sure where that is
02:14:47 -!- cheater has quit (Excess Flood).
02:14:56 <zzo38> Do you know why the Parsec MonadPlus and Applicative are designed does not properly follow the monoid law?
02:15:09 -!- cheater has joined.
02:16:48 <zzo38> I think the MonadPlus instance someone gave for IO was something like this: mplus = catch; Well, that is wrong and does not follow the monoid law. Here is one I think is proper one: empty = fail []; x <|> y = catch x $ \e -> modifyIOError (\z -> if z == userError [] then e else z) y;
02:16:55 <oerjan> well if they don't, i would assume it's for efficiency reasons
02:17:14 <oerjan> :t catch
02:17:15 <lambdabot> forall a. IO a -> (IOError -> IO a) -> IO a
02:17:18 <zzo38> Actually mplus = catch is probabily not what it was.
02:17:39 <zzo38> It must be: mplus x y = catch x $ const y;
02:17:55 <zzo38> oerjan: But then it won't be mathematically correct if they don't.
02:18:14 <oerjan> i don't recall how Parsec breaks the monoid law
02:18:52 <oerjan> @src mplus IO
02:18:52 <lambdabot> Source not found. My pet ferret can type better than you!
02:18:56 <oerjan> @src IO mplus
02:18:56 <lambdabot> m `mplus` n = m `catch` \_ -> n
02:19:42 <zzo38> Do you think my instance is mathematically correct?
02:21:05 <zzo38> What is your opinion of this? http://haskell.org/haskellwiki/User:Zzo38/Proposal_for_instance_disambiguation
02:21:51 <zzo38> I think there is no stolen syntax in this proposed extension.
02:22:51 <zzo38> I probably made a few mistakes
02:23:46 -!- cheater has quit (Excess Flood).
02:26:33 <oerjan> i think the main ghc authors don't like this kind of thing, as it makes the cross-module instances inconsistent.
02:27:17 <oerjan> and it's a design decision to consider instances to be global as much as possible.
02:28:14 <oerjan> admittedly it is sometimes annoying that you cannot hide instances, e.g. lambdabot has two conflicting Show instances for ->
02:28:20 <zzo38> oerjan: Yes, however sometimes you might want to override some existing instances in case they are no good.
02:28:31 <zzo38> Yes, and select one for your program in case there are more than one.
02:28:39 <kallisti> oerjan: at the same time instance hiding would have some pretty clumsy syntax.
02:28:43 <kallisti> I guess that's not a big deal though.
02:28:57 <zzo38> Of course it would be an extension, like incoherent instances is one extension.
02:29:02 <kallisti> still it would probably have to be different from the normal name hiding syntax.
02:29:08 <kallisti> because instance declarations can get somewhat lengthy
02:29:30 <zzo38> kallisti: Yes. I suggested some possibilities in that subpage of my userpage. If you don't like them, you can make other suggestions.
02:29:58 <kallisti> well it would be reasonable to have it in the normal hiding declaration
02:30:11 <kallisti> import Module hiding (instance (A a, B b) => T a b)
02:31:34 <kallisti> but a seperate declaration might be cleaner.
02:31:44 <zzo38> I have it that overriding instances would ordinarily not affect instances that have already been resolved in other modules, unless you specifically made a function that uses instances created in the modules importing that one. However explicit specialization could specify not to do that anyways, unless you override that too.
02:32:16 -!- Jafet has joined.
02:32:43 <oerjan> kallisti: i don't think you need the (A a, B b) => part, it is not used for resolving conflicts anyhow
02:32:51 <zzo38> kallisti: Did you read the proposal things I wrote?
02:32:57 <kallisti> zzo38: noep :?
02:33:12 <kallisti> oerjan: oh, really? that's weird. are you... sure?
02:33:15 <zzo38> oerjan: Did you read?
02:33:37 <kallisti> couldn't you have like (A a) => T a and (B a) => T a and then hiding instance T a would be ambiguous.
02:33:39 <oerjan> kallisti: quite sure. it's another design decision for tractability.
02:33:44 <kallisti> *T b
02:33:58 <oerjan> kallisti: those instances would always clash.
02:34:01 <zzo38> kallisti: If you didn't specify, I would say it hide all of them, I would think it should do.
02:35:11 <kallisti> oerjan: really? I thought it would only complain if a type had overlapping instances.
02:35:33 <kallisti> in other words (A a, B a) => a
02:35:35 <oerjan> kallisti: they _are_ considered overlapping. of course it only complains if you try to use them.
02:36:43 <kallisti> oh, okay. I thought specific types had overlapping instance.
02:37:13 <kallisti> hm, but okay that's probably a good design choice.
02:37:19 <oerjan> the T a parts are identical, so overlap unescapably.
02:37:57 <kallisti> doesn't the differing typeclass differentiate though? I mean, it doesn't, but it could.
02:38:02 <oerjan> kallisti: i think some ghc guy said something about it preventing them from having to implement a full prolog in the type checker :P
02:38:04 <zzo38> Hopefully the things I have written on that page should be able to resolve some of these things?
02:40:18 <zzo38> (Note I have not actually proven any of that so it might still be wrong)
02:40:23 -!- cheater has joined.
02:41:33 <zzo38> Here are some examples: import A () instance ();
02:41:37 <oerjan> i am basically assuming i don't understand the ghc type system well enough to know where the tricky issues are for such a thing.
02:41:58 <zzo38> import B class (AAA as ZZZ qualified as HHH); import C hiding instance (Num String, Num Bool); import D type (T as TT, U as newtype UU); import E hiding module C;
02:42:08 <zzo38> instance (instance IsString [Char] hiding) => IsString [x];
02:42:32 <zzo38> value1 :: Int; value1 = 2 + 3; value2 :: (Num x, x ~ Int) => x; value2 = ((+) :: x -> x -> x) 2 3;
02:43:21 <oerjan> but like, if one instance C A depends on another instance C B, and you hide C B, what then happens to the C A instance? their correspondence may well have already been inlined for some uses in the exported module
02:43:26 <oerjan> er,
02:43:30 <kallisti> in kallistiscript typeclass constraints can be arbitrary set operations. :>
02:43:32 <oerjan> s/C B/D A/
02:43:55 <oerjan> *exporting
02:44:18 <zzo38> oerjan: Well, for uses in the exported module, it will not override uses there. Like, in example I given, value1 will use the instance that is available to that module, while value2 uses the instance in the module that calls it.
02:44:35 <oerjan> those are the kind of tricky issues i can imagine, which means that exactly what gets hidden depends on what is inlined and optimized where - which would be a very bad thing.
02:44:40 <zzo38> And if C A depends on C B and you hide C B, the same thing.
02:45:02 <kallisti> oerjan: if it were implemented poorly, sure. :P
02:45:20 <zzo38> oerjan: Yes I know. However, there would be explicit rules to prevent that from happening. Hidden instance still *exist*, they simply would be hidden in modules that define new ones.
02:45:40 <zzo38> So, yes you would have to think of these things to make a proper implementation that does not have these problems.
02:45:59 -!- Jafet1 has joined.
02:46:59 <kallisti> oerjan: admittedly it would be kind of weird to have the exact same function doing completely different things in different modules based on instance hiding.
02:48:29 <zzo38> kallisti: In my scheme I tried to describe, they would not do different things based on instance hiding. If you write a new instance, its methods are new functions of a new instance; the other modules still use the instance available to that one instead, normally.
02:48:46 -!- Jafet has quit (Ping timeout: 240 seconds).
02:49:10 <oerjan> zzo38: it would also make the "orphan instance" problem worse - basically ghc is much less efficient at looking up instance information which is not in a module defining one of the classes or types involved
02:49:37 <oerjan> so they even have a warning flag for it
02:49:37 <zzo38> What is "orphan instance" problem?
02:49:50 -!- Jafet has joined.
02:49:55 <kallisti> zzo38: the's not very different from what I described/envisioned
02:50:27 -!- Jafet1 has quit (Ping timeout: 240 seconds).
02:52:45 <oerjan> zzo38: in haskell, an instance can be defined in any module, not just the ones defining the classes and types. if an instance _is_ defined in the same module declaring a class or type involved, ghc only has a small number of places to search for it, and doesn't need to treat it specially. but an instance which isn't is called an "orphan instance" and ghc has to trace dependencies for them separately.
02:56:41 <zzo38> oerjan: Well, the way I described, if an instance is defined in the current module or one which it imports, it uses those instances even if it is overridden in a module importing that one. But I also made up a possible way to override that for some functions.
02:58:13 <oerjan> another issue is what happens if you turn on the OverlappingInstances extension. afaiu it changes ghc from resolving instances as early as possible (since any conflict would be illegal) to as late as possible (since information in later modules could change which instance needs to be used.)
02:59:01 <zzo38> So if a function uses a specific type, instances are resolved when that module is compiled, but if it works for any type, the instances are resolved where the type is resolved.
03:01:20 <zzo38> So if a module has the value1 and value2 definition I specified (also requiring scoped type variables), then one module imports that and redefines Num Int to make everything add up to 42, then value1 will be 5 and value2 will be 42.
03:19:15 <zzo38> There is no "choking hazard" for mahjong; it is "chonking hazard".
03:30:42 -!- pikhq_ has joined.
03:31:47 <zzo38> Do you know the computer game that one level is involving, some people are trying to kill otyugh with safety pins and you have to stop them from doing so within the time limit?
03:33:05 <kallisti> no
03:33:25 <oerjan> if otyugh is what i think i remember from yafgc, that sounds messy.
03:33:30 <oerjan> *are
03:33:48 -!- pikhq has quit (Ping timeout: 253 seconds).
03:34:31 <zzo38> It is one area of a large game with many things like the Keycard Teleporters and rooms with windows that you can fall out of, and so on.
03:37:07 <oerjan> http://yafgc.net/?id=33 and the next one
03:50:52 -!- PiRSquared has joined.
03:53:03 <zzo38> Even the Spanish Inquisition is in this game.
03:53:24 <ais523> zzo38: was it unexpected?
03:53:39 <zzo38> Kind of...
03:59:06 -!- Jafet has quit (Ping timeout: 240 seconds).
04:00:10 -!- PiRSquared has quit (Read error: Connection reset by peer).
04:00:36 <oerjan> @check is this thing on?
04:00:37 <lambdabot> <no location info>: parse error (possibly incorrect indentation)
04:00:41 <oerjan> yay
04:02:41 <oerjan> > scanl (zipWith (flip const)) [[1,2,3],[4],[5,6]]
04:02:42 <lambdabot> Overlapping instances for GHC.Show.Show ([[[t]]] -> [[[t]]])
04:02:42 <lambdabot> arising fro...
04:02:47 <oerjan> > scanl1 (zipWith (flip const)) [[1,2,3],[4],[5,6]]
04:02:48 <lambdabot> [[1,2,3],[4],[5]]
04:02:55 <oerjan> > scanl1 (zipWith (flip const)) []
04:02:56 <lambdabot> []
04:02:58 -!- Jafet has joined.
04:03:17 -!- cheater has quit (Ping timeout: 245 seconds).
04:04:00 <oerjan> @check let tjoin = concat . transpose . scanl1 (zipWith (flip const)) in \lll -> tjoin $ tjoin (lll :: [[[Int]]]) == tjoin $ map tjoin lll
04:04:01 <lambdabot> Not in scope: `myquickcheck'Not in scope: `concat'Not in scope: `transpose'...
04:04:01 -!- Jafet has quit (Read error: Connection reset by peer).
04:04:07 <oerjan> ff
04:04:15 <oerjan> *sigh*
04:05:14 <oerjan> zzo38: i thought about if there could be a monad extension of the backwards applicative of [], it looks tricky.
04:05:20 -!- Jafet has joined.
04:05:35 -!- tuubow has joined.
04:05:41 <oerjan> concat . transpose should be the join for rectangular elements, but it won't work in general.
04:06:12 <oerjan> i had one idea to check but @check isn't working :(
04:06:23 <zzo38> oerjan: O, I was thinking of the same thing too!!
04:06:45 <zzo38> Earlier
04:06:45 <oerjan> counterexample for the simple version:
04:07:21 <oerjan> > let tjoin = concat . transpose; test = [[[],[1]],[[2],[3]]] in (tjoin $ tjoin test, tjoin $ map tjoin test)
04:07:23 <lambdabot> ([2,1,3],[1,2,3])
04:07:49 <oerjan> > let tjoin = concat . transpose . scanl1 (zipWith (flip const)); test = [[[],[1]],[[2],[3]]] in (tjoin $ tjoin test, tjoin $ map tjoin test)
04:07:51 <lambdabot> ([],[])
04:08:12 <oerjan> that particular example also works with my fix, but i'm doubtful for it in general
04:11:19 -!- Jafet1 has joined.
04:12:41 -!- Jafet has quit (Ping timeout: 255 seconds).
04:13:26 <oerjan> oh hm i think i see how it breaks
04:14:01 <oerjan> > let tjoin = concat . transpose . scanl1 (zipWith (flip const)); test = [[[1],[2]],[[3,4],[5,6]]] in (tjoin $ tjoin test, tjoin $ map tjoin test)
04:14:02 <lambdabot> ([1,3,2,5],[1,3,2,5])
04:14:08 <oerjan> oh it didn't
04:14:14 -!- Jafet has joined.
04:15:11 <oerjan> > let tjoin = concat . transpose . scanl1 (zipWith (flip const)); test = [[[1],[2],[3]],[[4,5],[6,7]]] in (tjoin $ tjoin test, tjoin $ map tjoin test)
04:15:13 <lambdabot> ([1,4,2,6,3],[1,4,2,6,3,5])
04:15:18 <oerjan> but that did
04:15:44 -!- Jafet1 has quit (Ping timeout: 252 seconds).
04:18:05 -!- Jafet1 has joined.
04:18:48 -!- Jafet has quit (Ping timeout: 252 seconds).
04:18:49 -!- MDude has changed nick to MSleep.
04:25:35 <Gregor> Surely you could implement a Bourne shell that used posix_spawn instead of fork/exec, and then Cygwin would suck considerably less ...
04:27:00 <oerjan> > let tjoin = concat . transpose . scanl1 (zipWith (flip const)); test = [[[1],[2],[3]],[[4,5],[6,7],[8,9]]] in (tjoin $ tjoin test, tjoin $ map tjoin test)
04:27:01 <lambdabot> ([1,4,2,6,3,8],[1,4,2,6,3,8])
04:27:08 <oerjan> bah
04:27:53 -!- GreaseMonkey has joined.
04:27:53 -!- GreaseMonkey has quit (Changing host).
04:27:53 -!- GreaseMonkey has joined.
04:28:52 <oerjan> > let tjoin = concat . transpose . scanl1 (zipWith (flip const)); test = [[[1,2],[3,4],[5,6]],[[7],[8],[9]]] in (tjoin $ tjoin test, tjoin $ map tjoin test)
04:28:53 <lambdabot> ([1,7,3,8,5,9,2],[1,7,3,8,5,9,2,4,6])
04:29:27 <oerjan> > let tjoin = concat . transpose . scanl1 (zipWith (flip const)); test = [[[1,2],[3,4],[5,6]],[[7],[8],[9]]] in (tjoin test, map tjoin test)
04:29:29 <lambdabot> ([[1,2],[7],[3,4],[8],[5,6],[9]],[[1,3,5,2,4,6],[7,8,9]])
04:31:36 <oerjan> > let tjoin = concat . transpose; test = [[[1,2],[3,4],[5,6]],[[7],[8],[9]]] in (tjoin $ tjoin test, tjoin $ map tjoin test)
04:31:37 <lambdabot> ([1,7,3,8,5,9,2,4,6],[1,7,3,8,5,9,2,4,6])
04:32:01 <oerjan> so that one breaks with the adjusted tjoin, but not the simple one
04:40:20 -!- augur has quit (Remote host closed the connection).
04:41:23 -!- augur has joined.
04:41:31 -!- hagb4rd has joined.
04:47:06 -!- Jafet1 has quit (Read error: Connection reset by peer).
04:47:21 -!- Jafet has joined.
04:50:26 -!- hagb4rd has quit (Ping timeout: 240 seconds).
05:01:05 -!- DCliche has joined.
05:02:20 -!- elliott has joined.
05:02:27 <elliott> God dammit!
05:02:27 <lambdabot> elliott: You have 1 new message. '/msg lambdabot @messages' to read it.
05:03:53 <elliott> 2 hours, 47 minutes and 19 seconds off because of not finding a directory :(
05:04:00 -!- Klisz has quit (Ping timeout: 240 seconds).
05:04:04 <ais523> was the directory actually /there/?
05:04:12 <elliott> It was somewhere else.
05:05:02 * elliott sigh
05:07:37 <elliott> Hmm, now to either give up or pretend it never happened.
05:10:09 <elliott> I just realised this situation is basically identical to when oklopol gave up on life because he got a below-perfect grade once.
05:10:51 <elliott> 16:06:59: <Phantom_Hoover> http://www.reddit.com/r/Minecraft/comments/nhcuf/hey_rminecraft_do_you_know_of_our_irc_channel/c398im6?context=3
05:10:51 <elliott> 16:06:59: <lambdabot> Phantom_Hoover: You have 13 new messages. '/msg lambdabot @messages' to read them.
05:10:51 <elliott> 16:07:19: <Phantom_Hoover> TkTech strikes back, and he exacts a terrible reven— wait no it's hilariously petty and largely lies.
05:10:55 <elliott> Oh god, this will be fun.
05:11:28 <elliott> ais523: "I should remind you that using your channel (#esolang, I believe it was?) to organize/partake in delinquent behaviour is a violation of the Freenode TOS."
05:11:34 <elliott> ais523: you had better ban PH from #esolang
05:12:03 <ais523> I don't have ops on #esolang
05:12:09 <elliott> ais523: Are you sure?
05:12:17 <elliott> Oh, it actually exists.
05:12:22 <elliott> It's owned by Zuu.
05:12:27 <elliott> Zuu will have to ban PH instead.
05:12:33 <elliott> The cost of delinquency.
05:15:02 <kallisti> are organizing and partaking in delinquent behavior?
05:15:06 * kallisti not
05:18:57 -!- augur has quit (Ping timeout: 252 seconds).
05:19:15 <oerjan> > let repeatM = sequence . repeat; getNext = modify (+1) >> get in evalState (repeatM getNext) 0
05:19:16 <lambdabot> [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28...
05:22:07 -!- elliott has quit (Quit: Leaving).
05:22:11 -!- elliott has joined.
05:22:13 -!- elliott has quit (Changing host).
05:22:13 -!- elliott has joined.
05:22:38 <kallisti> oerjan: congrats
05:22:57 <oerjan> wat?
05:23:03 <kallisti> you made numbers with state monad and stuff
05:23:04 <kallisti> good job.
05:23:17 <ais523> elliott: replied to the Reddit thread
05:23:23 <ais523> in an attempt to mollify the situation
05:23:24 <oerjan> kallisti: i was just checking that a post in haskell-cafe was mistaken
05:23:37 <oerjan> although the next post pointed it out, anyhow
05:23:41 <kallisti> what was the mistake?
05:23:43 <elliott> ais523: I was already replying
05:23:48 <elliott> ais523: but then I clicked a link and lost all my reply FUCK!!!
05:24:03 <elliott> does anyone know a way to retrieve that? I'm using Chrome
05:24:08 <oerjan> kallisti: to claim repeatM couldn't work that way, essentially
05:24:11 <elliott> it appears to have been lost because the form is created with JS
05:24:19 <ais523> elliott: I don't
05:24:30 <ais523> IIRC, the Back button sometimes works even in that case, with Firefox
05:24:33 <kallisti> oerjan: uh, how does that even make sense. :P
05:24:37 <elliott> ais523: well, it didn't
05:24:39 <ais523> haven't figured out the rules for whether it does or not
05:24:48 <elliott> ais523: btw, your comment is just going to encourage him
05:24:55 <elliott> "you should have banned him" etc. etc. etc.
05:24:59 <oerjan> kallisti: well it claimed that you couldn't evaluate because the final state of the computation is undefined.
05:25:03 <ais523> elliott: but I wasn't there at the time
05:25:14 <ais523> and he'd stopped by the time I came online
05:25:14 <elliott> ais523: precisely?
05:25:17 <ais523> so I had a perfect argument
05:25:18 <oerjan> but this is not a problem as long as you don't evaluate the state
05:25:30 <kallisti> oerjan: therefore all infinite lists = undefined
05:25:34 <kallisti> ?
05:25:48 <ais523> elliott: anyway, just tested in Firefox, if I type some stuff in a Reddit reply box, then click a link, then click back, the stuff is still there
05:25:54 <ais523> so I guess Firefox > Chrome in this respect
05:26:21 <oerjan> kallisti: no. the mistake is assuming the State monad needs to evaluate the final state before returning anything else.
05:26:33 <kallisti> ah
05:26:54 <kallisti> oh, right, I see.
05:27:08 <kallisti> they were thinking the state would just get +1'd forever or something like that.
05:27:12 <elliott> god dammit, I think it's lost
05:27:17 <elliott> ais523: anyway, he's clearly in the wrong
05:27:20 <oerjan> its sort of reasonable because the IO monad e.g. _does_ work that way
05:27:27 <elliott> ais523: because he claimed to have found us with connections to freenode staff.
05:27:29 <elliott> and made constant vague threats
05:27:30 <oerjan> *it's
05:27:35 <elliott> and generally tried to intimidate everyone
05:27:49 <oerjan> and there is also a strict state monad.
05:30:01 <kallisti> oerjan: but state is completely pure code so there's no need for it to be inherently strict.
05:30:10 <oerjan> yep.
05:30:23 <kallisti> or well, I'm sure there are better reasons.
05:30:34 <oerjan> doesn't mean people cannot make an erroneous assumption.
05:32:41 <elliott> meh, I'll just not bother
05:32:49 <kallisti> oerjan: so wait isn't the 2-tuple monad vaguely similar to State?
05:33:28 <oerjan> kallisti: it's isomorphic to Writer
05:33:46 <zzo38> Yes, it is like Writer.
05:34:09 <zzo38> But it is similar to State when using the Last monoid and the ReadthisT transformer, at least as far as I can tell.
05:36:24 <elliott> ais523: btw, I don't really think PH is bragging; complaining about a ban you consider unfair is a rather terrible way to brag
05:36:51 <ais523> elliott: I'm not talking about the ban complaint, but the grandparent comment of that
05:36:58 <kallisti> ITT: ops can be just any regular asshole
05:37:12 <elliott> ais523: fair enough
05:38:25 <elliott> 19:19:53: <Ngevd> `quote 8
05:38:25 <elliott> 19:19:56: <HackEgo> 8) <SimonRC> TODO: sex life
05:38:25 <elliott> 19:20:01: <Ngevd> Who is SimonRC?
05:38:29 <elliott> SimonRC_.
05:38:42 <ais523> `quote
05:38:45 <ais523> `quote
05:38:46 <ais523> `quote
05:38:48 <ais523> `quote
05:38:50 <ais523> `quote
05:38:51 <HackEgo> 757) <Phantom_Hoover> Just because you can't design a reliable Monopoly machine out of chocolate doesn't mean nobody else can.
05:38:52 <HackEgo> 768) <elliott> I hate you.
05:38:52 <HackEgo> 135) <Quas_NaArt> Because you're a Mac user. <lacota> I am! and proud of it to <lacota> My mouse has *no* buttons.
05:38:52 <HackEgo> 727) <oerjan> shachaf: wait, _you_ are in northumberland? <shachaf> No. <oerjan> whew <oerjan> we don't have room for more esolangers there. <shachaf> oerjan: Wait, *you* are in Northumberland? <oerjan> no <shachaf> Whew. <shachaf> We don't have room for more esolangers there.
05:39:08 <HackEgo> 743) <elliott> fizzie: I think it's because it looks like WHERE foo > ((bar - nonsense) + lol).
05:39:30 <ais523> hmm, the elliott quotes are the weakest there
05:39:32 <ais523> elliott: opinions?
05:39:39 <monqy> 768 "a good quote" - professional
05:39:45 <elliott> Rude! Yes, they are.
05:39:48 <elliott> 743 is worst.
05:39:50 <shachaf> Thanks for beeping me, ais523.
05:40:01 <elliott> shachaf: Did you know you're deliquent?
05:40:03 <ais523> shachaf: blame HackEgo :)
05:40:03 <shachaf> Do you need any wrath spread around here?
05:40:10 <ais523> `delquote 743
05:40:13 <HackEgo> ​*poof* <elliott> fizzie: I think it's because it looks like WHERE foo > ((bar - nonsense) + lol).
05:40:15 <ais523> elliott: I think I agree
05:40:16 <shachaf> elliott: Oh?
05:40:25 <elliott> shachaf: http://www.reddit.com/r/Minecraft/comments/nhcuf/hey_rminecraft_do_you_know_of_our_irc_channel/c398im6?context=3
05:41:19 <shachaf> elliott: Oh.
05:41:36 <oerjan> elliott: you seem to be using our channel to organize delinquent behavior on reddit. i shall have to ban you forthwith.
05:41:45 <shachaf> elliott: Are you irc_delinquent?
05:41:56 <elliott> shachaf: No, I started writing a reply and gave up because I lost it by clicking a link.
05:42:04 <oerjan> shachaf: yes he is. oh, you meant the nick?
05:42:35 <oerjan> wait, then who _is_ irc_delinquent?
05:42:44 <elliott> oerjan: That's what irc_delinquent would say!
05:42:47 <oerjan> speak up so i can ban you!
05:43:15 <ais523> <ericje> "(measured in orders of ηs)" Etaseconds?
05:43:51 <shachaf> ais523: It's this really obscure SI unit.
05:43:53 <elliott> (\x -> seconds x)
05:44:39 <elliott> 22:04:06: <ais523> hmm, Kim Jong-Il has died
05:44:39 <elliott> 22:04:11: <ais523> official story is that it's of overwork
05:44:44 <shachaf> Hmm, (\x -> (\y -> seconds x y)) === (\x -> (\y -> seconds y) x)
05:44:46 <elliott> ais523: I can always count on you to be really really late.
05:44:57 <shachaf> Coïncidence? I think not!
05:45:01 -!- hagb4rd has joined.
05:45:02 <ais523> elliott: well, I can't announce the death of famous people /before/ they die, you can get in trouble for that
05:45:08 <ais523> :t seconds
05:45:09 <lambdabot> Not in scope: `seconds'
05:45:10 <elliott> 22:50:27: <zzo38> Do you like this message?
05:45:10 <elliott> 22:50:34: <zzo38> Do you like this question?
05:45:11 <elliott> zzo38: Yes.
05:45:17 -!- augur has joined.
05:45:27 <elliott> 22:53:47: <zzo38> Do you know how to make a bomb which is powerful enough to destroy the entire Earth and break it into a million approximately equal pieces?
05:45:28 <elliott> Also yes.
05:45:33 <ais523> wow, I'll have to ask "do you like this question?" in a job interview some time
05:45:37 <shachaf> elliott: That's indicative of some fundamental mathematical duality, right?
05:45:45 <elliott> 23:12:25: <Sgeo> Do IORefs physically store their values, or are the values stored in the RealWorld somewhere and the IORef is just an index?
05:45:50 <ais523> the answer would probably be quite insightful
05:45:55 <ais523> into the answerer's personality
05:46:03 <elliott> Sgeo: Your question is meaningless in the context of the semantics, and not even wrong in the context of the implementation.
05:46:08 <elliott> shachaf: Totally.
05:46:24 <shachaf> elliott: I'll just collect my Nobel Prize in Mathematics now, then.
05:47:02 <pikhq_> shachaf: There isn't one.
05:47:05 <pikhq_> Shame, too.
05:47:12 <elliott> 23:59:32: <Sgeo> I don't think that's an official site?
05:47:14 <shachaf> pikhq_: Did I say "...if it exists"?
05:47:18 <elliott> Sgeo: It is, if it's the one I'm thinking of.
05:47:23 <elliott> Yes, it is.
05:47:32 <pikhq_> shachaf: No. I'm merely making a useful observation.
05:47:40 <pikhq_> Which implies some necessary action.
05:47:53 <shachaf> pikhq_: My father always says things like "if you manage to violate the second law of thermodynamics, you'll get the Nobel prize in mathematics".
05:47:55 <pikhq_> For instance, getting a TARDIS and chatting with Alfred.
05:48:10 <oerjan> elliott: does Sgeo logread? because i doubt he's actually listening.
05:48:17 <Sgeo> Hi
05:48:24 <oerjan> AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa
05:48:26 <Sgeo> I fell asleep, but woke up.
05:48:30 <elliott> 00:24:11: <kallisti> do you think Google would get mad if I made a web service in which you can type in queries and it will perform extra functionionality that google doesn't do, but will then otherwise defer to a Google search?
05:48:30 <elliott> 00:26:31: <kallisti> it'd be like wikipedia + google + W|A + programming language interpreters
05:48:37 <shachaf> "logread"?
05:48:42 <shachaf> That's a verb you use around here?
05:48:48 <elliott> kallisti: DuckDuckGo does the Wikipedia part, at least. But if you weren't allowed to do that then Scroogle wouldn't exist.
05:48:49 <oerjan> Sgeo: MAKING ME LOOK LUDICROUSLY WRONG IS A BANNABLE OFFENSE YOU KNOW
05:48:52 <elliott> Or, well, if Google cared enough.
05:49:53 <elliott> oerjan: Delinquent!
05:50:01 <ais523> oerjan: /are/ you ludicrously wrong? or do you just /look/ ludicrously wrong?
05:50:09 <oerjan> ais523: always!
05:50:23 <ais523> err, which question is that an answer to?
05:50:26 <elliott> 01:40:32: <oerjan> my subtle lambdabot ping fails for the trivial reason of there being no messages :(
05:50:27 <elliott> @tell oerjan hi
05:50:27 <lambdabot> Consider it noted.
05:50:34 <oerjan> ais523: darn, you got me
05:50:34 <lambdabot> oerjan: You have 1 new message. '/msg lambdabot @messages' to read it.
05:50:41 <oerjan> @messages
05:50:41 <lambdabot> elliott said 14s ago: hi
05:50:49 <elliott> 01:42:53: <oerjan> > Data.Foldable.foldMap (Product &&& Sum) [1..5]
05:50:49 <elliott> 01:42:53: <lambdabot> (Product {getProduct = 120},Sum {getSum = 15})
05:50:51 <elliott> awesome
05:51:21 <ais523> oerjan: you just need to try pings that can easily be disguised as something else
05:51:22 <ais523> `? welcome
05:51:25 <HackEgo> Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: http://esolangs.org/wiki/Main_Page
05:51:27 <ais523> like that
05:51:40 <elliott> 01:53:09: <oerjan> btw such Flipping could make sense, e.g. for Either you might want to treat the Lefts as values sometimes.
05:51:43 <elliott> oerjan: error handling, say
05:51:49 <oerjan> <shachaf> That's a verb you use around here? <-- yes.
05:51:57 <kallisti> "Newer languages such as Java and Python have incorporated some limited versions of some of the features of Lisp, but are necessarily unable to bring the coherence and synergy of the full concepts found in Lisp." bahahaha this statement
05:52:01 <kallisti> on Wikipedia
05:52:06 <elliott> tryMethod1 >> tryMethod2 >> tryMethod3
05:52:47 <oerjan> elliott: yep.
05:54:03 <oerjan> `log [l]ogread\>
05:54:27 <elliott> ais523: hmm, could you retroactively redefine timezomes for me?
05:54:30 <HackEgo> No output.
05:54:34 <oerjan> eek
05:54:41 <oerjan> `log [l]ogreads
05:54:51 <HackEgo> 2011-04-24.txt:15:41:59: <oerjan> cheater99: i know i'm just assuming he logreads
05:55:14 <oerjan> `pastelogs [l]ogread
05:55:21 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.30862
05:55:39 <monqy> too many lines, good
05:55:52 <ais523> elliott: err, I'm not sure what an if statement looks like in Feather yet
05:55:58 <kallisti> oerjan: what's with the [l]?
05:56:07 <ais523> how is if done in Smalltalk?
05:56:15 <elliott> 02:26:33: <oerjan> i think the main ghc authors don't like this kind of thing, as it makes the cross-module instances inconsistent.
05:56:18 <oerjan> kallisti: make sure the search itself doesn't get return
05:56:21 <oerjan> *ed
05:56:22 <kallisti> cond ifTrue: expr ifFalse: expr
05:56:25 <elliott> oerjan: it breaks all kinds of things if you can make two (Set Int)s with different Ords
05:56:31 <elliott> all kinds of things, such as literally everything
05:56:44 <elliott> it's basically the major restriction the typeclass system makes to get all the advantages it does
05:56:46 <kallisti> ais523: conditionals are implemented as methods ("messages") on boolean objects.
05:57:21 <ais523> kallisti: ah, obviously
05:57:46 <elliott> ais523: why do you need an if statement?
05:57:56 <elliott> oh, to avoid infinite regress
05:57:57 <ais523> elliott: I don't need it as a statement
05:58:04 <ais523> but I need some method of doing conditionals for obvious reasons
05:58:13 <elliott> ais523: hmm, a useful feather primitive is anti-compare-and-swap
05:58:14 <shachaf> I need an if-only statement to avoid infinite regrets.
05:58:20 <elliott> if (a != b) a <<= b
05:58:25 <ais523> elliott: agreed
05:58:30 <elliott> well, without the swap part
05:58:34 <elliott> but you could do that too, I think
05:58:37 <elliott> it'd just be more difficult
05:58:46 <ais523> except that a is typically going to be something hard to compare for equality with b
05:58:49 <kallisti> shachaf: oh also note in order to make it lazily evaluate the expressions it has to be enclosed in a block. cond ifTrue: [^value]
05:58:51 <elliott> as you'd have to compare against a third variable
05:58:53 <kallisti> er
05:58:55 <ais523> I think the most useful primitive is to check to see if a contains all the methods b does
05:59:03 <shachaf> No one is appreciating my pun?
05:59:04 * Sgeo will have to review the commit history of ftphs
05:59:05 <kallisti> ais523: s/shachaf/ais523/
05:59:09 <shachaf> This channel is stupid.
05:59:10 <elliott> shachaf: Har har har har har har.
05:59:12 <elliott> shachaf: I just didn't read it yet.
05:59:15 <elliott> Sheesh.
05:59:17 <elliott> Non-linear, man!
05:59:22 <shachaf> Sure, "logreader".
05:59:27 <elliott> 03:19:15: <zzo38> There is no "choking hazard" for mahjong; it is "chonking hazard".
05:59:28 <elliott> Ah.
05:59:47 <monqy> one time i chonked on a mahjong
05:59:48 * oerjan swats shachaf -----###
05:59:49 <monqy> it was bad
05:59:51 <elliott> `addquote <zzo38> Even the Spanish Inquisition is in this game. <ais523> zzo38: was it unexpected? <zzo38> Kind of...
05:59:54 <Sgeo> https://github.com/jgoerzen/ftphs/commit/83268eddfa5cf9f919a4c9a641478dcf9ff40f63
05:59:54 <HackEgo> 769) <zzo38> Even the Spanish Inquisition is in this game. <ais523> zzo38: was it unexpected? <zzo38> Kind of...
05:59:57 <Sgeo> "hilarious"
06:00:05 <kallisti> ais523: in the above syntax ^ is how you return values from a block.
06:01:08 <ais523> kallisti: what "above syntax"?
06:01:16 <ais523> I need to learn Smalltalk better
06:01:24 <kallisti> ais523: ais523 oh wait actually I think the ^ is unecessary
06:01:26 <kallisti> ais523: me too
06:01:32 <kallisti> ais523: I accidentaly pinged shachaf when explaining
06:01:33 <ais523> just because Feather's syntax is tentatively defined as "vaguely resembles Smalltalk but does the same things for unrelated reasons"
06:01:45 <ais523> ah, I see
06:02:21 <elliott> hmm, maybe I could use my delinquent powers to move it a few hours back
06:04:15 <kallisti> ais523: basically all of the control structures are implemented in this way.
06:04:52 <kallisti> methods and blocks. you can see a little bit of this influence in Ruby, which occasionally has similar control constructs.
06:06:25 <oerjan> <TkTech> [...] All ops keep 24/7 logs [...] <-- hey a directly false statement! ban him.
06:07:14 <elliott> oerjan: um he was talking about #minecraft.
06:07:17 <elliott> obviously.
06:07:21 <oerjan> ah.
06:07:32 * elliott starts worrying about oerjan's reading comprehension skills
06:07:52 <elliott> hmm, banning TkTech in case he decides to troll us again would be a good idea, except that he'd just turn it into another conspiracy theory
06:08:01 <shachaf> HEY #ESOTERIC, I JUST TROLLED ##MARMALADE SO BAD
06:08:02 <oerjan> my skills are quite comprehensive, thank you!
06:08:05 <shachaf> <shachaf> MARMALADE IS DUMB
06:08:07 <shachaf> <shachaf> ONLY DUMB PEOPLE LIKE MARMALADE
06:08:14 * kallisti starts worrying about elliott's tendency towards perfectionism.
06:08:22 <shachaf> You're all accomplices now.
06:08:44 <kallisti> I can safely say that marmalade is awesome.
06:08:47 -!- tuubow has quit (Ping timeout: 255 seconds).
06:08:50 <kallisti> and therefore am not an accomplice
06:08:50 <elliott> oerjan: BAN DELINUQNET SHACHAF!!!!!
06:08:56 <elliott> AGAINST FREENODE TOS! AGAINST FREENODE TOS!
06:09:26 <kallisti> elliott: watch Freenode actually remove this channel.
06:09:46 <elliott> kallisti: I would have so much more time.
06:09:51 <shachaf> I don't know if I've ever had marmalade.
06:09:52 <kallisti> me too
06:09:57 <shachaf> Is marmalade like jam?
06:10:01 <kallisti> sort of
06:10:03 <kallisti> but not really
06:10:19 <elliott> shachaf: Not really.
06:10:20 <kallisti> I mean, it's made the same way
06:10:29 <elliott> shachaf: "Orange jam" is... sort of a vaguely close description.
06:10:32 <kallisti> but I think it has orange peels or other fruit peels in it.
06:10:36 <elliott> But it doesn't taste like jam and the texture is different.
06:11:01 <oerjan> shachaf: you're in a jam now, i suggest you watch your words.
06:11:07 <elliott> HAHA NOW I RULE ##MARMALADE
06:11:11 <elliott> I JUST TOOK THE CHANNEL OVER
06:11:12 <elliott> BAN ME
06:11:24 <elliott> shachaf: You should try marmalade, it's nice.
06:11:26 <elliott> In fact, now I want marmalade.
06:11:27 * shachaf reports elliott to the Freenodepolice.
06:11:37 <ais523> elliott: err, calm down about this whole thing
06:11:40 <ais523> your behaviour's getting a little out of hand
06:11:43 * oerjan jams shachaf's transmission
06:11:45 <elliott> I think I will have marmalade with something when it's not 6:00.
06:11:46 <shachaf> elliott: Well, *you* should try lakka jam.
06:11:48 <kallisti> elliott: if only you had a FANCY CAR.
06:11:49 <shachaf> Mmm, lakka.
06:11:53 * kallisti drives to the store and buys some marmalade.
06:11:57 <elliott> ais523: You realise I'm not being serious.
06:11:57 * kallisti in HIS CAR
06:11:59 <shachaf> Who's Finnish in here?
06:12:00 <elliott> Also shachaf is the one at fault.
06:12:06 <elliott> He is the perpetrator of the ##marmalade scam.
06:12:42 <kallisti> shachaf: I finish a long time ago.
06:12:45 <kallisti> ha. ha. ha.
06:12:56 * oerjan swats kallisti -----###
06:13:22 <kallisti> hey it's not me. nationalities need to stop naming themselves after English words.
06:13:30 <kallisti> Turkey and Finland should form a club.
06:13:40 <shachaf> Along with Greece?
06:13:46 <kallisti> yes
06:13:48 <kallisti> well no
06:14:00 <kallisti> Greek does not resemble another English word.
06:14:04 <kallisti> Greece does though.
06:14:06 <elliott> Sure it does.
06:14:10 <elliott> It resembles the English word, "Greek".
06:14:11 <kallisti> Greece and Turkey can be in a club.
06:14:14 <shachaf> Nor does "Turkish".
06:14:14 <kallisti> elliott: ANOTHER
06:14:15 <kallisti> KEY WORD
06:14:27 <kallisti> fuck you guys. ruining my great idea.
06:14:31 <kallisti> with your... reason.
06:14:36 <shachaf> elliott: That's a no.
06:14:40 <elliott> "Chrome uses process isolation to improve stability at the cost of memory consumption" TkTech doesn't understand virtual memory.
06:14:44 <shachaf> 06:14 -!- ##marmalade You're not a channel operator
06:14:55 * elliott decides to not exhaustively figure out the list of things TkTech doesn't understand.
06:14:59 <shachaf> elliott: Oh, dno't get me started about V8.
06:15:09 <shachaf> It's just completely not thread-safe.
06:15:11 <shachaf> Because they don't care.
06:15:23 <elliott> shachaf: Well... on the one hand, I like concurrency.
06:15:36 <elliott> On the other hand, nobody should have to suffer through making C or C++ code thread-safe.
06:16:28 <shachaf> Did I ever talk about how annoying JavaScriptCore is?
06:16:39 <elliott> No.
06:16:47 -!- tuubow has joined.
06:16:49 <kallisti> shachaf: yes. just now
06:16:51 <kallisti> ha. ha. ha.
06:17:05 <kallisti> I LOVE BEING INCREDIBLY LITERAL.
06:17:15 <kallisti> instead of interpreting the meaning from context.
06:17:24 <shachaf> 06:16 -!- shachaf changed the topic of ##marmalade to: WHEN LIFE GIVES YOU MARMALS, MAKE MARMALADE
06:17:34 <shachaf> You people are missing out.
06:18:25 <shachaf> JavaScriptCore insists on garbage-collecting your thread's stack.
06:18:37 <monqy> I forget if I like marmaalde
06:18:39 <shachaf> Or, at least, where it thinks your thread's stack is.
06:18:46 <kallisti> monqy: you do
06:18:49 <monqy> ok
06:19:26 <shachaf> JavaScriptCore will also send a SIGUSR2 to every other thread that's ever touched any JSC object.
06:19:31 <kallisti> it's like jam if jam were made with orange peels. obviously it's going to be good.
06:19:32 <shachaf> When it GCs, I mean.
06:19:39 <shachaf> Then it'll garbage-collect *its* stack.
06:19:56 <elliott> monqy: Have some marmalade it is so good.
06:20:01 <monqy> one time I tried eating orange peels
06:20:04 <monqy> it wasn't too great
06:20:16 <kallisti> monqy: it's better in gelatin and sugar stuff okay.
06:20:26 <monqy> I've had marmalade
06:20:28 <monqy> I think I liked it
06:20:28 <shachaf> One time I tried eating lemon peels.
06:20:31 <shachaf> It was pretty good.
06:20:41 <shachaf> Meyer lemons, that's the secret.
06:20:52 <monqy> mayor lemons
06:21:06 <shachaf> Also, I don't usually eat gelatin.
06:21:13 <shachaf> Unless it's vegetarian.
06:21:14 <monqy> try spreading it on toast
06:21:17 <monqy> oh
06:21:46 <kallisti> shachaf: pectin is made from plants
06:21:54 <kallisti> which is what is use to make jam.
06:22:04 <monqy> no it's made from ground up bones you silly goose
06:22:21 <shachaf> monqy: I don't object to gelatin that is vegetarian.
06:22:26 <shachaf> I also don't object to pectin.
06:23:06 <kallisti> I think you mean vegan maybe? I'm not sure how vegetarianism works with gelatin.
06:23:11 <elliott> shachaf doesn't eat animals in case the animals eat him.
06:23:13 <kallisti> because milk and eggs are okay, right?
06:23:24 <kallisti> I guess if you have to kill the animal to make it.
06:23:46 <elliott> That's sort of the major difference, kallisti :P
06:23:54 <elliott> One is something aminals make, one is made out of aminals.
06:24:34 <kallisti> elliott: yes I was reremembering
06:24:44 <shachaf> Riven: The Sequel to MYST
06:24:55 <kallisti> they should name it Ryven
06:25:03 <kallisti> because they like stupid y's
06:25:08 <shachaf> Ryven: The Sequel to MIST
06:25:27 <monqy> syquyl
06:25:36 <monqy> reven, mest
06:25:49 <kallisti> `word 50
06:25:54 <HackEgo> yeraged nunzach thce red emnat saldift alt foer genis ong pinghts aldes diitieni vitasborazeinfulchth asehlvilktirf hostors oords aphoncerpers terges hotinanckerubis rot thry ant aquit ensinduteritfulna con kappled abitiong igniss ber forzarprevo lenignstergy scpreconfora ving qualictieueser tamoloarimbly aviondouruppren che tort pes sus adracity blatteracheancosianschignicethruinge ed aing ch reste fraphscalcn ped solknoyeanieggeroilins
06:25:58 <shachaf> Yyyyy: Yyy Yyyyyy yy YYYY
06:26:00 <elliott> good
06:26:10 <elliott> `macro
06:26:15 <HackEgo> WE'VE
06:26:19 <elliott> we've
06:26:19 <kallisti> elliott: the best
06:26:24 <monqy> WE'VES
06:26:30 <kallisti> macro is the best word generator. it successfully generates words.
06:26:39 <oerjan> solknoyeanieggeroilins sounds like just the thing for breakfast.
06:26:40 <kallisti> whereas mine just generates things that aren't words.
06:26:59 <monqy> hey, red is a word
06:27:05 <monqy> rot, ant
06:27:17 <kallisti> monqy: that's just the rare case that it's working correctly
06:27:17 <shachaf> `cat bin/word
06:27:19 <oerjan> tort
06:27:20 <HackEgo> ​#!/usr/bin/perl \ $VAR1 = { \ 'qz' => { \ 'e' => 1, \ 'k' => 1, \ 'a' => 1, \ ' ' => 9, \ 'i' => 1, \ 'o' => 2 \ }, \ 'sp' => { \ 'w' => 9, \ 'r' => 3173, \ 'a' => 5192, \ 'd' => 67,
06:27:28 <kallisti> shachaf: don't do it
06:27:28 <shachaf> Oh, now I see what that does.
06:27:35 <shachaf> `cat bin/macro
06:27:38 <HackEgo> ​ELF....
06:27:43 <elliott> elf....
06:27:52 <elliott> kallisti: Adracity would be a good word.
06:27:56 <elliott> Also, tort is a word.
06:28:04 <shachaf> So is "con".
06:28:09 <shachaf> And "rot" and "ant" and so on.
06:28:10 <kallisti> shachaf: the next incarnation of words, if I ever get around to finishing it, will be substantially better.
06:28:11 <monqy> im trying to paste the house but it just backspaces...help...
06:28:31 <elliott> kallisti: But it's already perfect.
06:28:32 <elliott> monqy: The house?
06:28:38 <monqy> before the ELF
06:28:41 <monqy> theres a house
06:28:44 <elliott> kallisti: "foer genis" sounds like foie gras or something.
06:29:05 <kallisti> elliott: yeah but it needs more datasets, and it's going to be a 3-order model, and it can mix datasets, and maybe the word ending code you suggested won't actually be broken, etc etc.
06:29:44 <elliott> kallisti: I'll probably finish /my/ Markov code before you do that..
06:29:48 <elliott> s/.././
06:30:03 <kallisti> probably. I'm notiriously slow at doing things.
06:30:15 <kallisti> so there's like... a perpetual backlog of things.
06:30:16 <monqy> I was going to make a words thing but then I decided not to
06:30:20 <kallisti> that are more important than that.
06:30:38 <kallisti> monqy: yes I would be totally offended. Markov word generator (c) kallisti
06:30:48 <elliott> My one won't be a word generator!
06:30:53 <kallisti> good.
06:30:56 <elliott> It'll be a $100 NOVEL GENERATOR.
06:31:05 <kallisti> elliott: good plan for rich
06:31:05 <elliott> Because it generates... NOVEL THINGS!!!
06:31:08 <monqy> i want to generate 100 dollars novels
06:31:10 <elliott> No that's how much it'll cost.
06:31:16 <elliott> Me.
06:31:17 <monqy> oh that reminds me i should finish reading that book
06:31:26 <kallisti> elliott: whut
06:31:28 <elliott> Which book
06:31:36 <monqy> I'll see if I can find it
06:33:00 <Sgeo> Total size of files: 511.1MB
06:33:05 <Sgeo> Size on Disk: 4.1GB
06:33:14 <monqy> the policemans beard is half constructed. i hope it isn't bad because that would make me sad because so far i like it.
06:33:49 <elliott> Sgeo: what about it
06:34:04 <Sgeo> Kind of distressing, is all
06:34:12 <Sgeo> Although I'm not sure how that happened
06:34:17 <elliott> "The existence of the program was revealed in 1983 in a book called The Policeman's Beard Is Half Constructed (ISBN 0-446-38051-2)"
06:34:18 <elliott> oh good
06:34:18 <zzo38> I know about that; I read some comment about it in the book called "There are two errors in the the title of this book."
06:34:22 <elliott> Sgeo: it's called filesystems
06:34:33 <elliott> and padding
06:34:34 <elliott> and overhead
06:34:39 <shachaf> elliott: It's called inefficient filesystems.
06:34:46 <shachaf> This is why you use ReiserFS or something.
06:34:58 <shachaf> @google tail packing
06:34:59 <lambdabot> http://en.wikipedia.org/wiki/Block_suballocation
06:34:59 <lambdabot> Title: Block suballocation - Wikipedia, the free encyclopedia
06:35:02 <elliott> http://www.ubu.com/historical/racter/index.html oh good
06:35:07 <elliott> shachaf: *@fs
06:35:34 <shachaf> Speaking of which, I'm sort of implementing tail packing right now, maybe.
06:36:24 <elliott> shachaf: NoSQL tail packing?
06:38:00 <elliott> Quick, what's a good colour scheme?
06:38:56 <hagb4rd> elliott: http://colorschemedesigner.com
06:38:56 <lambdabot> hagb4rd: You have 1 new message. '/msg lambdabot @messages' to read it.
06:39:21 <shachaf> elliott: Why not?
06:40:04 <shachaf> elliott: A filesystem is pretty much a key-value store, after all.
06:40:27 <elliott> shachaf: Exactly.
06:40:35 <elliott> shachaf: You're implementing a filesystem on top of a filesystem.
06:40:41 <shachaf> "on top of a filesystem"?
06:40:52 <elliott> shachaf: Your thing runs in the kernel?
06:40:59 <shachaf> No, but it runs on block devices.
06:41:10 <Sgeo> Did my professor's FTP server kick me off for uploading too much
06:41:13 <elliott> shachaf: Oh.
06:41:18 <Sgeo> Hmm, is there a way to check if I've hit a quota?
06:41:21 <elliott> shachaf: Well, that's interesting, at least.
06:41:33 <elliott> shachaf: Could you implement POSIX FS semantics on top of it, theoretically?
06:43:41 <shachaf> You could do anything, theoretically.
06:44:01 <elliott> shachaf: OK, "easily".
06:44:01 <kallisti> shachaf: can I solve the halting problem, theoretically. OH SNAP
06:45:28 <shachaf> elliott: POSIX FS semantics aren't really the goal.
06:45:31 <shachaf> ("isn't?
06:45:43 <shachaf> s/.$/"? "semantics" is the worst word.)/
06:45:48 <elliott> shachaf: Yes, obviously.
06:46:16 <elliott> shachaf: I'm just thinking that it could be interesting to layer POSIX FS semantics over it (at the "application layer"), and then get that talking to the kernel.
06:46:37 * elliott operates on the principle "you should never run more than one implementation of a filesystem at once".
06:46:40 * elliott fails at this a lot.
06:47:04 <shachaf> Silly principle.
06:47:18 <shachaf> "you should run as many implementations of a filesystem at once as possible"
06:47:35 <shachaf> elliott: I would point you to the website except that it's kind of horribly out of date.
06:48:46 <elliott> shachaf: Insert some joke about NoSQL inconsistency mumble mumble it'll be updated real soon now.
06:49:28 <oerjan> :t (<$)
06:49:29 <lambdabot> forall a (f :: * -> *) b. (Functor f) => a -> f b -> f a
06:49:30 <shachaf> "eventual consistency", please. Also "eventual durability" and "eventual atomicity".
06:49:40 * shachaf <$ (<$)
06:49:52 <elliott> shachaf: I can't diss eventual consistency too hard because RDP does it, and I like RDP!
06:50:01 <elliott> "Eventual atomicity" is a good one though.
06:50:04 <shachaf> RDP?
06:50:06 <elliott> Eventual availability.
06:50:08 -!- DCliche has quit (Quit: You are now graced with my absence.).
06:50:11 <elliott> shachaf: Reactive Demand Programming.
06:50:24 <elliott> http://awelonblue.wordpress.com/
06:50:51 <shachaf> It's almost like some things that you like do X and some things that you dislike do X, and just talking about X being good or bad on its own without context is silly.
06:51:12 <elliott> shachaf: Counterpoint: NoSQL.
06:51:17 <shachaf> ?
06:51:40 <elliott> shachaf: X = NoSQL
06:51:58 <shachaf> You don't like any filesystems?
06:52:22 <Sgeo> elliott is anti-files.
06:52:47 <Sgeo> And I don't mean that in a joking way. Although I think it's separate from a dislike of NoSQL
06:52:57 <elliott> shachaf: Huh?
06:53:04 <elliott> shachaf: I was making a joke that NoSQL is always bad.
06:53:15 <elliott> I don't like filesystems, though.
06:53:34 <shachaf> elliott: That's just a special case of you not liking anything.
06:53:36 <shachaf> Unless it's @.
06:53:38 <elliott> Or at least, a filesystem that I'd like would be so significantly different from what most people call a filesystem that I wouldn't consider it one.
06:53:50 <elliott> shachaf: Disproof of that is in, like, my scrollback.
06:54:48 * elliott reads http://web.cs.dal.ca/~nzeh/xmonad/Navigation2D.pdf.
06:55:10 * Sgeo kicks his professor's FTP quota
06:55:19 <shachaf> elliott: Should I do a talk for the local Haskell group?
06:55:39 <elliott> shachaf: Only if it's about @.
06:55:57 <shachaf> The meeting is ~tomorrow.
06:56:29 <elliott> You can talk about @ without it existing.
06:56:31 <elliott> I do it all the time.
06:56:54 <shachaf> That's pretty much all you do, in fact.
06:56:55 <elliott> Awesome, proofs on page 3.
06:57:00 <elliott> This is how I like my window manager papers.
06:57:16 <oerjan> :t (<$ (<$))
06:57:17 <lambdabot> Ambiguous type variable `f' in the constraint:
06:57:17 <lambdabot> `Functor f' arising from a use of `<$' at <interactive>:1:4-7
06:57:17 <lambdabot> Probable fix: add a type signature that fixes these type variable(s)
06:57:57 <elliott> > () <$ (<$)
06:57:58 <lambdabot> Ambiguous type variable `f' in the constraint:
06:57:58 <lambdabot> `GHC.Base.Functor f'
06:57:58 <lambdabot> ...
06:58:04 <elliott> GHC.Base.Functor. Nice.
07:00:23 <shachaf> What's a good thing to do a talk about?
07:00:43 <shachaf> Which isn't @.
07:01:24 <oerjan> :t let x = (<$) in ((<$ x),x)
07:01:25 <lambdabot> Ambiguous type variable `f' in the constraint:
07:01:25 <lambdabot> `Functor f' arising from a use of `x' at <interactive>:1:21
07:01:26 <lambdabot> Probable fix: add a type signature that fixes these type variable(s)
07:01:30 <oerjan> oops
07:01:59 <oerjan> :t case (<$) of x -> ((<$ x),x)
07:01:59 <lambdabot> forall a (f :: * -> *) b a1. (Functor f) => (a1 -> a -> a1, a -> f b -> f a)
07:02:25 <elliott> shachaf: Super @.
07:02:43 <shachaf> elliott: I thought @ = fix Super
07:02:43 <oerjan> :t (<$ id)
07:02:44 <lambdabot> forall a b. a -> b -> a
07:02:53 <elliott> shachaf: No, @ is basically one level of super above Unix.
07:03:00 <elliott> It's just a really big super.
07:03:05 <shachaf> Super Unix?
07:04:06 <elliott> Sunix.
07:04:06 <oerjan> :t (>>= (>>=))
07:04:07 <lambdabot> forall (m :: * -> *) a b. (Monad m) => ((a -> m b) -> m a) -> (a -> m b) -> m b
07:05:01 <oerjan> fancy
07:05:40 <kallisti> oerjan: yo dawg, we heard you like binds
07:06:00 <elliott> shachaf: Do you have a tmie machine yet?
07:06:02 <elliott> oerjan: That looks nice.
07:06:20 <elliott> :t (>>= (>>=)) ($ 42)
07:06:20 <lambdabot> forall (m :: * -> *) b. (Monad m, Num b) => (b -> m b) -> m b
07:06:21 <oerjan> it's like there should almost be a way to use it for something.
07:06:43 <elliott> :t (>>= (>>=)) ($ 42) (\y -> (y+) <$> readLn)
07:06:44 <lambdabot> forall b. (Num b, Read b) => IO b
07:06:47 <elliott> yay
07:07:01 <elliott> now the problem is, doing it with a =/= b
07:07:32 <elliott> :t (>>= (>>=)) (\act -> ("hello",) <$> act 42) (\(prompt,y) -> putStrLn prompt >> (y+) <$> readLn)
07:07:32 <lambdabot> Illegal tuple section: use -XTupleSections
07:07:38 <elliott> :t (>>= (>>=)) (\act -> (,) "hello" <$> act 42) (\(prompt,y) -> putStrLn prompt >> (y+) <$> readLn)
07:07:39 <lambdabot> No instance for (Num [Char])
07:07:39 <lambdabot> arising from the literal `42' at <interactive>:1:41-42
07:07:39 <lambdabot> Possible fix: add an instance declaration for (Num [Char])
07:07:41 <elliott> :(
07:08:17 <elliott> :t (>>= (>>=)) (\act -> (,) "done" <$> act ("hello",42)) (\(prompt,y) -> putStrLn prompt >> (y+) <$> readLn)
07:08:18 <lambdabot> forall b. (Num b, Read b) => IO b
07:08:21 <elliott> oerjan: yay
07:08:41 <elliott> oerjan: I think the problem is that the (m a)'s return value is basically discarded
07:08:45 <elliott> oerjan: unless you use mfix
07:08:50 <elliott> but /that's/ above my skill
07:09:05 <elliott> (to somehow modify your return value and pass it back /in/ to the (a -> m b))
07:09:25 <elliott> oerjan: also, I'm unconvinced it's any different to ($)...
07:09:36 <elliott> shachaf: *time
07:09:40 <oerjan> um
07:10:02 <shachaf> elliott: Yes.
07:10:15 <shachaf> elliott: ASTERISKNo.
07:12:23 <oerjan> (x >>= (>>=)) y = x y >>= y
07:12:35 <Sgeo> I may have found a solution to my MIDI problem of many many years
07:12:37 <oerjan> which is not very similar to ($)
07:12:42 <Sgeo> Many of these MIDIs had names embedded in them!
07:13:04 <Sgeo> Feel free to point and laugh
07:14:08 <elliott> shachaf: :(
07:14:15 <elliott> oerjan: oh right
07:14:28 <elliott> oerjan: it does feel almost useful...
07:14:31 <shachaf> elliott: Was it my job to time machine?
07:14:34 <elliott> oerjan: maybe in the fixed-point
07:14:37 <elliott> shachaf: Yes.
07:16:21 <elliott> shachaf: So, um, is dzen good? I need more reassurance before I install this terribly-named AUR package.
07:16:31 <shachaf> elliott: dzen is OK.
07:16:39 <shachaf> It gets input on stdin and prints it.
07:16:42 <elliott> shachaf: Is there anything more OK?
07:16:42 <shachaf> s/print/show/
07:16:50 <shachaf> Depends on what you want.
07:16:54 <elliott> (Also, should I use it with i3status or does it have its own stuff for that?)
07:17:37 <shachaf> I just wrote my own shell script for that.
07:18:45 <shachaf> elliott; I know how you much of an anti-NIH person you are, though; I understand if you just want to use a prewritten package.
07:21:16 <elliott> shachaf: Totally.
07:21:36 <elliott> shachaf: Actually I mostly just don't trust a shell script to not eat CPU/battery/whatever.
07:23:39 * elliott answers a Monad Question.
07:24:03 * elliott very carefully perpetrates the "action"/"execute" terminology for IO actions while doing so, and slips in "monadic context" for good measure.
07:24:17 <kallisti> elliott: shameful
07:25:24 <shachaf> elliott: Make sure to mention how getChar is a function.
07:25:27 <shachaf> For clarity's sake.
07:25:43 <shachaf> (The Report says so, after all.)
07:26:44 <elliott> shachaf: THE REPORT IS WRONG.
07:26:48 <elliott> Haskell is internally inconsistent.
07:27:17 <ais523> elliott: ?
07:27:26 <pikhq_> :t getChar
07:27:27 <lambdabot> IO Char
07:27:30 <Sgeo> Oh, because 0-argument functions aren't functions?
07:27:31 <pikhq_> That ain't a function.
07:27:41 <zzo38> It isn't a function.
07:27:56 <zzo38> It is a value to represent I/O action resulting in Char.
07:28:03 <elliott> ais523: ?
07:28:11 <elliott> Sgeo: There is no such thing as a "0-argument function".
07:28:16 <Sgeo> I take it you wouldn't call pi a function either
07:28:16 <ais523> oh, the debate about if getChar is a function
07:28:21 <shachaf> ais523: http://www.haskell.org/onlinereport/haskell2010/haskellch7.html#x14-1450007.1
07:28:21 <elliott> Sgeo: http://conal.net/blog/posts/everything-is-a-function-in-haskell
07:28:23 <elliott> ais523: There is no debate.
07:28:32 <ais523> elliott: this actually lead to a lot of confusion in my compiler
07:28:39 <shachaf> elliott: We yield to the Report.
07:28:43 <zzo38> elliot: Except in C, in which there is 0-argument function. In Haskell there is 1-argument function, but the output might be another function.
07:28:44 <ais523> as something was meant to be a function, but was showing up as a command, and we weren't sure why
07:28:48 <elliott> At least, I've never seen anyone who actually knows Haskell disagree, apart from the Report, which is written by lame people.
07:28:55 <elliott> zzo38: Right, in Haskell.
07:28:57 <ais523> turned out that it did correctly see it as a function, but incorrectly optimized the argument out altogether
07:29:22 <shachaf> Sgeo: A "function" is a thing that has type (a -> b) for some a and b.
07:29:36 <shachaf> The "argument" of that function (singular) has type "a".
07:30:11 <ais523> anyway, seeing nonfunctions as nullary functions has a consistency to it that's nice in a compiler
07:30:14 <elliott> shachaf: It's still of course acceptable syntax to abbreviate "a function of (N+1) arguments" as "a function with result type (a function of N arguments)".
07:30:17 <ais523> just like seeing commands as 0-bit integers helps
07:30:17 <pikhq_> zzo38: Of course, Haskell "function" and C "function" are two different things.
07:30:30 <elliott> ais523: That's a property of your target architecture etc.
07:30:36 <ais523> indeed
07:30:40 <shachaf> elliott: Not if you're at the point where you ever say anything like "0-argument functions".
07:30:43 <pikhq_> A Haskell function is anything of type a->b, while a C function is a subroutine that takes 0 or more arguments.
07:30:54 * elliott thinks that most arguments based on "it's elegant/natural" to do with programming are completely based on historical precedent.
07:31:05 <zzo38> That is because a Haskell function is like a mathematical function.
07:31:08 <elliott> shachaf: I meant (N+2) and (N+1).
07:31:11 * pikhq_ nods
07:31:12 <elliott> shachaf: Sry.
07:31:28 <shachaf> elliott: ?
07:31:39 <shachaf> I'm just trying to say that Sgeo is wrong.
07:31:48 <elliott> shachaf: I agree.
07:31:58 <elliott> shachaf: I just mean that I intended to exclude that specifically in my expansion.
07:32:13 * elliott notes that map is both a function of 1 argument and a function of 2 arguments.
07:32:28 <shachaf> id is a function of INFINITY ARGUMENTS!!cos(0)
07:32:33 <elliott> Also, printf is a function of 1 argument, and printf is a function of (N+1) arguments if printf is a function of N arguments.
07:32:40 <elliott> DARE YOU INDUCT?
07:32:52 <shachaf> > id id id id id id id id id id id id id id id id 1
07:32:53 <lambdabot> 1
07:32:56 <zzo38> All functions have exactly 1 argument in Haskell. But it is just that some functions output will be another function.
07:32:59 <shachaf> > id id id id id id id id id id id id id id id id id id id id id id id id id id id id id id id id id id id id id id id id 1
07:33:04 <lambdabot> mueval-core: Time limit exceeded
07:33:04 <lambdabot> mueval: ExitFailure 1
07:33:08 <elliott> shachaf: id is slow, man.
07:33:24 <elliott> Oh, I was reading that thing about xmonad.
07:33:31 <Sgeo> > const () $ fix id
07:33:35 <lambdabot> mueval-core: Time limit exceeded
07:33:37 <kallisti> elliott: I would think id is completely optimized aw-- oh wait interpreter
07:33:39 <Sgeo> Uh
07:33:48 <Sgeo> Why did that time out?
07:34:03 <elliott> Sgeo: id is slow.
07:34:06 <kallisti> Sgeo: const is slow man
07:34:11 <elliott> kallisti: lambdabot compiles.
07:34:15 <Sgeo> elliott, it shouldn't even be doing id or fix id or anything!
07:34:15 <kallisti> oh okay.
07:34:17 <elliott> With optimisation.
07:34:23 <Sgeo> :t const
07:34:28 <lambdabot> forall a b. a -> b -> a
07:34:42 <Sgeo> Unless this const isn't all that lazy?
07:34:51 <Sgeo> > const () undefined
07:34:52 <lambdabot> ()
07:35:03 <Sgeo> See, that's fine
07:35:05 * Sgeo mindboggles
07:35:10 <shachaf> Sgeo: See if you can figure out the type of the first id.
07:35:14 <elliott> 04:25:35: <Gregor> Surely you could implement a Bourne shell that used posix_spawn instead of fork/exec, and then Cygwin would suck considerably less ...
07:35:27 <elliott> Gregor: I bet Cygwin is such that you can't spawn without going through the fork overhead.
07:35:43 <shachaf> Sgeo: Your ghci will also not be able to evaluate that.
07:35:48 <elliott> shachaf: That has nothing to do with <Sgeo> > const () $ fix id.
07:35:54 <elliott> That's just lambdabot being weird.
07:36:01 <shachaf> Oh.
07:36:07 <shachaf> > const () (fix id)
07:36:08 <lambdabot> ()
07:36:09 <shachaf> It's the $
07:36:12 <shachaf> $ is slow
07:36:28 <Sgeo> a->a (a->a)->(a->a) ... I was going to guess the password and ask if typechecking's taking forever
07:36:33 <Sgeo> *try to
07:36:54 <shachaf> > cоnst () $ fix id
07:36:56 <lambdabot> *Exception: TOO SLOW, MAN
07:36:59 <ais523> elliott: oh, question! for our ICA compiler, we wanted to write a program that waited for a key to be pressed
07:37:11 <Sgeo> shachaf, what did you do?
07:37:13 <ais523> and we have a function which, in Haskell notation, would be getKeyPress : Int
07:37:18 <shachaf> Sgeo: I USED $
07:37:19 <ais523> which returns an integer that's the key that was pressed
07:37:22 <elliott> Lt cоnst
07:37:23 <elliott> :t cоnst
07:37:24 <lambdabot> Expr
07:37:32 <ais523> we don't care which key was pressed; how do we ignore that?
07:37:34 <Sgeo> @undef
07:37:38 <Sgeo> :t const
07:37:39 <lambdabot> forall a b. a -> b -> a
07:37:44 <elliott> ais523: const () getKeyPress
07:37:44 <Sgeo> > const () $ fix id
07:37:45 <lambdabot> ()
07:37:48 <ais523> (ICA is lazy but impure)
07:37:52 <elliott> oh
07:37:54 <ais523> elliott: doesn't work; then it doesn't wait for the key
07:37:56 <elliott> ais523: seq getKeyPress ()
07:37:56 <shachaf> > cоnst () (((((((fix id)))))))
07:37:57 <elliott> obviously
07:37:58 <lambdabot> *Exception: TOO SLOW, MAN
07:38:03 <elliott> (you don't need pseq, just seq)
07:38:04 <ais523> elliott: agreed
07:38:13 <elliott> (you don't care if the () is evaluated first, after all)
07:38:29 <Sgeo> Was shachef trolling me making me think something was wrong with const () $ fix id?
07:38:35 <elliott> ais523: btw, that wasn't haskell notation
07:38:40 <elliott> Sgeo: shachef trolls everybody.
07:38:42 <ais523> it's just that we don't have that sort of seq handy, our only seq is seq : (com * 'a) -> 'a
07:38:45 <elliott> Then he goes bork bork bork.
07:38:46 <ais523> elliott: err, double colon?
07:38:50 <elliott> ais523: Yes.
07:38:57 <elliott> ais523: I'm dead sure you can implement seq.
07:39:01 <ais523> and 'a isn't Haskell either, but is nicer than forall
07:39:07 <elliott> ais523: But fine, seq (execute getKeyPress, ())
07:39:13 <elliott> execute : 'a -> com
07:39:19 <elliott> s/execute/evaluate/g, actually.
07:39:24 <elliott> ais523: forall?
07:39:26 <elliott> You don't need forall.
07:39:27 <ais523> well, all we actually need is evaluate getKeyPress
07:39:29 <elliott> seq :: Com -> a -> a
07:39:38 <ais523> the problem was defining evaluate
07:39:52 <ais523> in the end, we managed it as (let x := a in skip), which is ridiculous
07:40:08 <ais523> because a variable assignment's a side-effect so has to be forced
07:40:24 <elliott> What was that about forall, anyway?
07:40:38 <ais523> oh, Haskell uses forall to introduce type variables
07:40:43 <ais523> whereas OCaml uses '
07:41:07 <ais523> presumably the forall is optional
07:41:18 <elliott> ais523: Incorrect.
07:41:22 <elliott> forall is an identifier in Haskell.
07:41:26 <elliott> id :: forall -> forall
07:41:46 <ais523> hmm
07:41:47 <pikhq_> elliott: He's referring to the "forall x." thing
07:41:48 <ais523> :t id
07:41:49 <lambdabot> forall a. a -> a
07:41:53 <ais523> like that
07:42:04 <elliott> ais523:
07:42:14 <pikhq_> ais523: That is optional and a nonstandard extension.
07:42:15 <elliott> :t (.)
07:42:16 <lambdabot> forall a b (f :: * -> *). (Functor f) => (a -> b) -> f a -> f b
07:42:19 <elliott> :t flip
07:42:20 <lambdabot> forall (f :: * -> *) a b. (Functor f) => f (a -> b) -> a -> f b
07:42:23 <ais523> pikhq_: ah, I see
07:42:24 <elliott> > (# (), () #)
07:42:25 <lambdabot> Illegal binding of unboxed tuple e_1 :: (# (), () #)
07:42:31 <elliott> > id runST (return ())
07:42:32 <lambdabot> Couldn't match expected type `m ()'
07:42:32 <lambdabot> against inferred type `forall s...
07:42:33 <ais523> and you can tell type variables from types because types start with capitals in Haskell?
07:42:37 <elliott> > runST (return ())
07:42:38 <lambdabot> ()
07:42:43 <ais523> > (# #)
07:42:43 <pikhq_> ais523: Right.
07:42:43 <lambdabot> No instance for (GHC.Show.Show (t -> (# t #)))
07:42:44 <lambdabot> arising from a use of `M5...
07:42:48 <elliott> ais523 discovers that lambdabot is not standard Haskell.
07:42:58 <ais523> hmm, how do you write an unboxed 0-element tuple?
07:43:03 <elliott> ais523: There is no such thing.
07:43:08 <ais523> but consistency!
07:43:10 <elliott> Alternatively, it's called ().
07:43:20 <pikhq_> ais523: "How do you write an unboxed nothing", you mean?
07:43:22 <pikhq_> ()
07:43:26 <ais523> yep
07:43:45 <ais523> > ((0,0),0) = (0,(0,0))
07:43:46 <lambdabot> <no location info>: parse error on input `='
07:43:49 <Sgeo> () is boxed isn't it?
07:43:53 <ais523> > ((0,0),0) == (0,(0,0))
07:43:54 <lambdabot> True
07:43:56 <elliott> Sgeo: There's nothing to box.
07:43:58 <ais523> ah, OK
07:44:01 <elliott> ais523: misleading
07:44:02 <ais523> I was wondering whether that would type
07:44:07 <elliott> only because of lambdabot's non-standard instances
07:44:09 <Sgeo> elliott, it can be unevaluated, can't it?
07:44:10 <elliott> that's the same as
07:44:12 <ais523> elliott: ah, OK
07:44:20 <elliott> > ((0,0),(0,0)) == ((0,0),(0,0))
07:44:21 <lambdabot> True
07:44:34 <ais523> 0 is an instance of (Int,Int)?
07:44:34 <elliott> Sgeo: Sure, but there's only one ().
07:44:59 <ais523> > (('x','x'),'x') == ('x',('x','x'))
07:45:00 <lambdabot> Couldn't match expected type `(GHC.Types.Char, GHC.Types.Char)'
07:45:00 <lambdabot> aga...
07:45:03 <ais523> there we go
07:45:07 <zzo38> ais523: Don't you mean instance Num (Int, Int)?
07:45:24 <ais523> zzo38: yes, that's a different way to think of it
07:45:44 <pikhq_> zzo38: That's not the way to phrase it.
07:45:50 <elliott> ais523: no, that's literally why it happens
07:45:55 <elliott> instance (Num a) => Num (a,a)
07:45:59 <elliott> oh, hmm
07:46:01 <Sgeo> elliott, oh, it's just the stuff inside an unboxed tuple that can't be undefined?
07:46:04 <elliott> instance (Num a, Num b) => Num (a, b)
07:46:05 <zzo38> pikhq_: O, it isn't?
07:46:07 <pikhq_> Presumably, there's an instance (Num a) => Num (a,a) ... Like that
07:46:16 <elliott> Sgeo: Well, yeah. Here, ask shachaf.
07:46:27 <pikhq_> And 0 :: (Num n) => n, of course.
07:46:28 <shachaf> What?
07:46:39 * shachaf was happily reading not-IRC.
07:46:46 <Sgeo> > (5,5) + (4,3)
07:46:47 <lambdabot> (9,8)
07:47:10 <Sgeo> > (0,0) == 0
07:47:11 <lambdabot> True
07:47:17 <Sgeo> > (0,1) == 0
07:47:17 <lambdabot> False
07:47:20 <Sgeo> > (0,1) == 1
07:47:21 <lambdabot> False
07:47:28 <elliott> Sgeo: It's a quantum superposition of 0 and 1.
07:47:30 <elliott> Don't you know anything>
07:47:31 <elliott> ?
07:47:47 <Sgeo> > (0,1) == (1,0)
07:47:48 <lambdabot> False
07:47:51 <Sgeo> > (0,1) == (0,1)
07:47:51 <lambdabot> True
07:47:54 <elliott> @let collapse (a,b) = (a/2) + (b/2)
07:47:55 <lambdabot> Defined.
07:47:57 <elliott> > collapse 1
07:47:59 <lambdabot> 1.0
07:48:00 <elliott> > collapse (0,1)
07:48:01 <lambdabot> 0.5
07:48:15 <elliott> > collapse (0,1) == collapse (2,-1)
07:48:17 <lambdabot> True
07:48:20 <Sgeo> Oh, I see how the earlier things work now
07:48:21 <shachaf> > collapse (0,1) :: (Int,Int)
07:48:21 <Sgeo> ty
07:48:22 <lambdabot> No instance for (GHC.Real.Fractional GHC.Types.Int)
07:48:22 <lambdabot> arising from a use o...
07:48:24 <ais523> elliott: quantum superpositions don't average like that
07:48:24 * Sgeo is a derp.
07:48:27 <shachaf> > collapse (0,1) :: (Double,Double)
07:48:28 <lambdabot> (0.5,0.5)
07:48:34 <elliott> ais523: They do in Haskell.
07:48:35 <ais523> anyway, doesn't the List monad do quantum superpositions just fine?
07:48:47 <elliott> No, it doesn't track probability.
07:48:49 <elliott> You can do that with a monad though.
07:48:50 <Sgeo> ais523, not if there's an infinite amount of superpositions.
07:48:53 <Sgeo> >.>
07:48:59 <ais523> elliott: oh, right
07:49:15 <zzo38> List monad doesn't do quantum superpositions, it just is a list of items in an order.
07:49:27 <ais523> yep, it's easy enough to visualise a set of (value,probability) pairs with the monad rules defined analogously to List
07:49:30 <elliott> zzo38: it's a nondeterministic choice monad, though
07:49:34 <ais523> hmm, would the probabilities be reals or complex numbers?
07:50:02 <Sgeo> I'm pretty sure I saw quantum stuff on Hackage
07:50:06 <zzo38> You can do probabilities with WriterT (Product Double) [] or whatever
07:50:26 <Sgeo> QIO doesn't sound right
07:50:30 <zzo38> elliott: What is a choice monad, exactly?
07:52:00 <ais523> elliott: anyway, I worked out how multithreading works in Feather; it's basically a case of fork existing but join not existing, and retroactive assignments only happening within the one thread
07:52:03 <ais523> I'm not sure how useful that is
07:52:11 <ais523> also, the threads can't communicate at all, not even retroactively
07:53:37 <ais523> elliott: heh at that "everything is a function" article; I particularly liked the Scala example in the comments of "1()()()" being valid Scala (and evaluating to 1)
07:54:17 <zzo38> At least, I think you can make a probability monad with WriterT (Product Double) [] and you can use different types such as exact fractions if you prefer, and so on
07:55:22 <elliott> > 1()()()
07:55:22 <oerjan> > first 1 2
07:55:23 <lambdabot> 1
07:55:23 <lambdabot> can't find file: L.hs
07:55:25 <elliott> > 1()()()
07:55:26 <lambdabot> 1
07:55:29 <Sgeo> My laptop's battery seems to be dead.
07:55:30 <elliott> (wtf at oerjan's error)
07:55:31 <ais523> elliott: hmm, the nullary function view is a /lot/ more consistent in SCC
07:55:32 <oerjan> > first 1 2
07:55:36 <lambdabot> mueval-core: Time limit exceeded
07:55:43 <oerjan> :t first 1 2
07:55:44 <lambdabot> forall c d. (Num c, Num d) => (c, d)
07:55:45 <elliott> ais523: SCC?
07:55:48 <kallisti> zzo38: probably in what way? wouldn't you need a seed for a PRNG?
07:55:49 <elliott> zzo38: [] is the monad of nondeterministic choice.
07:55:50 <Sgeo> If the computer got unplugged, even for a second, it will probably just die
07:55:51 <oerjan> > first 1 2
07:55:52 <lambdabot> (1,2)
07:55:52 <elliott> zzo38: It's like Prolog without cut.
07:56:15 <ais523> elliott: it's an intermediate type system, that requires each function its argument finitely many times in parallel with itself
07:56:20 <elliott> > let factor n = do { x <- [1..n]; y <- [1..n]; if x * y == n then return (x,y) else [] } in factor 10
07:56:21 <lambdabot> [(1,10),(2,5),(5,2),(10,1)]
07:56:29 <elliott> > let factor n = do { x <- [2..n]; y <- [2..n]; if x * y == n then return (x,y) else [] } in factor 10
07:56:30 <lambdabot> [(2,5),(5,2)]
07:56:30 <elliott> (whoops)
07:56:32 <zzo38> elliott: O, it is like Prolog. I don't know about Prolog a lot
07:56:42 <ais523> e.g. \x. x||x is allowed, but \x.fix((x||)) isn't allowed
07:56:48 <elliott> ais523: Each function its argument?
07:56:53 <kallisti> elliott: noice
07:56:57 <ais523> *each function to use its argument
07:57:09 <kallisti> elliott: isn't there like a Control.Monad function for that?
07:57:10 <kallisti> :t guard
07:57:11 <lambdabot> forall (m :: * -> *). (MonadPlus m) => Bool -> m ()
07:57:14 <ais523> also, the restriction's not just "finite" but "finite and some explicit finite integer"
07:57:17 <kallisti> hm no not quite
07:57:25 <elliott> kallisti: [] is MonadPlus, so you can do it, yes
07:57:35 <elliott> > let factor n = do { x <- [2..n]; y <- [2..n]; guard (x * y == n); return (x,y) } in factor 10
07:57:35 <lambdabot> [(2,5),(5,2)]
07:57:37 <kallisti> elliott: right, but is it already in control.monad?
07:57:41 <elliott> @hoogle guard
07:57:42 <lambdabot> Control.Monad guard :: MonadPlus m => Bool -> m ()
07:57:43 <lambdabot> Language.Haskell.TH.Syntax data Guard
07:57:43 <lambdabot> Language.Haskell.TH data Guard
07:57:44 <elliott> Yes.
07:57:46 <ais523> the interesting thing about SCC is that it's finite-state, but there are no known non-pathological finite-state ICA programs that don't type in it
07:57:54 <ais523> and the pathological ones are trivial to rewrite to be non-pathological
07:58:17 <ais523> let a = \e.e(skip) in let b = \f.f(f(skip)) in let c = \g.g(\x.g(\y.x)) in c(a); c(b)
07:58:25 <ais523> ^ a pathological program that doesn't type in SCC
07:58:33 <zzo38> kallisti: Well, yes if you want to select a random option you will need a seed. But it will make the probability of each value keeping. So, join will make a probability distributions of probability distribution into a probability distribution by multiplying the probabilities together, and return is a single item with 1 probability, fmap is map items, bind makes probability depending on input value
07:58:46 <kallisti> zzo38: ah okay I see.
07:59:08 <kallisti> elliott: all of the conditional-like functions I see return m () which is not quite what is wanted in this case.
07:59:23 <ais523> elliott: anyway, say you have something of type com→com in ICA; its type might be com^1→com in SCC, but also might be com^2→com, or com^0→com (e.g., that's the type of const skip)
07:59:38 <ais523> those compile into functions of type com→com, com→com→com, and com respectively in SCI
07:59:40 <elliott> kallisti: Yes it is.
07:59:43 <elliott> I just rewrote it with guard.
07:59:55 <ais523> except that the last isn't actually a function, but it makes sense to treat it as a nullary function so you don't have to special-case it
07:59:59 <kallisti> elliott: oh I see.
08:00:04 <elliott> ais523: Trivial to write algorithmically, or just "I haven't found one I can't yet"?
08:00:22 <elliott> > let factor n = [ (x,y) | x <- [2..n], y <_ [2..n], x*y == n ] in factor 10
08:00:22 <lambdabot> Pattern syntax in expression context: _
08:00:24 <zzo38> But to me what it looks like, is the list monad is a monad just because it follows the monad laws. Yes you can use it for many purpose like many thing can be for many purposes.
08:00:25 <elliott> > let factor n = [ (x,y) | x <- [2..n], y <- [2..n], x*y == n ] in factor 10
08:00:26 <lambdabot> [(2,5),(5,2)]
08:00:33 <elliott> kallisti: This shows how list comprehensions are like do notation.
08:00:36 <ais523> elliott: there's an algorithm that's trivial but rather wasteful, which involves inlining all the arguments to the function
08:00:37 <zzo38> But of course the list is ordered.
08:00:50 <kallisti> elliott: indeed
08:00:52 <elliott> zzo38: right, this would work with Set too :P
08:00:57 <elliott> were it a Monad
08:00:58 <ais523> and I haven't found one that can't be fixed less wastefully in practice
08:01:04 <elliott> ais523: fair enough
08:01:05 <zzo38> elliott: Yes, and then it would be not ordered.
08:01:14 <zzo38> And not duplicate values either.
08:02:07 <zzo38> There would be set monad in mathematics, there are some monad in mathematics that it doesn't make in Haskell.
08:02:27 <kallisti> elliott: how would you take only unique combinations? (no duplication of (a,b) and (b,a) )
08:02:53 <elliott> > let factor n = [ (x,y) | x <- [2..n], y <- [2..n], x*y == n ] in Set.fromList . map (\(a,b) -> if b>a then (b,a) else (a,b)) $ factor 10
08:02:54 <lambdabot> Not in scope: `Set.fromList'
08:02:58 <elliott> > let factor n = [ (x,y) | x <- [2..n], y <- [2..n], x*y == n ] in S.fromList . map (\(a,b) -> if b>a then (b,a) else (a,b)) $ factor 10
08:03:00 <lambdabot> fromList [(5,2)]
08:03:07 <kallisti> ah okay.
08:03:38 <kallisti> what's the fromList for exactly?
08:03:45 <elliott> > let factor n = [ (x,y) | x <- [2..n], y <- [2..n], x*y == n ] in map (\(a,b) -> if b>a then (b,a) else (a,b)) $ factor 10
08:03:46 <lambdabot> [(5,2),(5,2)]
08:03:49 <kallisti> oh..
08:04:35 <kallisti> I feel that could possibly be better written?
08:04:39 <kallisti> maybe with additional guards?
08:04:41 <kallisti> hm, no
08:04:43 <zzo38> I don't really like list comprehension but there it is. If they need something like that they could just use do-notation since it work the same way anyways.
08:05:15 <oerjan> > let factor n = [ (x,y) | x <- [2..n], y <- [2..x], x*y == n ]
08:05:15 <lambdabot> not an expression: `let factor n = [ (x,y) | x <- [2..n], y <- [2..x], x*y ...
08:05:23 <pikhq_> I dislike that list comprehension is insufficiently general.
08:05:27 <oerjan> > let factor n = [ (x,y) | x <- [2..n], y <- [2..x], x*y == n ] in factor 10
08:05:28 <lambdabot> [(5,2)]
08:05:28 <elliott> pikhq_: not any mor
08:05:29 <elliott> e
08:05:31 <pikhq_> I see no reason it can't be monad comprehensions.
08:05:31 <elliott> ghc 7.2 has monad comprehensions
08:05:35 <pikhq_> elliott: Oh?
08:05:36 <pikhq_> :)
08:05:50 <pikhq_> Good deal.
08:05:58 <kallisti> yeaaaah, it's like we have two do notations now!
08:07:03 <zzo38> There is monad comprehensions extension but I don't know why you need it, if you already have do notation anyways.
08:07:15 <ais523> haven't non-list monad comprehensions been repeatedly added and removed?
08:07:20 <kallisti> oerjan: madness
08:08:11 <pikhq_> zzo38: It's a mere nicety.
08:08:26 <pikhq_> ais523: Yes.
08:09:19 <elliott> zzo38: they can express more than do notation
08:09:25 <elliott> for instance it has notation for "zipping" monadic values
08:09:29 <elliott> and there's the "group by", "sort by" stuff
08:09:52 <elliott> http://hackage.haskell.org/packages/archive/base/4.4.1.0/doc/html/Control-Monad-Zip.html, http://hackage.haskell.org/packages/archive/base/4.4.1.0/doc/html/Control-Monad-Group.html
08:10:11 <elliott> ofc, all of those are extensions to list comprehensions in the first place :)
08:10:15 <zzo38> I find myself using bind operations most often with list monad in actual programs, and not as often with other monad. But sometimes with others too. Since >>= is mostly useful to combine join and fmap together.
08:11:00 <elliott> also, they're more convenient if you have a lot of guards, of course
08:11:27 <elliott> oh, there's no "sort by" stuff, disregard that :)
08:11:31 -!- Sgeo_ has joined.
08:11:32 <elliott> well
08:11:33 <elliott> there is
08:11:36 <elliott> but it's just "F by"
08:11:37 <elliott> for arbitrary f
08:11:39 <elliott> *F
08:11:49 <elliott> and doesn't require any support from the monad
08:11:50 <Sgeo_> My computer's broken battery does piss me off, why do you ask?
08:12:04 <zzo38> Most of the IO stuff in my DVI program is using <*> <* *> <$> although there is sometimes >>= and join as well.
08:12:13 <elliott> Sgeo_: it's not like we can do anything about it.
08:12:43 <Sgeo_> F by?
08:12:58 <zzo38> For guards, sometimes if a result would otherwise be error you can guard it, such as with Maybe monad you can do: x <$ guard (x > 0) and with list monad you can do: guard (condition) >> (list)
08:13:01 <elliott> -- Transform comprehensions
08:13:01 <elliott> D[ e | Q then f, R ] = f D[ Qv | Q ] >>= \Qv -> D[ e | R ]
08:13:01 <elliott> D[ e | Q then f by b, R ] = f (\Qv -> b) D[ Qv | Q ] >>= \Qv -> D[ e | R ]
08:13:12 <zzo38> That is mostly useful of guard, as far as I know.
08:13:26 -!- Sgeo has quit (Ping timeout: 240 seconds).
08:14:43 <zzo38> At least to me, it makes more sense to think of >>= as a convenient shortcut to combine join and fmap together.
08:15:13 <elliott> (>>=) can be justified theoretically by talking about grafting trees, IIRC
08:15:15 <elliott> but I don't recall how
08:15:52 <zzo38> To me it is just that you often want to use join and fmap together.
08:16:09 <zzo38> I don't know about grafting trees or whatever but I would like to know
08:16:49 <elliott> Ask shachaf :D
08:16:59 <kallisti> > let table = [('0',"0"),('1',"1"),('2',"ABC2"),('3',"DEF3"),('4',"GHI4"),('5',"JKL5"),('6',"MNO6"),('7',"PQRS7"),('8',"TUV8"),('9',"WXYZ9"),('0',"0")] in sequence . catMaybes . map (`lookup` table) $ "911"
08:16:59 <shachaf> @slap elliott
08:16:59 * lambdabot is overcome by a sudden desire to hurt elliott
08:17:00 <lambdabot> ["W11","X11","Y11","Z11","911"]
08:17:06 <shachaf> You and I both, lambdabot.
08:17:24 <kallisti> this is apparently a somewhat common job interview question. To take a telephone number and list all of the character expansions or whatever.
08:18:38 <elliott> > let table = [('0',"0"),('1',"1"),('2',"ABC2"),('3',"DEF3"),('4',"GHI4"),('5',"JKL5"),('6',"MNO6"),('7',"PQRS7"),('8',"TUV8"),('9',"WXYZ9"),('0',"0")] in catMaybes . map (`lookup` table) $ "911"
08:18:38 <shachaf> kallisti: You forgot to include an entry for '0'.
08:18:39 <lambdabot> ["WXYZ9","1","1"]
08:18:49 <elliott> ah.
08:18:53 <kallisti> shachaf: no I didn't?
08:19:01 <elliott> > sequence ["abc","def","ghi"]
08:19:02 <lambdabot> ["adg","adh","adi","aeg","aeh","aei","afg","afh","afi","bdg","bdh","bdi","b...
08:19:03 <shachaf> Yes you did.
08:19:05 <elliott> oh, right.
08:19:09 <kallisti> elliott: sequence is awesome.
08:19:11 <kallisti> for lists.
08:19:13 <shachaf> lambdabot needs at least three entries.
08:19:17 <shachaf> Before it takes effect.
08:19:36 <kallisti> wat
08:20:03 <shachaf> let table = [('0',"0")...('0',"0")]
08:20:12 <shachaf> Not enough.
08:20:17 <kallisti> ...oh.
08:20:21 <kallisti> whatever.
08:20:38 <kallisti> it's for extra security.
08:20:47 <kallisti> in case a malicious user recompiles the source and removes the 0 entry.
08:20:55 <kallisti> they'll miss the second one for sure.
08:21:46 -!- Jafet has quit (Ping timeout: 240 seconds).
08:23:37 <elliott> I suppose I'll just install dmenu and dzen.
08:23:57 <elliott> aur/dmenu-path-c 0.1-2 (14)
08:23:57 <elliott> dmenu_path C rewrite. 2-4x faster on cache hits, 10-20x faster on cache misses
08:23:59 <elliott> FINALLY MY MENU IS SO FAST.
08:25:08 <ais523> was it noticeably slow before?
08:25:40 <shachaf> elliott: There's always XPrompt.
08:25:45 <shachaf> I don't like XPrompt much, but I used it.
08:26:53 <kallisti> elliott: the problem is that I'm actually not sure how I would program that in an actual job interview, where they are likely expecting an imperative language or pseudocode.
08:27:09 <elliott> shachaf: Does it support fuzzy matching?
08:27:14 <kallisti> I would guess: for loops. (shocking, yes?)
08:27:45 <shachaf> kallisti: You could always take inspiration from the actual implementation of sequence.
08:27:50 <shachaf> elliott: I have no idea.
08:28:10 <kallisti> shachaf: also the actual implementation of map
08:28:18 <kallisti> that will be my BIG FOR LOOP
08:28:20 <kallisti> THE OUTER ONE
08:28:23 <kallisti> yeaaaah
08:28:26 -!- amca has joined.
08:29:08 <kallisti> actually yeah I see how it would work as pseudocode I just... wouldn't want to write it down
08:30:46 -!- Jafet has joined.
08:34:10 -!- amca has quit (Quit: Farewell).
08:34:31 -!- amca has joined.
08:35:44 <kallisti> > let factor n = do { x <- [2..n]; y <- [2..x]; guard (x * y == n); return [x,y] } in iterate (map factor) [100]
08:35:44 <lambdabot> Occurs check: cannot construct the infinite type: a = [[a]]
08:35:56 <kallisti> oh
08:36:03 <kallisti> > let factor n = do { x <- [2..n]; y <- [2..x]; guard (x * y == n); [x,y] } in iterate (map factor) [100]
08:36:04 <lambdabot> Occurs check: cannot construct the infinite type: a = [a]
08:36:05 -!- Jafet has quit (Read error: Connection reset by peer).
08:36:20 <kallisti> um.
08:36:23 <oerjan> concatMap
08:36:29 <kallisti> oh..
08:36:39 <kallisti> > let factor n = do { x <- [2..n]; y <- [2..x]; guard (x * y == n); [x,y] } in iterate (>>= factor) [100]
08:36:40 <lambdabot> [[100],[10,10,20,5,25,4,50,2],[5,2,5,2,5,4,10,2,5,5,2,2,10,5,25,2],[2,2,5,2...
08:37:00 <kallisti> > let factor n = do { x <- [2..n]; y <- [2..x]; guard (x * y == n); [x,y] } in iterate (nub.(>>= factor)) [100]
08:37:01 <lambdabot> [[100],[10,20,5,25,4,50,2],[5,2,4,10,25],[2,5],[],[],[],[],[],[],[],[],[],[...
08:40:02 -!- Jafet has joined.
08:40:24 <kallisti> oerjan: so you could represent each number as a set of its factors, and then multiplication could be represented with set unions, right?
08:40:38 <oerjan> multiset
08:40:50 <oerjan> and prime factors
08:40:55 <kallisti> x * y = x union y union {x,y}
08:41:08 <kallisti> oh, hmmm
08:41:09 <kallisti> yes.
08:45:11 -!- Sgeo has joined.
08:45:37 -!- Sgeo_ has quit (Read error: Connection reset by peer).
08:45:55 <kallisti> > let factor n = do { x <- [2..n]; y <- [2..x]; guard (x * y == n); [x,y] } in last . takeWhile (not.null) . iterate (>>= factor) [100]
08:45:56 <lambdabot> No instances for (GHC.Num.Num [a], GHC.Enum.Enum [a])
08:45:56 <lambdabot> arising from a use...
08:46:32 <kallisti> :t null
08:46:33 <lambdabot> forall a. [a] -> Bool
08:46:33 <oerjan> needs a $
08:46:42 <kallisti> > let factor n = do { x <- [2..n]; y <- [2..x]; guard (x * y == n); [x,y] } in last . takeWhile (not.null) . iterate (>>= factor) $ [100]
08:46:44 <lambdabot> [2,2,5,2,5,2,5,5]
08:46:46 <elliott> shachaf: I can't believe spawn takes a String. :(
08:46:55 <shachaf> elliott: spawn?
08:47:03 <shachaf> Oh, as in XPrompt. Not kmc's thing.
08:47:10 <shachaf> Well, XPrompt is horrible
08:47:21 <kallisti> > let factor n = do { x <- [2..n]; y <- [2..x]; guard (x * y == n); [x,y] } in map (last . takeWhile (not.null) . iterate (>>= factor)) [1..]
08:47:22 <lambdabot> No instances for (GHC.Num.Num [a], GHC.Enum.Enum [a])
08:47:22 <lambdabot> arising from a use...
08:47:26 <kallisti> lol
08:47:39 <kallisti> > let factor n = do { x <- [2..n]; y <- [2..x]; guard (x * y == n); [x,y] } in map (last . takeWhile (not.null) . iterate (>>= factor) . return) [1..]
08:47:41 <lambdabot> [[1],[2],[3],[2,2],[5],[3,2],[7],[2,2],[3,3],[5,2],[11],[2,2,3,2],[13],[7,2...
08:48:03 <kallisti> oerjan: is there a better way to write that?
08:49:23 <kallisti> oh hmmm those aren't unique. do I need to change y <- [2..x] to y <- [2..n] ?
08:49:56 <kallisti> > let factor n = do { x <- [2..n]; y <- [2..n]; guard (x * y == n); [x,y] } in map (last . takeWhile (not.null) . iterate (>>= factor) . return) [1..]
08:49:57 <lambdabot> [[1],[2],[3],[2,2],[5],[2,3,3,2],[7],[2,2,2,2],[3,3],[2,5,5,2],[11],[2,3,3,...
08:50:13 <kallisti> wonderful
08:51:12 <elliott> shachaf: No, as in XMonad.Core.
08:51:23 <shachaf> elliott: Oh, *that* spawn.
08:51:31 <shachaf> elliott: Well, XMonad is horrible.
08:52:36 <kallisti> oerjan: oh hey that's really obvious why that is.
08:52:50 <oerjan> > let factor n = do { x <- [2..n]; y <- [2..x]; guard (x * y == n); [x] } in map (last . takeWhile (not.null) . iterate (>>= factor) . return) [1..]
08:52:53 <lambdabot> [[1],[2],[3],[2],[5],[3],[7],[2],[3],[5],[11],[2,3],[13],[7],[5],[2],[17],[...
08:52:58 <oerjan> oops
08:53:29 <kallisti> oerjan: stupid irssi
08:53:37 <oerjan> what?
08:53:58 <kallisti> irssi will add a newline to my copypastes even though I SPECIFICALLY TRY TO AVOID THEM
08:54:07 <kallisti> with the result that pasting sends the message when I want to edit it instead.
08:54:08 <oerjan> i know
08:54:20 <kallisti> so... yes, that's why I said that.
08:54:34 <kallisti> oh
08:54:36 <kallisti> nevermind :P
08:54:41 <kallisti> I should like look at things with my eyes.
08:54:46 <kallisti> before I use my brainplaces
08:54:53 <oerjan> good policy
08:56:09 <kallisti> I'm kind of mystified as to why my code returns [1] for 1
08:56:16 <oerjan> this may in any case not be the optimal way to get the prime factors
08:56:17 <kallisti> when the list ranges in factor are [2..n]
08:56:28 <oerjan> kallisti: because the first iterate is []
08:56:36 <shachaf> elliott: Sgeo is calling IO actions impure in #haskell
08:56:49 <kallisti> heresy
08:56:58 <shachaf> Make Sgeo stop.
08:57:03 <shachaf> 08:56 < Sgeo> And I'm assuming everyone knows what I meant by "impure"
08:57:03 <shachaf> 08:56 < Sgeo> I was too lazy to write out the truth
08:57:07 <elliott> shachaf: Well, the actions are.
08:57:09 <elliott> Their existence isn't.
08:57:10 <oerjan> > iterate (const []) [1]
08:57:11 <lambdabot> [[1],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[...
08:57:12 <elliott> Rather, what the actions do is impure.
08:57:21 <elliott> And "getChar reads a character" is accurate, so "getChar is impure" is accurate.
08:57:27 <kallisti> oerjan: oh, nice.
08:57:27 <elliott> But not "Haskell is impure because getChar".
08:57:59 <Sgeo> elliott, I said stuff in which I sloppily used "impure" in a question to indicate value that looks like IO a rather than a
09:00:05 <kallisti> > let factor n = do { x <- [2..n]; y <- [2..n]; guard (x * y == n); [x,y] } in map (length . last . takeWhile (not.null) . iterate (>>= factor) . return) [1..]
09:00:09 <lambdabot> mueval-core: Time limit exceeded
09:00:14 <kallisti> > let factor n = do { x <- [2..n]; y <- [2..n]; guard (x * y == n); [x,y] } in map (length . last . takeWhile (not.null) . iterate (>>= factor) . return) [1..]
09:00:17 <kallisti> try harder
09:00:18 <lambdabot> mueval-core: Time limit exceeded
09:00:21 <kallisti> noooooooo
09:01:06 <oerjan> you might want a nub somewhere, still
09:01:22 <kallisti> for what?
09:01:34 <oerjan> to avoid duplicates
09:01:37 <kallisti> I wanted to uniquely identify each integer as a multiset of prime factors.
09:01:40 <kallisti> so... I did that.
09:01:57 <oerjan> well, it wasn't working, since you didn't get the right number of each previously
09:02:18 <kallisti> I didn't
09:02:19 <kallisti> ?
09:02:36 <kallisti> > let factor n = do { x <- [2..n]; y <- [2..n]; guard (x * y == n); [x,y] } in map (last . takeWhile (not.null) . iterate (>>= factor) . return) [1..]
09:02:38 <lambdabot> [[1],[2],[3],[2,2],[5],[2,3,3,2],[7],[2,2,2,2],[3,3],[2,5,5,2],[11],[2,3,3,...
09:02:40 <kallisti> this isn't right?
09:02:46 <kallisti> it seems pretty right to me.
09:02:46 <oerjan> 6 is wrong
09:02:51 <kallisti> oh, indeed.
09:02:59 <oerjan> 8 and 10 as well
09:03:22 <Sgeo> "Your battery is charging (0%)"
09:03:23 <kallisti> hm
09:03:23 <Sgeo> Lovely
09:05:31 <kallisti> > let factor n = do { x <- [2..n]; y <- [2..x]; guard (x * y == n); [x,y] } in map (last . takeWhile (not.null) . iterate (>>= factor) . return) [1..]
09:05:33 <lambdabot> [[1],[2],[3],[2,2],[5],[3,2],[7],[2,2],[3,3],[5,2],[11],[2,2,3,2],[13],[7,2...
09:05:38 <kallisti> hmmm
09:05:45 <oerjan> 8 and 12 wrong
09:05:53 <kallisti> yes I know.
09:06:01 <kallisti> I'm figuring out where to go from here.
09:06:58 <oerjan> the thing is that you get a mishmash of (1) different factor paths reaching bottom at different speeds (2) different factorizations contributing
09:08:07 <kallisti> hm.
09:08:08 -!- oerjan has quit (Quit: Argh!).
09:09:58 -!- tuubow has quit (Ping timeout: 252 seconds).
09:11:05 -!- zzo38 has quit (Remote host closed the connection).
09:20:47 -!- Jafet has quit (Read error: Connection reset by peer).
09:21:46 <kallisti> elliott: are there any studies comparing code size of Haskell programs in the wild with other languages?
09:22:05 <elliott> probably not
09:22:21 <elliott> there are far too many variables to make such a study worthwhile, anyway
09:22:33 <elliott> not many people clone things feature-for-feature
09:22:46 <kallisti> hmmm, yeah
09:23:05 <shachaf> HASKELL IS MORE BETTER THEN OTHER LANGUAGES
09:23:09 <elliott> kallisti: xmonad core is shorter than dwm (IIRC) and quite a bit more featureful
09:23:13 <shachaf> There, that's all the study you need.
09:23:18 <elliott> (and extensible)
09:23:23 <shachaf> elliott: xmonad core is rather less featureful.
09:23:28 <elliott> shachaf: Than /dwm/?
09:23:29 <shachaf> For example, it don't include a status bar.
09:23:49 <elliott> True. But it has better layouts!
09:23:51 <elliott> And configurable layouts.
09:23:58 <shachaf> It has pretty much the same layouts, I think.
09:24:04 <shachaf> Maybe a bit more.
09:24:13 <kallisti> elliott: I was wonder because in the haskellwiki introduction there this claim:
09:24:18 <shachaf> Anyway, they pretty much gave up on the whole "make it short" thing.
09:24:19 <kallisti> Functional programs tend to be much more concise, shorter by a factor of two to ten usually, than their imperative counterparts.
09:24:26 <elliott> shachaf: Also, it can launch more than two programs or so.
09:24:30 <kallisti> and was wondering if it had any actual basis.
09:24:36 <elliott> (Patching dwm does not count, even if it's what you're meant to do.)
09:24:42 <elliott> (At least not until dwm(1) recompiles itself.)
09:24:49 <shachaf> "Haskell superior to all other programming languages", reports Haskell Wiki.
09:25:04 <elliott> kallisti: Certainly. 10x is a bit ridiculous, though.
09:25:09 <shachaf> elliott: xmonad pretty much recompiles itself.
09:25:13 <shachaf> It's a horrible thing.
09:25:18 <elliott> shachaf: Yes, but automatically.
09:25:30 <elliott> shachaf: Also not really, it doesn't recompile the xmonad library.
09:25:34 <shachaf> zomg automatic
09:25:45 <kallisti> elliott: but is there like some source I can cite to win internet arguments? this is the important part.
09:26:00 <monqy> internet arguments?
09:26:05 -!- Jafet has joined.
09:26:08 <shachaf> The way to win Internet arguments is to declare yourself the victor and ignore everyone else.
09:26:14 <shachaf> Jafet: Isn't that right?
09:26:20 <shachaf> `welcome Jafet
09:26:28 <HackEgo> Jafet: Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: http://esolangs.org/wiki/Main_Page
09:26:43 <elliott> kallisti: haskell.org/haskellwiki
09:26:45 <Sgeo> Because Jafet's never been here before.
09:26:53 <kallisti> elliott: harr harr
09:26:55 <elliott> Sgeo: you don't complain when ais523 does it
09:27:12 <Sgeo> I may not have noticed ais523 doing it
09:27:17 <elliott> And shachaf even _knows_ Jafet has been here before!
09:27:26 <shachaf> I do?
09:27:34 <Sgeo> Now he does, if he didn't.
09:27:42 <Sgeo> Or even if he did, well, now he does.
09:27:47 <elliott> shachaf: Well, presumably.
09:27:48 <shachaf> Maybe I confused Jafet with JaffaCakes!
09:28:00 <Sgeo> I didn't strictly need to say that second sentence.
09:28:15 <monqy> indeed, sgeo
09:28:17 <shachaf> Or the second half of the first.
09:28:22 <monqy> or anything
09:28:25 <shachaf> In fact, you didn't strictly need to say anything at all.
09:28:26 <monqy> at all / ever
09:28:29 <monqy> hi
09:28:45 <ais523> `? welcome
09:28:48 <HackEgo> Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: http://esolangs.org/wiki/Main_Page
09:28:53 <monqy> hi
09:29:08 <ais523> I don't do it quite the same way Sgeo does
09:29:13 <shachaf> `welcome `welcome
09:29:16 <HackEgo> ​`welcome: Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: http://esolangs.org/wiki/Main_Page
09:29:21 <ais523> I just generically send a welcome to the whole channel at random now and again
09:29:44 <ais523> `log welcome
09:30:13 <HackEgo> 2011-08-30.txt:14:27:40: <Gregor> Welcome to an obsessive waste of years of your life 8-D
09:30:15 <shachaf> `log tervetuloa
09:30:26 <HackEgo> 2011-04-25.txt:18:39:52: <tswett> Tervetuloa vittu.
09:31:27 <ais523> `cat bin/log
09:31:29 <HackEgo> ​#!/bin/sh \ cd /var/irclogs/_esoteric \ if [ "$1" ]; then \ grep -P -i -- "$1" ????-??-??.txt | shuf -n 1 \ else \ file=$(shuf -en 1 ????-??-??.txt) \ echo "$file:$(shuf -n 1 $file)" \ fi \
09:31:37 <elliott> `welcome `log
09:31:40 <HackEgo> ​`log: Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: http://esolangs.org/wiki/Main_Page
09:31:45 <elliott> we love you `log
09:31:54 <ais523> hmm, what would be useful: a `pastlog that's like `log except ignores today
09:32:07 <Sgeo> `log PSOX
09:32:08 <ais523> to see when the current topic of conversation happened previously
09:32:12 <HackEgo> 2007-08-26.txt:02:22:41: <pikhq> Sgeo: The PSOX spec is very, very nice. . .
09:32:19 <elliott> -- nobody, eve
09:32:20 <elliott> r
09:32:29 <elliott> (the joke is psox)
09:32:40 <elliott> ais523: That would be fun, but I'm too lazy to write it.
09:32:54 <ais523> you'd just have to replace ????-??-??.txt with `ls -1 ????-??-??.txt | head -n-1`
09:33:12 <ais523> making use of the date sort order
09:33:44 <Sgeo> I wonder if that was before I messed with the spec
09:34:02 <ais523> `cp bin/log bin/pastlog
09:34:04 <Sgeo> I don't think that an August copy of the spec matches the current one
09:34:04 <HackEgo> cp: missing destination file operand after `bin/log bin/pastlog' \ Try `cp --help' for more information.
09:34:04 <elliott> ais523: I'd rather factor it out so that `log optionally takes a list of filenames
09:34:10 <elliott> ais523: oh, I'll do it
09:34:16 <elliott> if only so I don't have to watch you try to remember how HackEgo works...
09:34:23 <ais523> heh, trying to do something yourself is a good way to make elliott do it
09:34:25 <elliott> `url bin/log
09:34:27 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/bin/log
09:35:53 <elliott> `fetch http://sprunge.us/ZWJE
09:35:55 <HackEgo> 2011-12-20 09:35:55 URL:http://sprunge.us/ZWJE [217] -> "ZWJE" [1]
09:36:01 <elliott> `run mv ZWJE bin/log; chmod +x bin/log
09:36:02 <elliott> first check:
09:36:03 <HackEgo> No output.
09:36:05 <elliott> `log
09:36:07 <HackEgo> shift: 4: can't shift that many
09:36:09 <elliott> `log abracadabra
09:36:16 <HackEgo> 2010-10-19.txt:02:36:52: <catseye> Idea: create tarball of 1,024 files, each named "abracadabra" but with different capitalization. Distribute to friends who use case-insensitive file systems.
09:36:20 <elliott> CLOSE ENOUGH
09:36:55 <elliott> `fetch http://sprunge.us/CKIF
09:36:57 <HackEgo> 2011-12-20 09:36:57 URL:http://sprunge.us/CKIF [232] -> "CKIF" [1]
09:37:00 <elliott> `run mv CKIF bin/log; chmod +x bin/log
09:37:03 <HackEgo> No output.
09:37:04 <elliott> `log
09:37:20 * elliott thumbtwiddles.
09:37:37 <HackEgo> No output.
09:37:48 <elliott> :/
09:38:03 <ais523> `log concept
09:38:19 <ais523> just wondering if you'd screwed up one or both branches of the if
09:38:25 <elliott> gee, thanks :P
09:38:34 <HackEgo> No output.
09:38:38 <elliott> `revert a bunch
09:38:40 <HackEgo> abort: unknown revision 'a bunch'!
09:38:42 <elliott> `help
09:38:43 <HackEgo> Runs arbitrary code in GNU/Linux. Type "`<command>", or "`run <command>" for full shell commands. "`fetch <URL>" downloads files. Files saved to $PWD are persistent, and $PWD/bin is in $PATH. $PWD is a mercurial repository, "`revert <rev>" can be used to revert to a revision. See http://codu.org/projects/hackbot/fshg/
09:38:48 <shachaf> `revert 1
09:38:50 <HackEgo> Done.
09:38:52 <shachaf> `ls
09:38:55 <HackEgo> babies \ bin \ bluhbluh \ canary \ env \ foo \ paste \ ps \ quine.pl \ quine2.pl \ quine3.pl \ quotes \ quotese \ tekst \ test.c \ tmp.tmp
09:38:56 <elliott> `revert 1305
09:38:59 <HackEgo> Done.
09:39:00 <shachaf> `revert 1
09:39:02 <HackEgo> Done.
09:39:02 <elliott> shachaf: fuck off
09:39:03 <elliott> `revert 1305
09:39:08 <HackEgo> Done.
09:39:09 <elliott> `run cp bin/log bin/pastlog
09:39:10 <ais523> shachaf: 1 is not a good revision
09:39:10 <shachaf> I just want to look!
09:39:13 <HackEgo> No output.
09:39:16 <elliott> shachaf: http://codu.org/projects/hackbot/fshg/
09:39:37 <ais523> I'm glad that `revert can be so easily reverted, at least
09:39:41 <elliott> ais523: hmm, does bash have any way to express "every argument after $1"?
09:39:45 <elliott> it really needs it
09:39:57 <ais523> elliott: it has shift
09:39:59 <shachaf> elliott: How do I revision 1?
09:40:02 <shachaf> `revert 0
09:40:03 <ais523> which renumbers all the arguments by 1
09:40:04 <HackEgo> Done.
09:40:05 <shachaf> `run ls -l babies
09:40:08 <HackEgo> ls: cannot access babies: No such file or directory
09:40:11 <shachaf> `ls
09:40:13 <HackEgo> babies \ bin \ bluhbluh \ canary \ env \ foo \ paste \ ps \ quine.pl \ quine2.pl \ quine3.pl \ quotes \ quotese \ tekst \ test.c \ tmp.tmp
09:40:17 <shachaf> `cat babies
09:40:19 <HackEgo> cat: babies: Is a directory
09:40:22 <shachaf> `ls babies
09:40:23 <elliott> `revert 1305
09:40:25 <HackEgo> babies.db
09:40:44 <HackEgo> Done.
09:41:26 <elliott> shachaf: I was trying to link you, but fshg is slow.
09:41:27 <shachaf> elliott: I noticed this.
09:41:32 <ais523> I guess you could use some combination of shift and $*/$@
09:42:12 <elliott> shachaf: http://codu.org/projects/hackbot/fshg/index.cgi/rev/91b847686710
09:42:20 <elliott> ais523: that's the ugly thing :P but fiine
09:42:24 <fizzie> There was some bashy thing with positional arguments and a 'shift', except the shift actually rotated the arguments instead of throwing one out.
09:43:11 <elliott> `fetch http://codu.org/projects/hackbot/fshg/index.cgi/rev/91b847686710
09:43:12 <elliott> argh
09:43:13 <ais523> elliott: what's your favourite imperative language?
09:43:19 <elliott> `fetch http://sprunge.us/Sgeb
09:43:24 <HackEgo> 2011-12-20 09:43:24 URL:http://sprunge.us/Sgeb [104] -> "Sgeb" [1]
09:43:26 <elliott> `run mv Sgeb bin/pastlog; chmod +x bin/pastlog
09:43:29 <elliott> Sgeb, Sgeo's long-lost cousin
09:43:42 <HackEgo> mv: cannot stat `Sgeb': No such file or directory \ chmod: cannot access `bin/pastlog': No such file or directory
09:43:44 <elliott> ais523: Haskell. :p
09:43:54 <elliott> It's one of the only languages with first-class imperative programs.
09:44:00 <elliott> `run mv Sgeb bin/pastlog; chmod +x bin/pastlog
09:44:02 <shachaf> elliott: Not @?
09:44:05 <HackEgo> No output.
09:44:07 <elliott> shachaf: @ is declarative, man.
09:44:15 <elliott> `pastlog Nobody has ever said this sdiofjsodfjsdf before
09:44:24 <shachaf> You mean Haskell has better support for imperative programming than @?
09:44:38 <fizzie> Also it has such a thing already:
09:44:39 <elliott> shachaf: Like C has better support for crashing.
09:44:42 <fizzie> $ function echo2nd() { echo ${@:2}; }; echo2nd foo bar baz quux
09:44:42 <fizzie> bar baz quux
09:44:44 <fizzie> elliott^
09:44:45 <HackEgo> 2011-12-20.txt:09:44:15: <elliott> `pastlog Nobody has ever said this sdiofjsodfjsdf before
09:44:48 <elliott> fizzie: Too late, already rewrote!
09:44:55 <elliott> ais523: AS YOU CAN SEE IT WORKS PERFECTLY
09:45:00 <ais523> heh
09:45:01 <fizzie> Well, ais523^ in that case, for future.
09:45:02 <elliott> `run sed -i 's/+1/+2/g' bin/pastlog
09:45:04 <HackEgo> No output.
09:45:06 <elliott> `pastlog Nobody has ever said this sdiofjsodfjsdf before
09:45:12 <HackEgo> 2011-12-20.txt:09:44:15: <elliott> `pastlog Nobody has ever said this sdiofjsodfjsdf before
09:45:21 <elliott> fizzie: Incidentally, "elliott^" doesn't highlight me.
09:45:35 <elliott> oh wait
09:45:38 <fizzie> Yeah, I don't really know what the standard posthumous attribution syntax is.
09:45:43 <ais523> elliott: don't you mean head -n -1?
09:45:47 <elliott> `run sed -i 's/tail/head/g' bin/pastlog
09:45:50 <HackEgo> No output.
09:45:54 <elliott> ais523: I, um, don't think that does anything.
09:45:57 <elliott> err
09:45:59 <ais523> I have man head open
09:46:03 <ais523> -1 means all but the last line
09:46:07 <elliott> fair enough
09:46:15 <elliott> `run sed -i 's/head -n +1/head -n -1/g' bin/pastlog
09:46:17 <HackEgo> No output.
09:46:21 <elliott> `pastlog Nobody has ever said this sdiofjsodfjsdf before
09:46:27 <HackEgo> 2011-12-20.txt:09:46:21: <elliott> `pastlog Nobody has ever said this sdiofjsodfjsdf before
09:46:35 <elliott> `cat bin/pastlog
09:46:37 <HackEgo> ​#!/bin/sh \ cd /var/irclogs/_esoteric \ grep -P -i -- "$1" $(echo ????-??-??.txt | head -n +2) | shuf -n 1 \
09:46:40 <shachaf> `cat bin/pastelog
09:46:43 <HackEgo> ​#!/bin/sh \ cd /var/irclogs/_esoteric \ \ pasterandom() { \ if [ "$1" -gt 150 ]; then \ echo "No." \ exit \ fi \ for i in $(seq "$1"); do \ file=$(shuf -en 1 ????-??-??.txt) \ echo "$file:$(shuf -n 1 $file)" \ done | paste \ } \ \ if [ "$1" ]; then \ if expr "$1" + 0 >/dev/null 2>&1; then \ pasterandom "$1" \ else \ lines=$(grep -P -i -- "$1"
09:46:44 <shachaf> `cat bin pasteelog
09:46:46 <elliott> `run sed -i 's/head -n +2/head -n -1/g' bin/pastlog
09:46:47 <HackEgo> cat: bin pasteelog: No such file or directory
09:46:49 <HackEgo> No output.
09:46:52 <elliott> ais523: The problem with Unix is that it isn't declarative. :(
09:47:01 <shachaf> `run echo run | s/run/run/
09:47:02 <elliott> One of my imperative writes clashed with the other and it failed silently!
09:47:04 <HackEgo> bash: s/run/run/: No such file or directory
09:47:05 <shachaf> `run echo run | sed s/run/run/
09:47:07 <ais523> that's a pretty declarative program
09:47:08 <HackEgo> run
09:47:12 * shachaf >>=>= sleep
09:47:16 <elliott> ais523: I was talking about my edits.
09:47:17 <elliott> <elliott> `run sed -i 's/head -n +1/head -n -1/g' bin/pastlog
09:47:21 <ais523> yes, I nkow
09:47:23 <ais523> *know
09:47:24 <elliott> This imperative edit failed because of a previous one.
09:47:34 <elliott> It could be fixed by reversing the order.
09:47:38 <ais523> but wouldn't a declarative edit just merge-conflict?
09:47:41 <elliott> That's like the definition of imperative over declarative.
09:47:45 <ais523> in that situation?
09:47:59 <elliott> ais523: Depends how you define "edit".
09:48:06 <ais523> sg definition
09:48:14 <elliott> I said, depends on how you define "edit".
09:48:21 <elliott> I wasn't asking for definitions where it is true, I can think of plenty.
09:48:31 <elliott> ais523: My point was that I was defining what to /do/ to get the file I wanted, rather than specifying what the file I wanted /was/.
09:48:37 <elliott> Anyway,
09:48:46 <elliott> `pastlog Nobody has ever said this sdiofjsodfjsdf before
09:49:16 <elliott> wow,
09:49:16 <elliott> <oerjan> addquote <Vorpal> elliott_, oh they are people known in the ruby community? <elliott_> Vorpal: Uh... you mean Hannah Montana? <Vorpal> elliott_, yeah. And Zed Shaw. Either they are that or they come from popular culture.
09:49:18 <HackEgo> No output.
09:49:19 <elliott> was 4 months ago
09:49:21 <elliott> `pastlog rabies
09:49:28 <elliott> oh, hmm
09:49:32 <elliott> ais523: you wanted the most recent occurrence, right?
09:49:33 <elliott> before today
09:49:53 <HackEgo> No output.
09:49:57 <ais523> no, random occurrence before today
09:50:01 <ais523> `pastlog INTERCAL
09:50:03 <elliott> ais523: umm
09:50:07 <elliott> ais523: that doesn't fit your stated use at all.
09:50:20 <ais523> my stated use is to find other conversations about the current topic
09:50:27 <ais523> random is better than recent as it can find more than one
09:50:32 <HackEgo> No output.
09:50:48 <ais523> pastlog doesn't seem to be outputting anything now, anyway
09:50:52 <ais523> `cat bin/pastlog
09:50:55 <HackEgo> ​#!/bin/sh \ cd /var/irclogs/_esoteric \ grep -P -i -- "$1" $(echo ????-??-??.txt | head -n -1) | shuf -n 1 \
09:51:00 <fizzie> Or maybe no-one has ever talked about INTERCAL before.
09:51:03 <fizzie> You never know.
09:51:40 <ais523> `ls
09:51:42 <HackEgo> bin \ canary \ karma \ lib \ paste \ quotes \ share \ wisdom
09:51:49 <ais523> `cmd ls | head -n -1
09:51:52 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: cmd: not found
09:51:56 <ais523> `run ls | head -n -1
09:51:58 <HackEgo> bin \ canary \ karma \ lib \ paste \ quotes \ share
09:52:07 <ais523> elliott: aha, you're using echo not ls
09:52:16 <ais523> echo outputs space-separated not newline-separated
09:52:22 <ais523> so you're taking all but the last line, which is also the first line
09:52:29 <elliott> "Fix a bug in 1 minute. Win $100." this, umm, sounds too good to be true
09:52:30 <elliott> ais523: Oh
09:52:37 <elliott> `run sed -i 's/echo/ls/g' bin/lastlog
09:52:40 <HackEgo> sed: can't read bin/lastlog: No such file or directory
09:52:42 <elliott> `run sed -i 's/echo/ls/g' bin/pastlog
09:52:45 <HackEgo> No output.
09:52:46 <elliott> `pastlog death
09:53:18 <HackEgo> No output.
09:53:41 <elliott> ais523: or there's some other bug.
09:53:42 <ais523> `cat bin/pastlog
09:53:44 <HackEgo> ​#!/bin/sh \ cd /var/irclogs/_esoteric \ grep -P -i -- "$1" $(ls ????-??-??.txt | head -n -1) | shuf -n 1 \
09:53:51 <ais523> elliott: perhaps that's and, rather than or?
09:54:26 <ais523> `run cd /var/irclogs/_esoteric; ls ????-??-??.txt | head -n -1
09:54:29 <HackEgo> 2003-01-18.txt \ 2003-01-19.txt \ 2003-01-20.txt \ 2003-01-21.txt \ 2003-01-22.txt \ 2003-01-23.txt \ 2003-01-24.txt \ 2003-01-25.txt \ 2003-01-26.txt \ 2003-01-27.txt \ 2003-01-28.txt \ 2003-01-29.txt \ 2003-01-30.txt \ 2003-01-31.txt \ 2003-02-01.txt \ 2003-02-02.txt \ 2003-02-03.txt \ 2003-02-04.txt \ 2003-02-05.txt \ 2003-02-06.txt \ 2003-02-07.txt \ 2003-02-08.txt \ 2003-02-09.txt \ 2003-02-10.txt \ 2003-02-11.txt
09:54:41 <ais523> ah, OK, just wondering if using ls rather than echo was making it too slow
09:56:59 <elliott> ais523: And rather than or?
09:57:14 <elliott> Oh, right.
09:57:18 <elliott> Well, that's what I meant.
09:59:15 * elliott really likes http://blog.ezyang.com/2011/12/bugs-and-battleships/.
09:59:23 <elliott> Mostly because of the pretty pictures.
09:59:25 <kallisti> > let factors n=filter((==n).product)$(`replicateM`[2..n`div`2])=<<[1..n`div`2-1] in factors 10
09:59:26 <lambdabot> [[2,5],[5,2]]
09:59:31 <kallisti> > let factors n=filter((==n).product)$(`replicateM`[2..n`div`2])=<<[1..n`div`2-1] in factors 8
09:59:32 <lambdabot> [[2,4],[4,2],[2,2,2]]
09:59:44 <kallisti> so inefficient..
10:00:05 -!- Ngevd has joined.
10:00:10 <Ngevd> Hello!
10:00:43 <fizzie> `pastlog death
10:00:50 <HackEgo> 2011-04-15.txt:22:06:45: <elliott> I'd only consider immortality to be true immortality if it involved the heat death of the universe being prevented, anyway :P
10:00:54 <fizzie> I didn't even touch it or anything.
10:01:01 <elliott> Oh
10:01:06 <elliott> HackEgo race condition, I bet
10:01:11 <elliott> `pastlog Nobody has ever lskksdfkdjslfd in a sjdkl
10:01:12 <elliott> df
10:01:18 <HackEgo> No output.
10:01:37 <fizzie> Some of my friends lskksdfkdjslfd in their sjdkls all the time.
10:01:48 <elliott> fizzie: Delinquents!
10:05:43 <elliott> 01:03:47: <Sgeo> Are there current politicians saying that Islam is dangerous and needs to be destroyed?
10:05:44 <elliott> 01:03:55: <Sgeo> I think no politician would be that stupid
10:05:44 <elliott> 01:03:56: <Sgeo> I hope
10:07:56 -!- cheater has joined.
10:07:56 -!- cheater has quit (Excess Flood).
10:08:03 <fizzie> ISLAM IS THE LIGHT --Nintendo DS Baby Pals
10:09:04 <Sgeo> WTF at computer
10:09:43 <fizzie> Also why did the first result I found (when trying to check the name of the game) be a blog where the author in all seriousness writes stuff like "no-one seems to care that dolls and games are being used to propagandize American kids" and "Islam is not the light. It’s very dark darkness. As anyone with a brain knows."
10:11:07 <Sgeo> Anyone have a metaphorical light switch I can borrow?
10:11:18 <Sgeo> To turn on and off all these metaphorical lights?
10:11:27 <fizzie> Or is this "Debbie Schlussel" persona some sort of satire or what?
10:11:48 <elliott> Debbie Schlussel: About Debbie
10:11:48 <elliott> www.debbieschlussel.com/bio/
10:11:48 <elliott> DEBBIE SCHLUSSEL: Conservative political commentator, radio talk show host, columnist, and attorney. Schlussel's unique expertise on radical Islam/Islamic ...
10:11:55 <Sgeo> I've heard of her
10:11:56 <elliott> It's America, of course not.
10:12:01 <elliott> http://en.wikipedia.org/wiki/Debbie_Schlussel
10:12:11 <elliott> [[Debbie Schlussel (born April 9, 1969) is an American attorney, film critic, political commentator, and a conservative blogger who focuses particularly on Islam and American Muslims. Her writing frequently targets the largely Muslim population of the Detroit suburb of Dearborn, which she refers to as "Dearbornistan".[1] Her columns are often provocative and controversial, specifically those detailing what she considers the unsavory elements of I
10:12:12 <elliott> slam, the objectionable activities of American Muslims, illegal immigrants, as well as liberal and “faux-conservative” politicians.]]
10:12:14 <elliott> What a horrible person.
10:12:25 <Sgeo> I once wrote an UnNews article about a proof that atheists are Muslims, then someone linked a Debbie Schussel post
10:12:25 <ais523> `pastlog chronomaniac
10:12:33 <HackEgo> No output.
10:12:38 <ais523> pity, it's a great word
10:12:43 <elliott> UnNews! That might be the only thing worse than Uncyclopedia.
10:12:47 <fizzie> Dearborn is a fancy name for a place, though.
10:12:58 <elliott> http://atlasshrugs2000.typepad.com/atlas_shrugs/2009/01/first-baby-dollie-now-nintendo-game-islam-is-the-light.html
10:13:05 <elliott> atlasshrugs2000; what could go wrong with a domain name like that?
10:13:17 <elliott> Ooh, the post-American presidency.
10:13:24 <elliott> Obama declared the country Obamastan or something.
10:13:32 <Sgeo> elliott, would it please you to know that I wrote UnNews articles?
10:13:34 <elliott> "This is unbelievable ........... and of course they will tell us that we are imagining it but notice how it is always baby toys. Subliminal messages.
10:13:34 <elliott> Always baby toys."
10:13:36 <elliott> Always baby toys.
10:13:48 <elliott> Sgeo: You already said that.
10:14:14 <elliott> fizzie: So what do you use for piping into dzen?
10:14:42 <fizzie> Didn't you already take a look at my horrible dbus thing?
10:15:04 <Sgeo> Aww, my atheists are muslims article was deleted
10:15:21 <Sgeo> My others weren't though
10:15:22 <Sgeo> http://uncyclopedia.wikia.com/wiki/User:Sgeo
10:15:39 <elliott> fizzie: That's just piping dzen to xmonad, isn't it?
10:15:56 <elliott> http://sgeo.diagonalfish.net/screenshots/windeath/drivecleaner/
10:15:56 <elliott> rip
10:16:06 <monqy> "Pictures of Windows 98 in various compromising positions.." - sgeo
10:16:13 <monqy> "HOT HOT HOT Pictures of DriveCleaner 2006 EXPOSED!" - sgeo
10:16:19 <ais523> "please try not to refrain from electric heaters to reduce to risk of fire"
10:16:23 <elliott> http://images4.wikia.nocookie.net/__cb20061209215706/uncyclopedia/images/9/99/Win98-start-menu.PNG -sgeo
10:16:27 <ais523> err, what does that mean?
10:16:35 <elliott> ais523: Please try not to refrain from electric heaters to reduce to risk of fire.
10:16:43 <fizzie> elliott: No, it handles both the dzen stdin and stdout. (It gets window-title/workspace/whatever status reports from XMonad's logHook via dbus, and writes those -- properly formatted -- into dzen's stdin; and it reads dzen's stdout and sends suitable client-messages to XMonad for the workspace switching.)
10:16:52 <ais523> elliott: in terms I understand?
10:17:02 <Sgeo> elliott, IE6 fixes that somehow.
10:17:31 <elliott> ais523: Well that might be harder.
10:17:36 <elliott> fizzie: Ah.
10:17:46 <elliott> fizzie: Why dbus, for the love of all that is holy?
10:17:57 <Sgeo> http://www.debbieschlussel.com/2977/when-atheists-aka-future-muslims-attack/
10:20:09 <elliott> "raised by his hippie Jewish father and equally bizarre gentile mother as an atheist. And look how he turned out. Ditto for hippie-spawn John Walker Lindh."
10:20:16 <elliott> This isn't even funny, it's just terrible.
10:20:43 <kallisti> what would be a better solution to finding every possible factorization of a number than what I currently do?
10:21:00 <fizzie> elliott: Well, you know, it was already running; and it sort of disentangles the parts, in that things don't get confuzzled when either XMonad or the dzen2-updater goes away. Unnamed pipes started from xmonad.hs directly are a bit brittle; broken pipes are the #1 reason for a frozen XMonad.
10:21:09 <fizzie> Cf. http://www.haskell.org/haskellwiki/Xmonad/Frequently_asked_questions#XMonad_is_frozen.21
10:21:32 <kallisti> > let factors n = filter ((==n).product) $ (`replicateM`[2..n`div`2]) =<< [1..n`div`2-1] in factors 10
10:21:33 <lambdabot> [[2,5],[5,2]]
10:22:12 <kallisti> it's very very bruteforce, O(n!) growth I believe.
10:22:14 <elliott> fizzie: You've said that #1 reason thing to me before, yesterday. :p
10:22:24 <elliott> kallisti: You realise finding prime factors is not really a fast thing.
10:22:36 <kallisti> yes
10:22:41 <kallisti> also this is any-factors
10:22:42 <elliott> fizzie: But, uh, you can easily make pipes reliable.
10:22:48 <elliott> kallisti: *all
10:22:50 <kallisti> > let factors n = filter ((==n).product) $ (`replicateM`[2..n`div`2]) =<< [1..n`div`2-1] in factors 12
10:22:52 <lambdabot> [[2,6],[3,4],[4,3],[6,2],[2,2,3],[2,3,2],[3,2,2]]
10:22:59 <elliott> fizzie: I mean, without resorting to /dbus/ of all things.
10:23:02 <Sgeo> http://mirror.uncyc.org/wiki/UnNews:All_atheists_proven_to_be_Muslims
10:23:45 <monqy> thanks
10:24:15 <elliott> Sgeo: that's the least funny thing i've ever read.
10:25:05 <Sgeo> Is http://uncyclopedia.wikia.com/wiki/UnNews:Scientists_baffled_by_missing_energy_source any better?
10:25:13 <elliott> let me check
10:25:18 <elliott> no
10:26:13 <elliott> fizzie: Also, I find the inconsistent capitalisation of xmonad distasteful. :(
10:26:37 <elliott> fizzie: What svn revision of dzen are you on?
10:26:45 <monqy> http://mirror.uncyc.org/wiki/UnNews_talk:All_atheists_proven_to_be_Muslims
10:27:02 <fizzie> 271, apparently.
10:27:45 <elliott> 7 aur/dzen2-svn 271-3 (91)
10:27:45 <elliott> X notification utility with Xinerama and XMP support, svn version
10:27:45 <elliott> 8 aur/dzen2-xft-xpm-xinerama-svn 271-1 (78)
10:27:45 <elliott> X notification utility with Xinerama, XPM, XFT and gadgets, svn version
10:27:49 <monqy> sgeo how could you do this
10:27:51 <monqy> this is awful
10:27:54 <elliott> This is so upsetting ;__; how can I install that one
10:27:57 <elliott> the package nam
10:27:58 <elliott> eis so long
10:28:09 <elliott> Comment by: system on Wed, 07 Apr 2010 16:02:51 +0000
10:28:10 <elliott> Package disowned.
10:28:11 <elliott> oh noooooooooooooooooo
10:28:21 <Sgeo> monqy, how could I do what?
10:28:27 <Sgeo> Respond to an idiot on a talk page?
10:28:29 <fizzie> It's the "I have no son" of packages.
10:28:34 <monqy> make the article
10:28:39 <monqy> the other one too
10:28:42 <elliott> oh dzen2-svn does xft
10:28:53 <Sgeo> They're based off FSTDT quotes
10:28:56 <elliott> monqy: btw i use yaourt now
10:29:01 <elliott> Sgeo: see the thing is
10:29:03 <monqy> elliott: wow me too
10:29:06 <elliott> religious people saying stupid things: maybe funny
10:29:22 <monqy> i never bothered switching at all ;_;
10:29:31 <elliott> making a bad unfunny news article that amounts to "<dumb thing religious person said>": not funny
10:30:46 <monqy> what if it was narrated by the cast of station v3
10:31:05 <monqy> they're lovable right
10:31:17 <elliott> fizzie: Eeeeeeeww, most dzen2 things update the thing every second even if you don't have a clock?
10:31:35 <fizzie> I haven't really looked at most dzen2 things.
10:31:36 <elliott> Heck, even every second is terrible; even with a clock, you should adjust the wait depending on how far off you are from the second change each time.
10:31:44 <shachaf> elliott: Just write a thing that multiplexes different events and updates it on events.
10:31:44 <elliott> Does your thing do a clock more sanerly?
10:31:50 <elliott> shachaf: FRPzen2
10:31:51 <fizzie> I don't have a clock.
10:32:01 <elliott> fizzie: THEN HOW DO YOU KNOW WHAT TIME IT IS
10:32:09 <shachaf> elliott makes a good point.
10:32:20 <elliott> shachaf: So you're sleeping now?
10:32:23 <shachaf> elliott: No, just imperazen2 with a bunch of threads or something.
10:32:30 -!- Sgeo_ has joined.
10:32:33 <shachaf> elliott: Yes.
10:32:39 <Sgeo_> The joys of not having a laptop battery
10:32:41 <Sgeo_> >:(
10:32:42 <elliott> shachaf: But that's imperative!
10:32:47 <fizzie> I literally don't have any dwigglets in the dzen2; just list of workspaces, a single layout indicator that I don't really use and am not sure why it's there, and the window title. I do know lots of people put everything and the kitchen sink in their dzens, though.
10:32:56 -!- Sgeo has quit (Read error: Connection reset by peer).
10:32:56 <fizzie> Actually it appears I do have a clock, in the gnome-panel. :p
10:32:59 <elliott> I think Sgeo might not have a laptop battery.
10:33:03 <kallisti> ais523: did you invent golfscript or did you just put it on the wiki?
10:33:13 <elliott> ais523 invented golfscript, water, and Perl.\
10:33:15 <shachaf> elliott: It's 02:32.
10:33:16 <elliott> **
10:33:20 <ais523> I didn't invent golfscript
10:33:21 <elliott> That replaced the \ with a *.
10:33:22 <elliott> *
10:33:23 <elliott> Now it's gone.
10:33:28 <kallisti> ais523: do you know who did?
10:33:30 * shachaf invented Golf.
10:33:30 <ais523> in fact, I don't even remember putting it on the wiki, but it wouldn't surprise me if I did
10:33:37 <kallisti> do they freqent this channel?
10:33:40 <ais523> kallisti: no; but it has a website, that might mention it
10:33:45 <ais523> I don't think they frequent here
10:33:52 <kallisti> not that I've found.
10:33:56 <elliott> fizzie: All I want is a clock, a workspace switcher, and maybe something that shows libnotify notifications as they come in.
10:34:05 <fizzie> DIY DIY DIY DIY
10:34:13 <elliott> fizzie: And, um... I think that might be it?
10:34:19 <elliott> fizzie: Also, are you encouraging my NIHing.
10:34:22 <monqy> workspace switcheR?
10:34:24 <ais523> zzo38 invented his own version FlogScript, which has beaten GolfScript in many golfing puzzles where people have seriously tried in both
10:34:48 <elliott> monqy: Yes, to (a) show workspaces with blinky windows and (b) let me switch when I'm in Mouse Mode.
10:35:04 <monqy> blinky windows D: / mouse mode D:
10:35:13 <elliott> monqy: Blinky windows aka "urgent windows".
10:35:16 <elliott> Aka "unread IRC messages".
10:35:29 <monqy> oh that sort of blinky windows
10:35:36 <fizzie> Yes. But are you sure you don't want a network traffic meter and a CPU fan RPM indicator and a combined weather/stock ticker and a relative humidity-o-meter and a swimming fish and a set of eyes?
10:35:39 <monqy> one time I tried learning flogscript but then gave up
10:36:00 <elliott> fizzie: I just can't be satisfied with my panel unless it changes every second!
10:36:04 <elliott> (I use minute-precision clocks.)
10:36:11 <elliott> fizzie: Does dzen2 do tooltips?
10:36:15 <elliott> I like to have the date as a tooltip of my clock.
10:36:44 <fizzie> Actually I think it doesn't. :/
10:36:47 * shachaf wonders whether elliott is joking.
10:36:54 <elliott> Oh well.
10:36:57 <elliott> shachaf: About what?
10:37:02 <shachaf> Tool tips.
10:37:09 <elliott> Nope.
10:37:14 <elliott> I'm used to it, and only need the date infrequently.
10:37:53 <shachaf> Just make your font size smaller.
10:38:13 <elliott> I have plenty of screen space, it's just ugly to have a date on it.
10:39:00 <fizzie> You could sorta-fake it with the enter/exit events (toggling the slave window visible/not, or something), except I think those are also only for the whole title (i.e. panel) window, not specifically for the clickable areas it supports.
10:39:17 <fizzie> But! You can make the clock clickable, and upon clicking, have it speech-synthesize the current date out of your speakers.
10:39:22 <elliott> Awwww yeah
10:39:29 <fizzie> Then it only takes up audible screen estate, if such were a thing.
10:40:11 <Ngevd> Could I set the speech synthesis to Christopher Lee mode?
10:40:17 <elliott> fizzie: If only speech recognition was/will ever be good enough to turn the output of that back into text.
10:40:20 <elliott> Then it might actually be useful.
10:40:42 <shachaf> Turn the output of that back into text AND DISPLAY IT IN A TOOLTIP.
10:40:54 <shachaf> elliott: Anyway, speech recognition is plenty good enough to turn a spoken date into text.
10:41:09 <fizzie> Yes, it's just a speech recognition dig. It's what elliott does.
10:41:19 <fizzie> The aim is to make my head asplode one day.
10:41:27 <fizzie> (Which will happen completely without warning.)
10:41:30 <shachaf> fizzie: Do you do speech recognition?
10:41:33 <elliott> Yes, he does.
10:41:35 <shachaf> I mean, most humans do.
10:41:36 <elliott> Isn't it hilarious?
10:41:41 <elliott> Yes, but most humans do well at it.
10:41:47 <elliott> fizzie's field is characterised by being awful at it.
10:42:19 <fizzie> Snurgle snorgle snargle snörg.
10:42:27 <shachaf> fizzie: What kind of speech recognition do you do?
10:42:49 <elliott> shachaf: Bad speech recognition.
10:43:54 <shachaf> If you only need to recognize famous speeches, like Churchill or something, it should be pretty easy.
10:44:54 <fizzie> shachaf: Noisy "unlimited" vocabulary continuous speech.
10:45:05 <elliott> (So, speech.)
10:45:06 <fizzie> Not conversational, though.
10:45:07 <elliott> Erm.
10:45:08 <elliott> (So, impossible speech.)
10:45:36 <shachaf> fizzie: Not conversational?
10:45:44 <elliott> Me and the XMonad.Hooks.DynamicLog authors have wildly differing definitions of "nice defaults".
10:45:48 <elliott> This thing is hideous.
10:46:16 <shachaf> elliott: You talkin' to me?
10:46:20 <fizzie> Well, I mean, personally I might sometimes with close friends do a little bit of ad-hoc wetware conversational speech recognition; but not with computers, no.
10:46:28 <shachaf> Wait, I didn't write that particular code.
10:46:37 <shachaf> I just wrote the URGENCY hook part of it. I think.
10:46:52 <elliott> fizzie: How hard would it be to modify your stuff to use a pipe rather than dzen2? :p
10:46:57 <elliott> Also, Finns only speak to close friends, I see.
10:47:20 <fizzie> "withUrgencyHook NoUrgencyHook" is my urgency hook.
10:47:39 <fizzie> (I just turn the workspace name backgrounds red.)
10:47:54 <shachaf> 10:47 <@elliott> freenode sucks.
10:48:03 <shachaf> Anything that starts with "<@elliott>" can't be good.
10:48:09 <fizzie> Also my stuff is pretty ugly, I'm not sure you'd want to base anything on that.
10:48:13 <shachaf> fizzie: That's the code I wrote!
10:48:14 <shachaf> I think.
10:48:17 <shachaf> I don't remember anymore.
10:48:45 <elliott> fizzie: Yeah, but if I base anything off it, I can send bug reports to you rather than having to fix my own thing.
10:49:09 <shachaf> fizzie and elliott are totally being infiltrated with my backdoorz, though. As it were.
10:49:26 <kallisti> I'm guessing zzo didn't invent Grass either, and he just added it to the wiki?
10:49:33 <fizzie> "withUrgencyHook NoUrgencyHook" and a dynamicLogString with a PP that has a ppUrgent = (++"/u"). (It gets parsed and formatted by that dzen-runner.)
10:49:49 * elliott mutters something about Unix.
10:50:04 <shachaf> fizzie: Ew. Real Programmers just run two dzens that are exactly aligned to make the transition between them seem seamless.
10:50:08 <shachaf> At least, that's what I did.
10:50:10 * kallisti went through a big list of languages ranked for golfing and was trying to find languages other than flogscript that had been invented by #esolangers
10:50:26 <shachaf> dzen2 -w 1024; dzen2 -x 1024 -w $((something - 1024))
10:50:47 <monqy> langauges ranked for golfing?
10:50:49 <monqy> a big list?
10:51:51 <kallisti> http://golf.shinh.org/lranking.rb
10:51:59 <shachaf> monqy: All languages are used for golfing.
10:52:03 <kallisti> flogscript actually has the best average score.
10:52:37 <monqy> I again want to learn flogscript but am again having trouble
10:52:41 <elliott> <shachaf> fizzie: Ew. Real Programmers just run two dzens that are exactly aligned to make the transition between them seem seamless.
10:52:41 <fizzie> shachaf: I do that too. The dzen-runner does a xinerama monitor query and spawns the N dzens at the correct positions.
10:52:43 <elliott> To achieve... what?
10:53:00 <shachaf> elliott: One dzen gets piped xmonad output, the other shows clock output etc.
10:53:11 <fizzie> Ohhh, like that, on one screen.
10:53:11 <elliott> shachaf: That's disgusting. You're disgusting.
10:53:16 <fizzie> Well, that's not something I do.
10:53:27 <shachaf> elliott: In the early days, at least, that was the Accepted Solution.
10:53:36 * shachaf ran xmonad before 0.1.
10:53:40 <elliott> shachaf: :(
10:53:44 <shachaf> Before it was cool to run xmonad, man.
10:53:51 <kallisti> shachaf: leet hipster cred, bro.
10:54:06 * elliott always avoided xmonad because it was too popular.
10:54:16 <elliott> But it's achieved critical mass now, so I don't bother.
10:54:41 <shachaf> elliott: Samesies, bro.
10:54:51 <elliott> shachaf: It sounds more like the opposite?
10:55:02 <shachaf> Whatever.
10:55:08 <elliott> Deewiant: What are your blues again
10:55:27 <shachaf> elliott: Oh, man, I spent so long coming up with the optimal xmonad colouuuur scheme.
10:57:05 -!- Jafet1 has joined.
10:57:11 -!- Jafet1 has quit (Changing host).
10:57:11 -!- Jafet1 has joined.
10:57:12 <elliott> shachaf: This is for terminals
10:57:26 <kallisti> THIS IS TERMINALS. THIS IS THE REAL WORLD.
10:57:47 <elliott> I'm either going to end up rolling my own scheme for everything, as it seems to be going now, or just give up and use Solarized or zenburn.
10:58:00 -!- GreaseMonkey has quit (Quit: The Other Game).
10:58:13 <shachaf> elliott: That sounds racist to me.
10:58:28 <shachaf> Why do you have to come up with a colour scheme?
10:59:17 -!- Jafet2 has joined.
10:59:26 <elliott> shachaf: Well, let's see, my options are:
10:59:28 <elliott> 1. Come up with a colour scheme.
10:59:30 <elliott> 2. Use an existing one.
10:59:32 <elliott> Per excluded middle...
10:59:46 <shachaf> elliott: Why do you have to scheme the colors, man?
10:59:51 <ais523> I thought you didn't believe in excluded middle
11:00:06 -!- Jafet has quit (Ping timeout: 240 seconds).
11:00:24 <ais523> besides, isn't there 3. Start with an existing colour scheme and change it slightly?
11:00:26 <elliott> shachaf: Thus resulting in me using an existing one?
11:00:32 <elliott> If I don't?
11:00:34 <elliott> Sort of by definition?
11:00:38 -!- ais523 has quit (Remote host closed the connection).
11:00:43 <kallisti> > length . show . (exp 1 :: CReal)
11:00:44 <lambdabot> Couldn't match expected type `f a'
11:00:44 <lambdabot> against inferred type `Data.Numb...
11:00:53 <elliott> That isn't how (.) works.
11:00:58 <kallisti> oh...
11:00:58 <kallisti> yes
11:01:10 <kallisti> > length . show $ (exp 1 :: CReal)
11:01:12 <lambdabot> 42
11:01:13 -!- Jafet1 has quit (Ping timeout: 245 seconds).
11:02:00 <elliott> shachaf: Can we unite in agreement that Haskell's time library is total bullshit?
11:02:17 * shachaf has never disagreed with elliott on anything.
11:02:58 <elliott> :(
11:03:00 <elliott> Okay.
11:03:11 <elliott> Wait, yes we have.
11:03:12 <elliott> Marmalade.
11:03:47 -!- Jafet2 has quit (Ping timeout: 252 seconds).
11:04:09 <elliott> http://hackage.haskell.org/packages/archive/time/1.4.0.1/doc/html/Data-Time-Clock-POSIX.html OK, this makes things much better.
11:04:19 <elliott> Wait, no it doesn't.
11:04:27 <shachaf> elliott: Wait, what?
11:04:42 <shachaf> I don't recall that.
11:06:16 <elliott> shachaf: You said marmalade sucked!
11:06:46 <shachaf> I did?
11:08:00 <elliott> :(
11:09:41 -!- Ngevd has quit (Quit: Leaving).
11:11:47 <shachaf> <Sgeo_> Do there exist lambda expressions that do not close on outside values that cannot be expressed as pointfree given a fixed set of combinators for use for pointfree form?
11:12:08 <Sgeo_> What?
11:12:21 <shachaf> elliott wants to answer that.
11:12:46 * shachaf is not making fun of you, just giving elliott something back.
11:12:56 <Sgeo_> Oh, ok
11:13:42 <elliott> Sgeo_: The answer is maybe.
11:13:44 <elliott> Nobody knows.
11:15:17 <Sgeo_> So far, I have been told "I'd assume so" "No", and "Maybe"
11:15:27 <shachaf> It's equivalent to the Turing problem.
11:15:42 <shachaf> The Turing problem, as you're aware, is about playing Chess.
11:15:45 <elliott> Man, time is hard.
11:15:57 <elliott> Sgeo_: Anyway, look up the SKI calculus.
11:16:05 <shachaf> http://en.wikipedia.org/wiki/Combinatory_logic
11:16:27 <Sgeo_> shachaf mentioned S and K, but how is the answer "maybe" given the existence of S and K?
11:16:46 <elliott> It isn't.
11:16:51 * Sgeo_ is confused
11:16:52 <elliott> Whoever said maybe is an idiot and/or wrong.
11:17:05 <Sgeo_> <elliott> Sgeo_: The answer is maybe.
11:17:05 <Sgeo_> <elliott> Nobody knows.
11:17:09 <shachaf> zomg
11:17:09 <elliott> Yes.
11:17:12 <elliott> Idiot and/or wrong.
11:17:16 <shachaf> You've caught elliott in a self-contradiction!
11:17:29 <elliott> Whoever said no is a *big* idiot.
11:17:33 <elliott> And/or big wrong.
11:17:45 <Sgeo_> I may have misinterpreted shachaf as saying no
11:18:04 <Sgeo_> Or the SK thing as meaning no
11:18:15 <monqy> oops
11:18:21 -!- amca has quit (Quit: Farewell).
11:18:35 <shachaf> Sgeo_: I said yes.
11:18:45 <shachaf> Except in the case that it requires pattern-matching, or something like that.
11:19:23 <Sgeo_> Uh, I'm now wondering if one or more persons possibly including myself have mixed up what a "yes" and what a "no" means to the question.
11:19:47 <elliott> I told you nobody knows.
11:19:59 <shachaf> Sgeo_: Let's flip a coin and decide on maybe.
11:21:28 <shachaf> elliott: Guess what I'm about to do.
11:21:49 <shachaf> Hint: It starts with the letters "sleep" and ends with the letters "sleep".
11:21:56 <elliott> Is it sleepsleep?
11:22:01 <Sgeo_> sleepexceptnotsleep
11:22:19 <shachaf> Sgeo_ has got it!
11:22:26 <shachaf> Actually I was just thinking of "sleep".
11:22:34 <shachaf> Or maybe "eat marmalade".
11:22:35 <fizzie> I think it is... a COLOUR SCHEME.
11:22:49 <monqy> eat marmalade begins and ends in sleep
11:23:09 <Sgeo_> Sleep-eat marmalade-sleep. I don't think I want to know what marmalade-sleep tastes like, or why shachaf is sleep-eating
11:23:19 <monqy> unless you die before sleeping after eeting marmalade, i guess
11:23:28 <monqy> is death a sleep
11:24:41 <kallisti> `haskell import Data.List;g=getLine;s=subsequences;l=length;f x y=maximumBy(\x y->compare(l x)(l y))$union(s x)(s y);main=do{x<-g;y<-g;putStrLn$f x y}
11:24:44 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: haskell: not found
11:24:47 <kallisti> !haskell import Data.List;g=getLine;s=subsequences;l=length;f x y=maximumBy(\x y->compare(l x)(l y))$union(s x)(s y);main=do{x<-g;y<-g;putStrLn$f x y}
11:24:55 <EgoBot> runhaskell: syntax: runghc [-f GHC-PATH | --] [GHC-ARGS] [--] FILE ARG...
11:24:58 <kallisti> bah
11:26:32 <monqy> is that a golf
11:27:46 -!- Sgeo_ has quit (Ping timeout: 240 seconds).
11:41:30 <elliott> You know what's almost impossible with Haskell's time library?
11:41:36 <elliott> "Give me the number of microseconds until the next minute."
11:42:08 <shachaf> "almost impossible" is just a long way to say "possible"
11:42:18 <elliott> Possible but very difficult.
11:42:31 <elliott> It seems like if you want to handle leap seconds as the thing so prides itself on doing, you have to do it your fucking self.
11:54:05 <elliott> shachaf: This smartBorders flickering is awful. :-(
11:54:08 * elliott considers NIHing it.
11:54:13 <shachaf> DO IT
11:55:08 -!- Sgeo has joined.
11:55:25 <Sgeo> If you can guess why I got disconnected, you get no medal.
11:55:38 <elliott> Sgeo: Are you going to say that every goddamn time you get disconnected?
11:56:57 <shachaf> Sgeo: ##marmalade
11:57:41 <monqy> Sgeo: what if I can't guess
11:59:53 <Sgeo> MRMLD
12:00:20 <monqy> happens to everyone
12:00:42 <kallisti> I wonder why ghc randomly decides to consume 3 GBs of memory for some silly program.
12:00:51 <monqy> wh
12:01:49 <kallisti> I don't know. I run a program via runhaskell, I hit ctrl+c to close it, and then a few seconds later my computer grinds to a halt from 100% memory use.
12:02:02 <kallisti> with ghc taking 3 gbs
12:02:27 <elliott> That has happened to me before, I think.
12:02:45 -!- itidus20 has joined.
12:02:55 <kallisti> elliott: you probably have ulimits or something though.
12:03:00 <elliott> Why would I?
12:03:08 <kallisti> to prevent random memory leak slowdowns.
12:03:12 <elliott> Admittedly, perhaps I should. Rogue programs bring X down a lot.
12:05:16 <elliott> shachaf: I gave up on sleeping until the start of the next minute.
12:05:20 <elliott> Well, to be more precise, I asked Stack Overflow.
12:05:22 <elliott> Which is GIVING UP.
12:05:26 -!- itidus21 has quit (Ping timeout: 240 seconds).
12:07:26 -!- itidus20 has quit (Ping timeout: 255 seconds).
12:11:07 <elliott> fizzie: Oh no, I might end up using dbus myself.
12:12:25 <fizzie> I might end up doing some MOCKING, in that case.
12:13:55 <elliott> fizzie: Well, it wouldn't be for talking to dzen2.
12:14:06 <elliott> It would be for processing libnotify things to put them where most people would put a title bar.
12:14:15 <elliott> But I'd probably end up reusing your scaffolding anyway in that case.
12:14:28 <elliott> Not the rest of your program though, I'm ALREADY WRITING MY OWN.
12:14:55 <Sgeo> Fun fact: A bunch of distros package ftphs
12:16:27 <elliott> Oh no! Criminals!
12:16:28 <elliott> Arrest them!
12:16:39 <elliott> This vile... PACKAGING business.
12:17:07 <monqy> ftphs trafficking
12:17:46 <Sgeo> The thing is, it feels like a more political matter now. I think I want to make changes that get accepted, so that the fix for the nonsense actually gets used where ftphs is used, but then there are backwards compatibility issues
12:17:54 <Sgeo> And also I'd need to talk to this guy
12:17:55 <elliott> POLITICS
12:18:27 <elliott> Sgeo: Let me tell you how it will go: "Oh, I haven't touched that code since 2010. I'll appoint you the new maintainer."
12:18:37 <elliott> "ENJOY!"
12:19:00 <monqy> and then
12:19:01 <monqy> sgeo enjoyed
12:19:10 <monqy> ~happy endings~
12:19:23 <Sgeo> I don't want to be relied upon
12:19:25 <Sgeo> :/
12:19:54 <Deewiant> elliott:
12:19:55 <Deewiant> ! Bold stolen from xterm
12:19:55 <Deewiant> urxvt.color4: #0040ff
12:19:55 <Deewiant> urxvt.color12: #5c5cff
12:21:34 <elliott> Deewiant: Thanks
12:21:39 <elliott> Deewiant: (Isn't bold blue cyan, though?)
12:21:44 <elliott> I don't see what's wrong with cyan necessarily.
12:22:19 <Deewiant> Bold blue is bold dark-as-shit-blue
12:22:22 <monqy> bold blue is bold blue?? unless by blue you mean cyan
12:22:45 <elliott> Deewiant: Ah
12:23:17 <Deewiant> Apparently #0000c0
12:23:27 <Deewiant> Whereas bold cyan is a separate colour, #00f5fa
12:23:32 <elliott> Deewiant: Yes, these are nicer, thanks
12:23:38 <elliott> Although still a bit too dark on the background for my tastes
12:23:44 <elliott> But at least I can make letters out now :P
12:24:22 -!- itidus21 has joined.
12:25:00 <elliott> Sgeo: Anyway, you could just make a Whatever.Module.It.Is.Simple.
12:25:08 <elliott> With the non-incremental versions.
12:26:27 <Sgeo> Why .Simple? I might call it Network.FTP.Client.Strict (for the strict version) and Network.FTP.Client.Idontactuallyknowwhattocallit for the lazy version that's still not so lazy that FTP commands will trip over themselves
12:28:46 <elliott> Sgeo: It's simple because it's limited.
12:28:56 <elliott> I thought "Simplistic" might offend.
12:29:37 -!- ChanServ has set channel mode: +o fizzie.
12:29:39 -!- fizzie has set channel mode: -c.
12:29:40 <fizzie> IF YOU CAN READ THIS YOUR COLORS ARE TOO BRIGHT
12:29:45 -!- fizzie has set channel mode: +c.
12:29:48 -!- fizzie has set channel mode: -o fizzie.
12:30:02 <fizzie> Oh no, that was supposed to be BLUES.
12:30:12 <Sgeo> What's limited or simplistic about it?
12:30:17 <Sgeo> I need sleep
12:30:39 <monqy> it looked blues to me..
12:30:49 <fizzie> Yes, but the wording too.
12:30:49 <monqy> and i could read it D:
12:31:40 <elliott> fizzie: Um please -c again.
12:31:50 <fizzie> "Sorry, I already forgot how."
12:31:53 <elliott> Sgeo: How can you process a 100 gigabyte file stored on an FTP server incrementally with your strict interface?
12:32:25 * elliott reiterates once again that if you're going to bother doing this, do it properly and create an ftp-enumerator library.
12:32:59 <Sgeo> That would require work
12:32:59 <Sgeo> >.>
12:33:11 <Sgeo> I might do an ftp-enumerator afterwards
12:33:57 <elliott> Yeah! First have to negotiate with a maintainer (who probably doesn't care about the code any more and will want you to maintain it) and break everybody's code, *then* do it more easier and more properly and actually learn a new concept in the process.
12:34:02 <elliott> Awesome!!
12:34:06 <elliott> fizzie: Dude I need my bold.
12:34:08 <elliott> I always need my bold.
12:34:11 <elliott> But you can't tempt me like that.
12:34:30 <elliott> fizzie: I'll leave speech recognition alone for whole days.
12:34:32 <elliott> Months!
12:35:20 <fizzie> You could petition the other op-folks for a permanent -c; I might even vote for that, could make the place look less drab. Though based on a quick summary +c seems to be the norm on serious channels such as this.
12:35:56 <elliott> fizzie: I think it might have been default once-upon-a-time.
12:36:05 <elliott> Maybe it even is, although not for unregistered channels, at least (just checked).
12:36:09 <elliott> Serious channels have +t too. :p
12:36:15 <Sgeo> properly and learning new concepts I get, but what's easier about enumerators vs just slapping an IORef in to use to force when a command is issued?
12:36:23 <Sgeo> Night
12:36:30 <elliott> Sgeo: Ask a question, leave immediately!
12:36:33 <elliott> Good idea.
12:37:13 <fizzie> I guess in the interests of empirical science I could -c for an hour to evaluate the effect, assuming people currently online do not disagree too badly? (I'm thinking we'd just get some elliott rainbows and that'd be about it.)
12:37:43 <Sgeo> I'll stay up for 5 minutes or until the question is answered, whichever is sooner
12:38:35 <elliott> fizzie: I would, um, have to write a script for the rainbows... so yeah, they're practically inevitable.
12:39:37 -!- ChanServ has set channel mode: +o fizzie.
12:39:39 -!- fizzie has set channel mode: -c.
12:39:40 <Sgeo> Better yet, I'll logread. Night.
12:39:45 -!- fizzie has set channel mode: -o fizzie.
12:39:59 <fizzie> Didn't see any objections, so.
12:40:25 <fizzie> Anyway, freenode #maemo lacks +c, and it's pretty monochromatic in general.
12:40:41 <elliott> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
12:40:41 <elliott> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,
12:40:42 <elliott> 6aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
12:40:44 <monqy> hi
12:40:47 <elliott> 14,13aaaaaaaaaaaaaaaaaaa
12:40:49 <fizzie> Rrrright.
12:40:50 <elliott> Well, that's sort of a rainbow.
12:40:55 <monqy> what happened to that rainbow
12:41:02 <elliott> It... had an accident.
12:41:10 <monqy> D:
12:42:51 <elliott> It would be really annoying if I talked like this all the time.
12:42:57 <elliott> But I won't, it's too much work.
12:43:30 <elliott> fizzie: I have a feeling the serious places do it because (a) stupid mIRC users and (b) trolls and flood bots.
12:43:40 -!- Madoka-Kaname has quit (Excess Flood).
12:44:03 -!- Madoka-Kaname has joined.
12:44:04 -!- Madoka-Kaname has quit (Changing host).
12:44:04 -!- Madoka-Kaname has joined.
12:45:25 <fizzie> fungot: What's your position on colors?
12:45:26 <fungot> fizzie: what, the ability to be captured a spanish galleon! arrr!! flourishes harry, and they're real i tell my students' work on the sneaker. who?
12:45:44 <monqy> ^style
12:45:44 <fungot> Available: agora alice c64 ct darwin discworld europarl ff7 fisher fungot homestuck ic irc iwcs* jargon lovecraft nethack pa qwantz sms speeches ss wp youtube
12:46:06 <Sgeo> Colors summon Spanish galleons. Spread the word.
12:46:11 <Sgeo> Night
12:46:14 <monqy> night
12:46:24 <monqy> how many times will you reappear
12:46:28 <monqy> before finaly slep
12:46:38 -!- Phantom_Hoover has joined.
12:46:42 <Sgeo> Unknown
12:46:43 <Sgeo> Night
12:46:46 <monqy> night
12:46:54 -!- tuubow has joined.
12:47:14 <Phantom_Hoover> Hellambdabot.
12:47:14 <lambdabot> Phantom_Hoover: You have 2 new messages. '/msg lambdabot @messages' to read them.
12:47:28 <elliott> fizzie: Add some colourful styles.
12:47:46 <elliott> Like, umm, House of Leaves. (I still need to read that thing.)
12:48:44 <fizzie> "tls_socket_write (Error in the push function.)" Oh no, the push function broke.
12:48:52 -!- AnotherTest has joined.
12:48:59 <elliott> fizzie: What did you doooooooo?
12:49:08 <fizzie> I did NOTHING it just BROKE.
12:49:11 <AnotherTest> hello
12:51:07 <elliott> fizzie: It's broken because it wants you to fix the regionfile stuff! (A factual fact.)
12:51:48 -!- monqy has quit (Quit: hello).
13:10:17 <elliott> http://ompldr.org/vYnR3eA
13:10:28 <elliott> I really need to make that dzen not terrible.
13:10:43 <elliott> And also get emacs and xchat using colours that aren't completely unlike everything else.
13:10:48 <elliott> But this is starting to become nice...
13:11:46 -!- tuubow has quit (Ping timeout: 240 seconds).
13:15:47 <kallisti> :t (\n -> [n..])
13:15:48 <lambdabot> forall t. (Enum t) => t -> [t]
13:16:27 <kallisti> > [1%1..]
13:16:28 <lambdabot> [1 % 1,2 % 1,3 % 1,4 % 1,5 % 1,6 % 1,7 % 1,8 % 1,9 % 1,10 % 1,11 % 1,12 % 1...
13:16:42 <kallisti> how rational
13:17:14 <kallisti> B)
13:18:06 <kallisti> wouldn't it make more sense for a sequence of rationales to like... actually sequentially go through the rationals in order?
13:19:39 <AnotherTest> Why o why do you fail me, matlab?
13:20:12 <Phantom_Hoover> http://www.reddit.com/r/askscience/comments/njkhz/do_spiders_make_mistakes/
13:20:37 <elliott> No. Never.
13:20:59 <elliott> kallisti: Enum sucks.
13:22:58 <kallisti> isn't it just the instance for Ratio that sucks?
13:23:04 <kallisti> and the rest of it is fine?
13:23:24 <kallisti> honestly I can't ask much from enum
13:23:37 <elliott> kallisti: See also Float and Double which have the exact same problem.
13:23:48 <kallisti> "give me the next one. kthx" "now give me the precious one. kthx" "NOW DO THAT A BUNCH AND MAKE A LIST. kthx"
13:23:53 <kallisti> lol precious
13:23:54 <elliott> The issue is that Enum conflates the issue of constructing a range list with the issue of /enumeration/ types.
13:24:03 <kallisti> the little-known prec function
13:24:07 <elliott> i.e. types that can be fully and finitely listed, as in Int, C's enums, etc.
13:24:08 <kallisti> which preduces the precious one.
13:24:14 <elliott> Not as in Integer or the Rationals.
13:24:23 <elliott> Ix then duplicates ranges further, complicating things even more.
13:24:32 <AnotherTest> elliott: what's the problem with enumerations?
13:25:00 <AnotherTest> I find them a particularly useful language feature
13:25:43 <AnotherTest> (in C++, I mean)
13:26:26 <kallisti> elliott: is there an issue with combining those? the finitely countable ones are just Enum + Bounded
13:27:13 <kallisti> > [True, True ... True]
13:27:14 <lambdabot> Not in scope: `...'
13:27:17 <kallisti> > [True, True .. True]
13:27:18 <lambdabot> [True,True,True,True,True,True,True,True,True,True,True,True,True,True,True...
13:27:25 <kallisti> lolwat
13:27:45 <kallisti> > [1,1..1
13:27:46 <lambdabot> <no location info>: parse error (possibly incorrect indentation)
13:27:47 <kallisti> > [1,1..1]
13:27:48 <lambdabot> [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,...
13:27:55 <kallisti> I guess that makes sense actually
13:28:06 <kallisti> > [False,True..True]
13:28:07 <lambdabot> A section must be enclosed in parentheses thus: (`True..` True)Not in scope...
13:28:37 <kallisti> I give up. I'm going to sleep.
13:28:52 <elliott> AnotherTest: I didn't say anything about enumerations in C++.
13:29:10 <AnotherTest> elliott: oh okay, I wasn't following, I'm sorry
13:29:24 * elliott was talking about the Enum typeclass.
13:29:27 <elliott> in Haskell
13:36:50 <elliott> "Time is a part of the measuring system used to sequence events, to compare the durations of events and the intervals between them, and to quantify rates of change such as the motions of objects.[1] The temporal position of events with respect to the transitory present is continually changing; events happen, then are located further and further in the past. Time has been a major subject of religion, philosophy, and science, but defining it in a n
13:36:51 <elliott> on-controversial manner applicable to all fields of study has consistently eluded the greatest scholars. A simple definition states that "time is what clocks measure"."
13:36:56 <elliott> -- Wikipedia, attempting to define "time".
13:37:10 <elliott> Did you know that events happen, and then are located further and further in the past?
13:38:14 <AnotherTest> If it's a class, it's most likely going to be bad?
13:38:25 <AnotherTest> Is that what you meant?
13:38:28 <AnotherTest> :o
13:38:33 <AnotherTest> Also
13:38:42 <elliott> AnotherTest: "Typeclasses" have very little to do with the OOP concept of classes.
13:38:50 <elliott> @src Enum
13:38:50 <lambdabot> class Enum a where
13:38:51 <lambdabot> succ :: a -> a
13:38:51 <lambdabot> pred :: a -> a
13:38:51 <lambdabot> toEnum :: Int -> a
13:38:51 <lambdabot> fromEnum :: a -> Int
13:38:52 <lambdabot> [3 @more lines]
13:38:53 <AnotherTest> How can they define time without defining same at the same time?
13:39:00 <AnotherTest> *space
13:39:10 <AnotherTest> *first same = space
13:39:11 <elliott> Well, that's easy: just have one dimension and call it time.
13:39:17 <elliott> Plotting the progression of one lonely point.
13:39:20 <AnotherTest> That's wrong
13:39:38 <AnotherTest> time = space
13:40:06 <AnotherTest> Men has known that for years now
13:40:13 <AnotherTest> *have :(
13:40:23 <elliott> But women are, of course, still kept in the dark.
13:40:27 <elliott> AnotherTest: Anyway, how is that wrong?
13:40:34 <elliott> Yes, time can be modelled as a fourth spatial dimension.
13:40:48 <elliott> You can just as easily shave off the three other ones, and thus have a one-dimensional space where the only coordinate is time.
13:41:06 <AnotherTest> elliott: First of all, men refers to the human kind, in this case.
13:41:41 <AnotherTest> Second of all, we should think of space and time as the same thing, spacetime. This has little to do with dimensions.
13:41:48 <elliott> f(x,y,z,t) = 1 if x=t and y=0 and z=0, 0 otherwise -- a 3 spatial dimensions + time space with one particle starting at (0,0,0) at t=0 with velocity (1,0,0) (where we use 0/1 to denote "no particle/particle")
13:42:01 <AnotherTest> Third of all, shaving them of is not reality, it's mathematics, not physics.
13:42:09 <AnotherTest> *off
13:42:14 <elliott> f(t) = 1 if t is even, 0 if t is odd -- a 1-dimensional space consisting only of time where a particle in the single point blinks on and off every second
13:42:23 <elliott> AnotherTest: It's geometry.
13:42:29 <AnotherTest> It's physcis
13:42:45 <AnotherTest> but of course, geometry is a part of physics, a tool
13:42:46 <elliott> First you say it's mathematics, then you say it's physics?
13:42:54 <AnotherTest> I say what you do
13:42:56 <AnotherTest> is mathematics
13:43:01 <elliott> Anyway, Minkowski space is physics.
13:43:02 <AnotherTest> what time is, is physics
13:43:03 <Phantom_Hoover> Oh dear, are you trying to to maths and physics?
13:43:03 <elliott> It is also mathematics.
13:43:07 <Phantom_Hoover> This can only end badly.
13:43:18 <AnotherTest> mathematics < physcis
13:43:23 <elliott> Saying that you can't have a 1-dimensional space where the only dimension is time is "not physics, it's mathematics" is ridiculous.
13:43:27 <elliott> Physics is a branch of mathematics.
13:43:30 <AnotherTest> No
13:43:33 <elliott> All we're talking about is abstract models.
13:43:46 <AnotherTest> physics is the use of mathematics in real world situations
13:43:46 <Phantom_Hoover> Physics isn't a branch of mathematics.
13:43:48 <elliott> If you demand the-real-reality, then Newtonian mechanics isn't physics!
13:43:53 <elliott> Phantom_Hoover: Theoretical physics is.
13:43:58 <Phantom_Hoover> No, it's not.
13:44:08 <elliott> Sure it is; you're doing the same things, you're just playing by different rules.
13:44:08 <Phantom_Hoover> It's the fitting of mathematical models to observed physical situations.
13:44:09 <AnotherTest> I'm talking about the relativistic view here
13:44:14 <AnotherTest> not about the Newton view
13:44:20 <Phantom_Hoover> Theoretical physics is mathematics within these models, I suppose.
13:44:28 <elliott> AnotherTest: You're not really making any sense, anyway. Of course you can define time without defining space.
13:44:35 <AnotherTest> Newton was wrong about his way of thinking about space and time anyway
13:44:37 <elliott> Or rather, you don't have to define "space" in the way you're talking about.
13:44:43 <AnotherTest> elliott: You can, but you shouldn't
13:44:57 <Phantom_Hoover> AnotherTest, well then, a Minkowski space with one time dimension and no space is the same as a normal 1-dimensional space.
13:45:02 <elliott> AnotherTest: Also, describing space and then saying "time is one of the dimensions" is a woefully inadequate definition of time.
13:45:04 <AnotherTest> That's exactly the one point much scientists before Einstein didn't understand
13:45:09 <elliott> It's a rather special dimension.
13:45:15 <AnotherTest> No it's not
13:45:19 <elliott> Yes... it is.
13:45:19 <Phantom_Hoover> Yes, it is.
13:45:28 <AnotherTest> the is no such thing as a special dimension
13:45:38 <AnotherTest> a dimension is just another variable in a function
13:45:52 <elliott> Anyway, there's more to time than just the theoretical physics of it.
13:45:59 <elliott> There's the human and cultural perceptions of it, which are encyclopedically-relevant content.
13:46:07 <elliott> And very, very different from the other 3 dimensions.
13:46:10 <Phantom_Hoover> Distance between the origin and (x,y,z,t) squared = x^2 + y^2 + z^2 - t^2.
13:46:20 <elliott> And what Phantom_Hoover said.
13:46:23 <elliott> Time is special.
13:46:31 <AnotherTest> It's not
13:46:38 <AnotherTest> spacetime is
13:46:45 <Phantom_Hoover> And within spacetime, time is special.
13:46:50 <elliott> AnotherTest: OK, spacetime treats time specially.
13:46:53 <elliott> How can you define time without spacetime?
13:46:54 <AnotherTest> time is just a mathematical perception
13:46:58 <elliott> You've just spent 5 minutes saying you can't.
13:47:12 <AnotherTest> elliott
13:47:18 <AnotherTest> Time is not a real thing
13:47:21 <AnotherTest> spacetime is
13:47:25 <elliott> Sure it is?
13:47:30 <AnotherTest> Pretty sure
13:47:38 <elliott> No, I'm saying it is.
13:47:46 <AnotherTest> Prove?
13:47:46 <elliott> Time is a part of spacetime, Q.E.D.
13:47:53 <AnotherTest> no it's not
13:47:56 <elliott> ...Yes it is?
13:48:00 <AnotherTest> what we live in
13:48:02 <AnotherTest> is spacetime
13:48:02 <Phantom_Hoover> AnotherTest, what the *hell* do you mean by 'a real thing'?
13:48:10 <Phantom_Hoover> Is space a 'real thing' in your eyes?
13:48:15 <AnotherTest> A thing that exists in our universe
13:48:21 <AnotherTest> space is not a real thing
13:48:27 <Phantom_Hoover> And yet spacetime is?
13:48:30 <AnotherTest> yes
13:48:37 <Phantom_Hoover> What does 'exists' even mean in this context?
13:49:02 <Phantom_Hoover> Spacetime, as the name kind of implies, is a combination of space and time; its existence implies both.
13:49:10 <AnotherTest> no no
13:49:37 <AnotherTest> time and space are concepts we invented
13:49:42 * elliott thinks that AnotherTest is trying to take a philosophical position that holds physics as merely a description of the universe, which exists solely in its entirety independent of the physics underlying it.
13:49:45 <AnotherTest> spacetime is what really exists
13:49:46 <Phantom_Hoover> And spacetime *isn't*?
13:49:55 <Phantom_Hoover> You are just making naked assertions now.
13:49:58 <AnotherTest> No, spacetime isn't
13:49:59 <elliott> Unfortunately you don't seem to know enough about the subject to argue this consistently...
13:50:00 <Phantom_Hoover> Arguing with you is pointless.
13:50:22 <elliott> AnotherTest: "Spacetime" is the name of the model we created to describe the physical universe.
13:50:27 <elliott> "Space" and "time" are components of this model.
13:50:29 <AnotherTest> elliott: That's untrue, you should review some basic physics
13:50:53 <elliott> AnotherTest: What?
13:51:00 <elliott> AnotherTest: Yes, "spacetime" can also be used to refer to the entire universe.
13:51:05 <AnotherTest> Nobody is familiar with theories like general relativity here?
13:51:07 <elliott> But that's because the model is that the whole universe is made out of spacetime.
13:51:14 <elliott> I think you'll find Phantom_Hoover is quite familiar with general relativity here.
13:51:18 <Phantom_Hoover> AnotherTest, this is funny because you clearly don't actually know any physics?
13:51:19 <elliott> You seem to be suffering from the Dunning-Kruger effect.
13:51:31 <AnotherTest> Phantom
13:51:35 <Phantom_Hoover> And I'd say I know little about GR, but that's because I know enough to see just how much there is to it.
13:52:02 <AnotherTest> Explain to me why spacetime bends, separating space and time
13:52:03 <Phantom_Hoover> Protip: if you think you understand it and you don't have a degree in physics, you don't.
13:52:08 <Phantom_Hoover> AnotherTest, wat
13:52:09 <elliott> AnotherTest: BTW, try to assume your opponents aren't idiots who are below you. It's unbecoming.
13:52:45 <AnotherTest> elliott: You're doing the exact same thing as you described currently
13:52:56 <Phantom_Hoover> "Spacetime bends, separating space and time."
13:53:16 <Phantom_Hoover> This makes very, very little sense.
13:53:20 <AnotherTest> well, so you're saying that only what you call "space" changes?
13:53:24 <AnotherTest> Or only "time"?
13:53:33 <elliott> AnotherTest: "Spacetime" is an abstract model we use to describe the physical universe. In this model, the physical universe described by an abstract concept, "spacetime", whose definition involves space (such as the coordinates x, y and z) and time (such as the coordinate z). "Spacetime exists" can mean only "The universe can be accurately modelled with the concept of spacetime".
13:53:34 <elliott> It can.
13:53:35 <AnotherTest> It makes a lot sence in fact
13:53:37 <Phantom_Hoover> No, the overall geometry of spacetime changes.
13:53:39 <elliott> It can also be accurately modelled with the concepts of space and time.
13:53:55 <elliott> Yes, time is another coordinate, one of 4; but it's *treated specially* by the model of spacetime.
13:54:20 <elliott> So there is more to time than just defining space. Yes, defining Minkowski space will define both what we call "space" (3 spatial dimensions) and "time" (1 chronological).
13:54:32 <Phantom_Hoover> AnotherTest, http://en.wikipedia.org/wiki/Schwarzschild_metric#The_Schwarzschild_metric
13:54:34 <AnotherTest> We can only describe the universe
13:54:39 <elliott> But you can't just say "OK, there's a 3 dimensional universe, and also there's another coordinate, time".
13:54:42 <elliott> That does not describe time at all.
13:54:45 <Phantom_Hoover> This is an actual, well-researched example of a 'curved' spacetime.
13:54:59 <Phantom_Hoover> Note how the equation is not at all symmetric with respect to dt.
13:55:15 <elliott> AnotherTest: You seem to be saying that you cannot at all break a model into its subparts.
13:55:20 <elliott> You clearly can; that's why physics /works/.
13:55:23 <AnotherTest> I'm not
13:55:32 <elliott> It doesn't just say "the universe; the end", it says "the universe is A, B, and C, combined like D".
13:55:35 <AnotherTest> It's perfectly possible to calculate using time
13:55:44 <AnotherTest> but time does not exists because of that reason
13:55:46 <hagb4rd> afaik spacetime is a multidimenstional stucture which allows a mathematical description of space and time according to to the rules of relativity
13:55:55 <elliott> AnotherTest: OK, what exists?
13:56:02 <elliott> AnotherTest: The universe exists. Spacetime exists.
13:56:06 <elliott> AnotherTest: Space doesn't exist. Time doesn't exist.
13:56:06 <Phantom_Hoover> hagb4rd, amazingly, is largely right.
13:56:10 <elliott> Do you exist? Does my table exist? Does my chair exist?
13:56:20 <elliott> Those are all intimately tied to other things in the universe, per the laws of physics.
13:56:21 <AnotherTest> Yes, but that's matter
13:56:24 <elliott> And so cannot be completely separated from each other.
13:56:25 <AnotherTest> its of a total different form
13:56:25 <hagb4rd> *phew
13:56:29 <elliott> Just like the definitions of "space" and "time".
13:56:34 <Phantom_Hoover> If my table exists, do my tabletop and table legs exist?
13:56:39 <elliott> They are not separable, but they can be described separately.
13:56:45 <AnotherTest> Yes, but it's not the same
13:56:50 <elliott> No matter how much of a holist you are, reducing concepts is possible.
13:57:02 <elliott> AnotherTest: How? It's a clear analogy.
13:57:17 <elliott> If something exists, then so do its subparts, even if they can't be defined independently from the whole.
13:57:19 <AnotherTest> Yes, but that doesn't mean that those concepts will remain existant
13:57:26 <elliott> They're not chair legs without the chair; but the chair legs still exist.
13:57:47 <AnotherTest> You're thinking about this like it's the same as matter
13:57:55 <AnotherTest> but you can't
13:58:09 <elliott> OK, explain how you can't reason about abstract concepts this way. And _please_ define "exists".
13:59:19 <elliott> AnotherTest: BTW, how much physics do you know, then?
14:00:08 <hagb4rd> everything you can measure directly or indirectly (by measure its effects) exits
14:00:36 <elliott> hagb4rd: So the Planck length doesn't exist?
14:00:37 <AnotherTest> It's hard to define "exists", but I assume that you are familiar with the English language enough to understand the word "exists". Otherwise, I may ask you to explain "define" to me. And then you might ask me to define "explain". I am stating that the mathematical world is not the same as the real world as described by physics. Time and space are concepts that are used in mathematics to help describe the physical concept of spacetime.
14:00:57 <AnotherTest> It can be indirectly measured.
14:00:58 <hagb4rd> which planck?
14:01:10 <elliott> AnotherTest: Yes, of course it's hard to precisely define "exists", that's why you're being so unreasonable with your incredible degree of certainty in what exists or not; and if you're going by the everyday definition, then time certainly exists.
14:01:13 <AnotherTest> But still, I'm not sure if I agree with that defintion
14:01:28 <elliott> I can't figure out how your definition of "X exists" differs from "X is either 'the physical universe' or 'spacetime'".
14:01:41 <elliott> "Unless it's matter, in which case it exists."
14:02:02 <AnotherTest> spacetime is what the universe is made of, that could be a way of saying it
14:02:05 <AnotherTest> altough it's incorrect
14:02:10 <AnotherTest> *although
14:02:22 <AnotherTest> Because we just don't know very well what spacetime is
14:02:28 <AnotherTest> nobody knows it
14:02:33 <elliott> AnotherTest: Howso?
14:02:35 <AnotherTest> *knows it very well
14:02:38 <Phantom_Hoover> No, *you* don't know what you're talking about.
14:02:49 <hagb4rd> we do not even know what matter is
14:02:50 <elliott> I think we know quite a lot about spacetime.
14:02:58 <AnotherTest> quite a lot
14:03:02 <AnotherTest> is not entirely
14:03:11 <elliott> "we don't know very well" =/= "we know quite a lot indeed".
14:03:13 <AnotherTest> And we do not know what it physically means
14:03:23 <elliott> What it "physically means" is a meaningless question.
14:03:31 <elliott> The only question physics cares about is whether the model accurately describes the observations.
14:03:34 <AnotherTest> It is a meaningful question
14:03:41 <Phantom_Hoover> Everything you say is such vague, pseudo-philosophical bullshit that it effectively evades any actual discussion.
14:03:44 <elliott> If it is a meaningful question, it is a question for metaphysics.
14:03:47 <AnotherTest> it's like people that don't care about what a limit physically is
14:04:01 <elliott> And metaphysics is not a scientific discipline at all, because it basically asks "ignoring the scientific method, what **is** it?!?!?!".
14:04:24 <Phantom_Hoover> I suppose I won't be surprised if you turn out to be one of the worse class of finitists.
14:04:30 <elliott> Anyone who engages in it of course can't explain what an acceptable answer to this would be, because they're just grasping at straws to find "meaning".
14:05:10 <AnotherTest> Phatom, there are too much students in the university I'm at to verify that, unfortunately
14:05:32 <elliott> What are you studying, out of curiosity?
14:06:18 <AnotherTest> civil engineer
14:07:21 <AnotherTest> Also, second year, in case you might ask
14:07:39 <AnotherTest> Thus, bachelor
14:09:01 <Phantom_Hoover> Right.
14:10:02 <AnotherTest> Yes, it's true, we do not have a lot of physics. But still, I have read about the subject quite a lot.
14:10:22 <Phantom_Hoover> You are a year behind when someone studying physics in Cambridge would learn GR.
14:10:23 <AnotherTest> Also, since you may ask, what do you study?
14:10:59 <Phantom_Hoover> I am at school, but I actually know the limits of my knowledge, unlike you.
14:10:59 <AnotherTest> They don't teach civil engineers GR anyway
14:11:00 <elliott> Phantom_Hoover is one of them elitist mathematicians. (Disclaimer: I disclaim the contents of the previous sentence.)
14:11:27 <AnotherTest> school referring to high school?
14:11:55 <Phantom_Hoover> Yes.
14:14:21 <AnotherTest> Well then, you might say that I " do not know the limits of my knowledge". Although a reason may also be that you don't realize that I have learned much more in the last year and a bit than I have during the time that I was at high school. I do know my limits, and I do realize that I still have lots to learn.
14:14:59 <AnotherTest> But you might not, as stated.
14:15:19 <elliott> AnotherTest: You're not going to win anybody over by saying what amounts to "I'm slightly older than you, therefore my unjustified and unexplained statements are correct".
14:15:33 <elliott> Especially since, as perviously stated, they don't teach civil engineers GR.
14:15:44 <AnotherTest> elliott: I'm not attempting to.
14:15:56 <AnotherTest> Also, they don't teach us GR, but they do teach us mathematics.
14:16:07 <Phantom_Hoover> XD
14:16:17 <Phantom_Hoover> "It's all basically the same, isn't it?"
14:16:36 <AnotherTest> Whos quote was that?
14:16:58 <elliott> AnotherTest: To quote ancient Greek philosopher AnotherTest, "it's mathematics, not physics; mathematics < physcis".
14:17:16 <AnotherTest> < means something, in fact
14:17:22 <elliott> < implies =/=.
14:17:25 <AnotherTest> No
14:17:31 <elliott> Yes. Yes it does.
14:17:34 <AnotherTest> It implies Physics uses mathematics
14:17:35 <elliott> Something cannot be greater than itself.
14:17:50 <elliott> AnotherTest: That's... not what < means.
14:17:54 <AnotherTest> that was what I meant with that, I did not mean the operator
14:18:01 <AnotherTest> Also
14:18:11 <elliott> If you meant \subset or \in or whatever, the arrow is the wrong way around for that.
14:18:20 <AnotherTest> You can't ignore the fact that you need to know serious mathematics before you can understand GR
14:18:29 <elliott> Yes. You also need to know GR.
14:18:40 <AnotherTest> Yes, that's true
14:18:43 <AnotherTest> I read about GR
14:18:45 <elliott> Plenty of mathematicians are completely wrong about physics, because *they are not physicists*.
14:18:49 <AnotherTest> and I learned mathematics
14:18:58 <Phantom_Hoover> AnotherTest, ever heard of a stress-energy tensor?
14:19:25 <AnotherTest> yes?
14:19:34 <AnotherTest> again
14:19:42 <AnotherTest> It's newtonian physics
14:19:48 <AnotherTest> I was talking about GR
14:20:02 <Phantom_Hoover> You don't know shit about GR; please go away.
14:20:15 <AnotherTest> nor do you, I'm guessing
14:20:17 <elliott> To quote Greek philosopher Wikipedia, "The stress-energy tensor is the source of the gravitational field in the Einstein field equations of general relativity, just as mass is the source of such a field in Newtonian gravity."
14:20:50 <AnotherTest> and since when is wikipedia always our God of knowledge that is the only correct answer to any question?
14:21:05 <elliott> http://www.google.co.uk/search?sourceid=chrome&ie=UTF-8&q=stress-energy+tensor+general+relativity
14:21:11 <elliott> http://math.ucr.edu/home/baez/gr/stress.energy.html
14:21:17 <Phantom_Hoover> Oh, do please refer me to a source which says the stress-energy tensor is a Newtonian thing.
14:21:19 <elliott> Is John Baez a reliable enough source for you? He's kind of well-known.
14:21:27 <AnotherTest> I'm even doubting whether you understand what a momentum is, Phatum
14:21:30 <elliott> "General Relativity Tutorial - The Stress-Energy Tensor"
14:21:33 <hagb4rd> im sure everyone will enjoy your expertise in serious mathematics
14:21:39 <elliott> "Lecture 12: The Stress Tensor and the Relativistic Stress-Energy Tensor" http://people.hofstra.edu/Stefan_Waner/diff_geom/Sec12.html
14:21:58 <elliott> "ON THE VACUUM STRESS-ENERGY. TENSOR IN GENERAL RELATIVITY"
14:22:09 <elliott> "I have been trying to grasp the basics of "stress-energy tensor" and most information I have found starts above my head. I hope the basic concept can be put in English words without a ton of complicated math. It seems like more then just mass is being considered in GR when calculating the curvature of spacetime. Is that what it is all about? Links and explanations welcome."
14:22:24 <elliott> AnotherTest: Are you seriously going to deny it's relevant to GR just because I quoted Wikipedia facetiously?
14:22:31 <AnotherTest> no
14:22:40 <AnotherTest> obviously not
14:22:46 <AnotherTest> I didn't say it's unrelevant
14:22:53 <elliott> <Phantom_Hoover> AnotherTest, ever heard of a stress-energy tensor?
14:22:53 <elliott> <AnotherTest> yes?
14:22:53 <elliott> <AnotherTest> again
14:22:53 <elliott> <AnotherTest> It's newtonian physics
14:22:53 <elliott> <AnotherTest> I was talking about GR
14:23:02 <AnotherTest> Yes?
14:23:03 <elliott> That would be an unreasonable response by someone who believes that stress-energy tensors are relevant to GR.
14:23:16 <AnotherTest> I don't see how
14:23:29 <AnotherTest> anyway, I'll stop wasting my time here
14:23:39 <elliott> AnotherTest: "I'm making a cake." "Heard of sugar?" "Umm, that's chocolate, I was talking about cake."
14:23:42 <AnotherTest> I have some stuff to study
14:23:47 <elliott> "You realise cakes have sugar too?" "I never denied that!"
14:24:14 <AnotherTest> since chocolate contains sugar your argument is futile
14:24:26 -!- AnotherTest has left.
14:24:36 <elliott> Phantom_Hoover: X-D
14:24:46 -!- elliott has set topic: <AnotherTest> since chocolate contains sugar your argument is futile | http://codu.org/logs/_esoteric/.
14:24:56 -!- elliott has set topic: <AnotherTest> since chocolate contains sugar your argument is futile * AnotherTest (~Test@94-224-27-107.access.telenet.be) has left #esoteric | http://codu.org/logs/_esoteric/.
14:25:15 <Phantom_Hoover> :')
14:25:30 <elliott> That was so worth it for this laughter.
14:33:20 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 , Skype: patashu0 .).
14:39:03 -!- derdon has joined.
14:39:43 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
14:45:50 -!- lifthras1ir has joined.
14:49:19 -!- comex` has joined.
14:50:26 -!- comex has quit (*.net *.split).
14:50:27 -!- lifthrasiir has quit (*.net *.split).
14:54:53 -!- elliott has quit (Remote host closed the connection).
14:55:10 -!- elliott has joined.
14:56:47 <elliott> fizzie: Is there a way to get the workspace focused automatically when a window tries to raise itself, e.g. Chromium opens a new tab after "chromium ..."?
14:56:57 <elliott> Right now I have to switch to that desktop manually after clicking a URL in XChat.
14:59:13 <hagb4rd> try this extension: https://chrome.google.com/extensions/detail/hjaooagfdhdhmbfchnkhggjmacjlacla
14:59:35 <hagb4rd> afaik there is no native implementation yet
15:00:25 <elliott> I like its behaviour on middle-clicking and so on; it's when other applications cause a new tab to be added by invoking the chromium command. Chromium already tries to raise the window in that situation, but xmonad doesn't heed the request by switching workspace.
15:08:19 -!- copumpkin has joined.
15:09:28 -!- Phantom_Hoover has quit (Ping timeout: 240 seconds).
15:22:19 -!- Phantom_Hoover has joined.
15:23:06 <elliott> Phantom_Hoover just keeps hoovin' those phantoms.
15:26:07 -!- nooga has joined.
15:26:09 <nooga> http://www.jnode.org/node/132 THE HORROR
15:27:44 <nooga> Running JNode in qemu: "After that, the virtual machine started and after some three minutes, the jnode prompt appeared. " -- the author
15:27:52 <elliott> JNode is actually pretty cool, modulo the choice of language.
15:27:59 <nooga> that's right
15:28:06 <elliott> It's assembly VM + completely managed code.
15:28:08 <elliott> Not a single bit of C.
15:28:11 <nooga> _three minutes_
15:28:23 <elliott> nooga: You realise that qemu is really ridiculously slow without KVM?
15:28:32 * elliott bets that the Ubuntu LiveCD wouldn't boot in qemu in that time.
15:29:22 <elliott> Deewiant: ESC+arrow keys to inter-word navigation; why doesn't alt+arrow keys
15:29:30 <elliott> Deewiant: Worked in Xfce's terminal :(
15:29:35 <elliott> They just move the cursor normally instead.
15:29:35 <nooga> elliott: you're right, the idea is great and I'm amazed that it's running awt and programs like jedit
15:29:41 <nooga> but Java
15:29:44 <elliott> I've tried setting modifier: alt and meta8: true and all that.
15:29:58 <elliott> nooga: They should do it all in Clojure or something :p
15:30:09 <elliott> That would actually be really interesting; STM in the kernel.
15:32:23 <nooga> but Clojure is for JVM and hasn't got any syntax
15:34:04 <elliott> nooga: Well, I was intentionally using the JVM thing to keep in the same basic theme as JNode but with a nicer language.
15:34:08 <elliott> nooga: And sure it's got syntax, tons of it.
15:34:44 <elliott> Not only is there all this () [] "" ` ~ @ stuff, but every macro extends the abstract syntax of the language in a very real way.
15:34:55 <elliott> (I'm not a Clojure programmer, mind you, so don't take this as an outright endorsement or anything.)
15:35:54 <nooga> still looks like sexps
15:36:16 <nooga> i just brwsed through a src of some huge program written in clojure
15:36:46 <nooga> and it's not very appealing
15:36:51 <elliott> Yes, but saying "sexps -> no syntax" is a very shallow view of things.
15:37:20 -!- sebbu2 has joined.
15:37:21 -!- sebbu2 has quit (Changing host).
15:37:21 -!- sebbu2 has joined.
15:37:22 <elliott> Even if you count modifying the readtable to add new lexical syntax as cheating, syntax is about /trees/, not just characters. So macros are definitely adding syntax, because they're changing the valid forms of the language.
15:37:29 <nooga> okay, I know, it was an exaggeration
15:37:35 <elliott> I personally find Clojure's lexical syntax a bit ugly, but that doesn't mean it doesn't have any of it :P
15:37:58 <nooga> right
15:38:28 -!- sebbu has quit (Ping timeout: 240 seconds).
15:38:39 <Phantom_Hoover> raaaaaaa clojure
15:39:35 * elliott prepares for round 2 of Phantom_Hoover being really angry about languages he doesn't know shit about; subtitle: "Clojure through the lens of somebody who learned everything they know about Clojure from a post on the Loper OS blog".
15:39:45 <Phantom_Hoover> wha
15:39:47 <Phantom_Hoover> i did?
15:39:51 <Phantom_Hoover> Also I was joking?
15:40:25 <elliott> SUUUUUUUUUUUUUUUUUUURE
15:41:00 <elliott> Phantom_Hoover: Just like Hitler was "joking" when he killed all the jews?!?!?!?!
15:41:03 <elliott> Q.E.D.
15:41:15 <Phantom_Hoover> Hipster Hitler did it ironically, duh.
15:42:04 <elliott> Phantom_Hoover: Don't, that comic got old approximately 3 minutes before it was created.
15:42:24 <Phantom_Hoover> — Elliott "Hipster Hitler is the best thing" Hird.
15:42:39 <elliott> Phantom_Hoover: IT WAS THE BEST FOR ABOUT 6 MINUTES AFTER IT GOT OLD
15:42:50 <elliott> `pastlog <Phantom_Hoover> I suck\.
15:42:58 <Phantom_Hoover> — That "Was a litmus test, I despise" DS9
15:43:10 <HackEgo> No output.
15:43:19 <elliott> "— That "Was a litmus test, I despise" DS9" --Phantom_Hoover, also *you're* a litmus test.
15:43:25 <elliott> Also HOW DO YOU SLEEP UNTIL THE BEGINNING
15:43:27 <elliott> OF THE NEXT MINUTE
15:43:31 <elliott> WITH HASKELL'S FUCKING TIME LIBRARY
15:43:32 <elliott> HOW HARD
15:43:33 <elliott> CAN THIS
15:43:34 <elliott> POSSIBLY
15:43:34 <elliott> BE
15:43:34 -!- hagb4rd has quit (Read error: Operation timed out).
15:43:36 <elliott> Phantom_Hoover: You do it???
15:43:39 <Phantom_Hoover> porety
15:44:04 <elliott> Porety.
15:44:17 <elliott> I'm going to publish it, the title is "Also HOW DO YOU SLEEP UNTIL THE BEGINNING
15:44:19 <elliott> OF THE NEXT MINUTE
15:44:23 <elliott> WITH HASKELL'S FUCKING TIME LIBRARY
15:44:24 <elliott> HOW HARD
15:44:24 <elliott> CAN THIS
15:44:25 <elliott> POSSIBLY
15:44:26 <elliott> BE".
15:44:35 <elliott> I will demand the title be printed as well as the poerm.
15:44:57 <Phantom_Hoover> *porem
15:45:00 <elliott> sory
15:45:11 <Phantom_Hoover> *sroy
15:48:12 <elliott> sroy
15:59:47 <elliott> Phantom_Hoover: A new minute in UTC is a new minute in every timezone, right?
15:59:56 <elliott> Since there's no sub-minute deltas.
16:00:05 <Phantom_Hoover> I'm going to go for 'yes'.
16:00:31 <elliott> Phantom_Hoover: I was just checking there were no eddies!
16:05:23 -!- azaq23 has joined.
16:05:32 -!- azaq23 has quit (Max SendQ exceeded).
16:06:06 -!- augur has quit (Remote host closed the connection).
16:06:13 -!- azaq23 has joined.
16:06:36 <elliott> @hoogle (Real a, Real b) => a -> b
16:06:36 <lambdabot> Data.Fixed mod' :: Real a => a -> a -> a
16:06:36 <lambdabot> Prelude realToFrac :: (Real a, Fractional b) => a -> b
16:06:36 <lambdabot> Unsafe.Coerce unsafeCoerce :: a -> b
16:22:53 <tswett> elliott: get the amount of time until the beginning of the next minute, and then sleep for that long?
16:24:15 -!- MSleep has changed nick to MDude.
16:26:12 <elliott> tswett: Yes, that's the hard part, in the presence of leap seconds :) But apparently the time library just punts on them, so that's what I went with in the end.
16:26:25 <elliott> http://stackoverflow.com/questions/8575118/sleeping-until-the-start-of-the-next-minute
16:35:00 <elliott> @pl \(i,n) -> fmap ((,) i) n
16:35:00 <lambdabot> uncurry (fmap . (,))
16:35:55 <elliott> @hoogle \(i,w) -> (,) i <$> spawn w
16:35:56 <lambdabot> Parse error:
16:35:56 <lambdabot> \(i,w) -> (,) i <$> spawn w
16:35:56 <lambdabot> ^
16:36:03 <elliott> @pl \(i,w) -> (,) i <$> spawn w
16:36:04 <lambdabot> uncurry ((. spawn) . (<$>) . (,))
16:36:12 <elliott> @pl \(i,w) -> fmap ((,) i) $ spawn w
16:36:12 <lambdabot> uncurry ((. spawn) . fmap . (,))
16:36:17 <elliott> hmph
16:36:24 <elliott> @pl \(i,w) -> fmap ((,) i) w
16:36:24 <lambdabot> uncurry (fmap . (,))
16:38:55 <elliott> @hoogle (a, m b) -> m (a, b)
16:38:55 <lambdabot> No results found
16:39:28 <copumpkin> :t uncurry (fmap . (,))
16:39:29 <lambdabot> forall a (f :: * -> *) a1. (Functor f) => (a1, f a) -> f (a1, a)
16:39:49 <copumpkin> aka weakness
16:41:35 <elliott> copumpkin: oh, neat
16:41:44 <elliott> that will totally shorten my code! :P
16:41:47 <copumpkin> well, it's called strength
16:41:52 <copumpkin> in most places I've seen it
16:42:08 <copumpkin> http://en.wikipedia.org/wiki/Strong_monad
16:43:01 <elliott> We should put those diagrams in the Haddocks for Monad to scare people off even more.
16:47:46 <elliott> Hmm, it would be really nice to be able to run an IO action when a TChan is collected.
16:47:54 <elliott> (So that you could kill off the thread writing to it.)
16:47:56 <elliott> Oh, er, you can do that, I guess.
16:48:02 <elliott> The thread writing to it just has to go through a weak pointer.
16:48:04 * elliott goes to implement it.
16:49:41 -!- augur has joined.
16:59:59 -!- sadhu has joined.
17:00:22 <elliott> It occurs to me that this is probably not considered acceptable use of finalisers.
17:00:35 -!- sadhu has left ("Konversation terminated!").
17:00:42 <elliott> Hey copumpkin, is it evil to use Weak to kill the thread writing to a TChan when all its readers disappear?
17:00:48 <elliott> (A thread that runs in IO.)
17:08:40 <copumpkin> probably, but I dunno
17:08:50 <elliott> @hoogle a -> (a -> b) -> (a,b)
17:08:50 <lambdabot> Control.Monad.Writer.Class listens :: MonadWriter w m => (w -> b) -> m a -> m (a, b)
17:08:50 <lambdabot> Control.Monad.Writer.Lazy listens :: MonadWriter w m => (w -> b) -> m a -> m (a, b)
17:08:51 <lambdabot> Control.Monad.Writer.Strict listens :: MonadWriter w m => (w -> b) -> m a -> m (a, b)
17:08:57 <elliott> Huh, I swear there's an Arrow thing for that.
17:09:05 <elliott> @hoogle a b c -> a b (b,c)
17:09:05 <lambdabot> Control.Arrow (&&&) :: Arrow a => a b c -> a b c' -> a b (c, c')
17:09:05 <lambdabot> Control.Monad.Trans.Maybe liftListen :: Monad m => (m (Maybe a) -> m (Maybe a, w)) -> MaybeT m a -> MaybeT m (a, w)
17:09:05 <lambdabot> Data.Graph.Inductive.Query.MaxFlow maxFlowgraph :: (DynGraph gr, Num b, Ord b) => gr a b -> Node -> Node -> gr a (b, b)
17:09:22 <elliott> Oh, (id &&& foo) I guess.
17:11:08 <Deewiant> ?ty id &&& (+1)
17:11:08 <lambdabot> forall b. (Num b) => b -> (b, b)
17:11:09 <Deewiant> ?ty ap (,) (+1)
17:11:10 <lambdabot> forall a. (Num a) => a -> (a, a)
17:11:14 <Deewiant> Take your pick.
17:13:37 <elliott> Deewiant: It's actually (a -> m b) -> a -> m (a, b) I want :p
17:13:43 <elliott> @hoogle (a -> m b) -> a -> m (a,b)
17:13:44 <lambdabot> No results found
17:14:43 <Deewiant> ?pl \f x -> f x >>= \y -> return (x,y)
17:14:43 <lambdabot> (`ap` ((return .) . (,))) . ((>>=) .)
17:14:49 <Deewiant> elliott: There you go
17:15:29 <elliott> Deewiant: Perfect!
17:16:00 <Deewiant> ?pl \x -> f x >>= return . (,) x
17:16:01 <lambdabot> liftM2 (>>=) f ((return .) . (,))
17:16:52 <Deewiant> ?pl \f x -> fmap ((,) x) (f x)
17:16:52 <lambdabot> liftM2 fmap (,)
17:16:53 <elliott> <hiptobecubic> xmonad is nice but i certainly wouldn't describe it as "fast" <Clint> no, certainly not <Clint> such slowness does not occur under awesome <hiptobecubic> The slowness doesn't bother me, it's not like it's slower than i am <Clint> it takes up valuable brain cycles by being noticeable
17:16:55 <Deewiant> ?ty liftM2 fmap (,)
17:16:55 <elliott> Neat, #xmonad has trolls
17:16:56 <lambdabot> forall a (f :: * -> *) a1. (Functor f) => (a1 -> f a) -> a1 -> f (a1, a)
17:17:02 <Deewiant> elliott: ?
17:17:05 <Deewiant> ^
17:17:05 <elliott> Deewiant: <elliott> <hiptobecubic> xmonad is nice but i certainly wouldn't describe it as "fast" <Clint> no, certainly not <Clint> such slowness does not occur under awesome <hiptobecubic> The slowness doesn't bother me, it's not like it's slower than i am <Clint> it takes up valuable brain cycles by being noticeable
17:17:08 <elliott> Oh
17:17:13 <elliott> Right, that would work
17:17:23 <Deewiant> ?ty liftA2 fmap
17:17:24 <lambdabot> forall a b (f :: * -> *) (f1 :: * -> *). (Functor f, Applicative f1) => f1 (a -> b) -> f1 (f a) -> f1 (f b)
17:17:36 <elliott> liftM2 fmap (,) (getNext . getSource) -- better or worse than (\i -> liftM ((,) i) . getNext . getSource $ i)?! :p
17:18:09 <Deewiant> If you used liftM in the original, use it there too: 'liftM2 liftM'
17:18:17 <elliott> :t liftM2 liftM
17:18:18 <lambdabot> forall a1 r (m :: * -> *) (m1 :: * -> *). (Monad m, Monad m1) => m1 (a1 -> r) -> m1 (m a1) -> m1 (m r)
17:18:34 <elliott> That, um.
17:18:35 <elliott> That is impressive.
17:18:45 <Deewiant> ?ty liftM3 liftM2 liftM
17:18:46 <lambdabot> forall a2 r (m :: * -> *) a1. (Monad m) => ((a1 -> r) -> m (a2 -> a1)) -> ((a1 -> r) -> m a2) -> (a1 -> r) -> m r
17:18:58 <Deewiant> ?ty liftM4 liftM3 liftM2 liftM
17:18:59 <lambdabot> forall a3 r a2. (((a2 -> r) -> a2 -> r) -> (a3 -> a2 -> r) -> a3 -> a2) -> (((a2 -> r) -> a2 -> r) -> (a3 -> a2 -> r) -> a3) -> ((a2 -> r) -> a2 -> r) -> (a3 -> a2 -> r) -> r
17:19:08 <Deewiant> The monads just keep on disappearing. :-/
17:19:24 <elliott> @ty liftM liftM2 liftM3 liftM4
17:19:24 <lambdabot> forall (m :: * -> *) (m1 :: * -> *) a1 a2 a3 a4 r (m2 :: * -> *). (Monad m, Monad m1, Monad m2) => m (m1 (a1 -> a2 -> a3 -> a4 -> r)) -> m (m1 (m2 a1)) -> m (m1 (m2 a2) -> m1 (m2 a3 -> m2 a4 -> m2 r)
17:19:25 <lambdabot> )
17:19:30 <elliott> Deewiant: FTFY
17:19:33 <elliott> :t liftM liftM2 liftM3 liftM4 liftM5
17:19:33 <lambdabot> forall (m :: * -> *) a1 a2 a3 a4 a5 r (m1 :: * -> *). (Monad m, Monad m1) => ((a1 -> a2 -> a3 -> a4 -> a5 -> r) -> m1 a1 -> m (m1 a2)) -> (a1 -> a2 -> a3 -> a4 -> a5 -> r) -> (m1 a1 -> m (m1 a3)) ->
17:19:33 <lambdabot> m1 a1 -> m (m1 a4) -> m (m1 a5) -> m (m1 r)
17:19:35 <elliott> :t liftM liftM2 liftM3 liftM4 liftM5 liftM6
17:19:36 <lambdabot> Not in scope: `liftM6'
17:19:40 <elliott> Okay, that's as monad as you can get.
17:19:43 <elliott> Challenge: Come up with a use for it.
17:30:31 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
17:47:44 <elliott> :t splitAt
17:47:45 <lambdabot> forall a. Int -> [a] -> ([a], [a])
17:57:57 <elliott> :t foldl (<*>) (pure f)
17:57:58 <lambdabot> Occurs check: cannot construct the infinite type: b = a -> b
17:57:59 <lambdabot> Expected type: f (a -> b)
17:57:59 <lambdabot> Inferred type: f b
17:58:02 <elliott> Knew it.
17:58:39 <elliott> @hoogle ([a] -> b) -> [f a] -> f [b]
17:58:39 <lambdabot> No results found
17:58:41 <elliott> :(
17:58:46 <elliott> I assign Deewiant to the case.
18:00:50 <elliott> :t let apply' f [] = pure f; apply' f (x:xs) = ($) <$> x <*> apply' f xs in apply'
18:00:51 <lambdabot> forall b (f :: * -> *). (Applicative f) => b -> [f (b -> b)] -> f b
18:01:01 <elliott> Oh, duh.
18:01:04 <elliott> :t let apply' f [] = pure f; apply' f (x:xs) = flip ($) <$> x <*> apply' f xs in apply'
18:01:05 <lambdabot> Occurs check: cannot construct the infinite type: b = a -> b
18:01:05 <lambdabot> Expected type: f (a -> b)
18:01:05 <lambdabot> Inferred type: f b
18:01:14 <elliott> Oh, duh.
18:01:43 <elliott> :t let apply' f [] = pure f; apply' f (x:xs) = (\x f' xs -> f' (x:xs)) <$> x <*> apply' f xs in apply'
18:01:44 <lambdabot> forall a t (f :: * -> *). (Applicative f) => ([a] -> t) -> [f a] -> f ([a] -> t)
18:02:22 <elliott> :t let apply' f [] = pure f; apply' f (x:xs) = (\x f' xs -> f' (x:xs)) <$> x <*> apply' f xs; apply f xs = apply' f xs <*> [] in apply
18:02:23 <lambdabot> forall a b. ([a] -> b) -> [[a]] -> [b]
18:02:41 <elliott> :t let apply' f [] = pure f; apply' f (x:xs) = (\x f' xs -> f' (x:xs)) <$> x <*> apply' f xs; apply f xs = ($ []) <$> apply' f xs in apply
18:02:42 <lambdabot> forall a b (f :: * -> *). (Applicative f) => ([a] -> b) -> [f a] -> f b
18:05:03 <elliott> Oh, hmm
18:05:06 <elliott> @type sequenceA
18:05:06 <lambdabot> Not in scope: `sequenceA'
18:05:11 <elliott> @hoogle sequenceA
18:05:11 <lambdabot> Data.Traversable sequenceA :: (Traversable t, Applicative f) => t (f a) -> f (t a)
18:05:11 <lambdabot> Data.Foldable sequenceA_ :: (Foldable t, Applicative f) => t (f a) -> f ()
18:05:14 <elliott> Of course :)
18:12:41 <elliott> Deewiant: What's "status" in Finnish; alternatively, "state" as in state of affairs (not as in nation state)
18:13:09 <Deewiant> tilanne; tila
18:14:44 <elliott> Deewiant: Hmm, there are worse names
18:15:52 <elliott> pikhq_: Pls explain the subtle differences in meaning of 状態, 様子 and 有様 kthxbai
18:16:13 * elliott 's naming algorithm first just translates the obvious purpose of the program into a bunch of languages and picks the prettiest for consideration.
18:22:34 <elliott> Wait, ISTR Deewiant knowing Japanese.
18:22:48 <Deewiant> Not that much. :-P
18:23:37 <elliott> Google Translate thinks the last one is "likeness" and lists "appearance" as the second meaning for the second (backed up by Wiktionary, although not quite the second there).
18:23:46 <elliott> So I guess the first one is the most accurate translation but EH, EH I say.
18:26:01 <Deewiant> http://tangorin.com/dictionary.php?search=state
18:26:16 <pikhq_> elliott: "jōnō", "yōsu", and "yūsu"?
18:26:24 <elliott> pikhq_: Yes. Something like that anyway.
18:26:36 <pikhq_> elliott: Those are basically synonyms.
18:26:42 <elliott> Jotai, yosu, and arisama, apparently, modulo some fucking bars over os I can't be arsed to type.
18:26:45 <pikhq_> Might be a bit of distinction in connotation, but eh.
18:26:46 <elliott> So sayeth Wiktionary.
18:26:54 <pikhq_> Oh, the *other* plausible reading.
18:27:03 <elliott> "yusu", "arisama", what's the difference!
18:27:14 <elliott> The Japanese just kind of pick one or two vowels and pronounce those.
18:27:27 <pikhq_> Kunyomi vs. onyomi is all.
18:27:55 * elliott wants to use Yosu because it's the prettiest but doesn't want to if the connotations imply "appearance". :(
18:28:06 <pikhq_> Anyways, "status" or "state of affairs" you want?
18:28:22 <pikhq_> 様子 is the one I'd go with.
18:29:25 <pikhq_> It *also* suggests "appearance", but the primary meaning is indeed status.
18:30:41 <elliott> What does that one romanise as :P
18:30:48 <pikhq_> yōsu
18:30:52 <elliott> Yaaaaaaaay
18:31:01 <pikhq_> And that's not me just guessing a plausible reading. :P
18:31:02 <Deewiant> And if you won't use the macron, that's yousu
18:31:31 <pikhq_> And if you want pikhq Romanisation, that's "yousu".
18:34:27 <pikhq_> ... Excuse me for a bit while I realise I'm a moron.
18:34:50 <pikhq_> 状態 is in no way read じょうの. No no no. That's stupid stupid stupid.
18:36:56 <pikhq_> 有様's just read weird.
18:37:15 <pikhq_> But WTF じょうのう
18:40:39 <elliott> pikhq_: wat
18:40:44 <elliott> I should probably install Japanese fonts.
18:40:50 <pikhq_> elliott: WTFing at myself is all.
18:40:54 <elliott> Deewiant: Nobody says Toukyo :P
18:40:58 <pikhq_> And probably needed coffee.
18:41:17 <Deewiant> elliott: Nobody writes that, but they do say that :-P
18:41:33 <elliott> Deewiant: WELL DON'T PRONOUNCE MY PACKAGE NAME THEN
18:41:38 <pikhq_> elliott: "Toukyou", and that's because English speakers like omitting the macrons making it impossible to figure out WTF they're talking about.
18:41:41 <Deewiant> Toukyou even, I think.
18:42:21 <pikhq_> Well, 'cept that if you can't figure out what "Tokyo" refers to you're alreadly hopeless. :P
18:45:23 <elliott> I might call it Yousu anyway, ONLY TIME WILL TELL.
18:45:51 <olsner> elliott: imagine a language where all sounds are written �
18:45:57 <elliott> olsner: :D
18:46:25 <elliott> @tell shachaf I was joking about FRPzen2, but I started writing a little ditty to output my dzen2 status line thing, and once I realised I had literally reinvented the Discrete type in the process, switched to reactive-banana.
18:46:26 <lambdabot> Consider it noted.
18:48:10 <elliott> @pl (f >=> g) $ (h >=> i) x
18:48:10 <lambdabot> f >=> g $ (h >=> i) x
18:48:14 <elliott> :-|
18:48:35 <pikhq_> elliott: You could also do the "hilarious" method of calling it ステイタス, suteitasu.
18:48:57 <pikhq_> Which appears to be the computer terminology "status".
18:49:27 <olsner> I should start spelling it stäjtas in swedish too
18:51:32 <elliott> http://blog.willdonnelly.net/2009/03/14/runtime-scheme-detection/ This is cool.
18:51:45 <elliott> (Completely portable Scheme interpreter detection, no SRFIs.)
18:59:08 <Gregor> NO RACKET? MUST SUCK.
19:01:48 -!- comex` has changed nick to comex.
19:01:58 <elliott> Gregor: "mzscheme", you moron :P
19:02:04 <elliott> It predates the name change.
19:02:29 <elliott> > mod' (14.3) 14
19:02:30 <Gregor> ... but Racket was PLT Scheme ... did it have another name change before then?
19:02:30 <lambdabot> 0.3000000000000007
19:02:38 <elliott> Gregor: MzScheme was PLT Scheme's Scheme interpreter.
19:02:46 <elliott> PLT Scheme itself was a whole suite of things, including the DrScheme IDE, etc.
19:02:50 <Gregor> Ohhhhhhh right.
19:03:03 <Gregor> I never even ran PLT Scheme until it was Racket, so I don't know these things
19:03:32 <Gregor> Effin' lack of tongue-smiley.
19:03:35 <Gregor> It's drivin' me crazy.
19:04:52 <shachaf> @messages
19:04:52 <lambdabot> elliott said 18m 27s ago: I was joking about FRPzen2, but I started writing a little ditty to output my dzen2 status line thing, and once I realised I had literally reinvented the Discrete type in
19:04:52 <lambdabot> the process, switched to reactive-banana.
19:05:12 * shachaf has never used reactive-banana or any FRP thing, really.
19:05:22 <Gregor> "Reactive-banana" is also elliott's porn name.
19:07:55 -!- Ngevd has joined.
19:09:34 <Ngevd> Hello!
19:09:50 <Ngevd> I think I use the most hated Ubuntu distribution in the past few years
19:09:55 <Ngevd> 11.04
19:10:15 <Phantom_Hoover> I note that fortune considers Dawkins offensive, but allows Solanas into the main set.
19:13:57 <elliott> shachaf: You sleep polyphasically or are insomniac; pick one.
19:14:48 <Phantom_Hoover> He's relativistically time-tilated.
19:14:50 <Phantom_Hoover> *dilated
19:14:52 <Phantom_Hoover> how
19:15:27 <elliott> shachaf: By the way, I found two uses for (>=>) at once: (compile >=> actuate) . (sequence >=> run . T.sequenceA . map widgetValue)
19:19:07 -!- zzo38 has joined.
19:23:36 <zzo38> For translate Japanese texts, I use WWWJDIC it works better.
19:24:53 <shachaf> elliott: It's morning.
19:25:07 <shachaf> elliott: ...I was awake until ~04:00.
19:26:41 <shachaf> elliott: Speaking of either sleeping polyphasically or insomnia, which one applies to you?
19:28:15 <Phantom_Hoover> elliott's like Anne Poole.
19:28:29 <Phantom_Hoover> (That's not a spoiler, to preëmpt the inevitable.)
19:29:43 <elliott> shachaf: Polyphasic sleep? That's, like, a regular schedule, man.
19:29:50 <elliott> I'm too free-thinking for that kind of thing!
19:29:57 <elliott> Wake up sleeple.
19:30:10 <shachaf> Dictator.
19:38:55 -!- GreaseMonkey has joined.
19:43:09 -!- Phantom_Hoover has quit (Ping timeout: 240 seconds).
19:52:43 <elliott> shachaf: Hey, convince me to just make this a status-bar-printer and not a full status bar. Please.
19:53:00 <shachaf> elliott: Imagine how much fun writing a full status bar would be.
19:53:42 <elliott> :(
19:53:56 <fizzie> Imagine the throngs of people on the Red Square in Moscow, hailing you as the creator of the best status bar.
19:54:08 -!- tuubow has joined.
19:54:29 <shachaf> elliott: That was supposed to inspire you not to want to do it!
19:55:36 <elliott> fizzie: Hey, if I make this thing just manage a dzen2 pipe, you're legally obligated(tm) to use it. It would even work with dbus!
19:56:26 <elliott> Also clickables, I have the best solution for clickables.
19:57:05 <shachaf> elliott: Clicking?
19:57:10 <elliott> Well, yes.
19:57:15 <shachaf> I knew it.
19:57:20 <elliott> But also more than that.
20:00:44 <elliott> fizzie knows legal obligation(tm) when he sees it.
20:01:53 -!- derrik has joined.
20:05:09 -!- Phantom_Hoover has joined.
20:07:18 -!- derrik has quit (Ping timeout: 252 seconds).
20:10:42 <Phantom_Hoover> OK
20:10:43 <Phantom_Hoover> http://www.rte.ie/news/news1pm/player.html?20111220,3146924,3146924,flash,257
20:10:55 <Phantom_Hoover> Father Ted is actually a documentary, it seems.
20:26:57 -!- Ngevd has quit (Ping timeout: 276 seconds).
20:29:44 -!- monqy has joined.
20:29:57 <fizzie> Just a heads-up, we're going to be fungotless for a day; they're switching our interwebs tomorrow, and want me to plug the new VDSL2 box in already today so that when they (at some unspecified time tomorrow) connect the tubes, they can test that it works. And I really can't be bothered copying the whole 627 megabytes of fungot to some remote place to temporarily run it from. It's just a day, after all.
20:29:57 <fungot> fizzie: no, of the house, so he wasn't joking i don't bolivia! we're the last! it is!
20:30:07 <fizzie> fungot: Don't take it so hard.
20:30:07 <fungot> fizzie: to the worm he's actually right, the village, you spend the night, but this is the way, myth, god created the universe!
20:33:05 <Phantom_Hoover> Poor fungot.
20:33:05 <fungot> Phantom_Hoover: i know! i'll assemble a prize, finance minister, the new tech to build a time like a good spot of tea, then, why?
20:33:09 <elliott> fizzie: You realise we've had fungot outages of way more than a day before? :p
20:33:09 <fungot> elliott: the one copying serron is still alive! are you okay?! greedo, old general, ex machina about now the equation is j+s+k does not equal 180 degrees
20:33:23 <Phantom_Hoover> fungot, we can have a last spot of tea, yes.
20:33:23 <fungot> Phantom_Hoover: oh, there's a sign, maybe. she left a bit of a noble way of the most secure and well-guarded buildings in the world, we should at the end of the world, we should at a time like a good spot.
20:33:27 <fizzie> elliott: Yes, but they've been unplanned and therefore don't count.
20:33:38 <elliott> fizzie: Does this mean we'll be fizzieless too?
20:33:40 <Phantom_Hoover> fizzie, farewell, friend.
20:33:47 <Phantom_Hoover> By which i mean
20:33:47 <Phantom_Hoover> fungot,
20:33:48 <fungot> Phantom_Hoover: is the balrog following in the footsteps of another very special date. please, put the black! now, where's the fun! i wanted another go, in luxury in her room
20:34:01 -!- oerjan has joined.
20:34:19 <fizzie> I think I can manage to run irssi somewhere, it's less of a hassle. And then IRC up via the tellyphone. Though I suppose I'll be only disconnecting the place near sleep-time anyway.
20:35:41 <elliott> hi oerjan
20:35:50 <oerjan> hi elliott
20:35:59 <elliott> fizzie: Does your xmonad-dzen stuff have a: License(tm)?
20:36:07 <elliott> Only I'm reading it for, uh, inspiration.
20:36:30 <fizzie> "Inspiration". More like... uh.. dunspiration. (What's the opposite of inspiration?)
20:37:05 <Phantom_Hoover> Exspiration.
20:37:09 <fizzie> I don't think it has a statement yet, but maybe you could treat it as under the MIT license. (Was that a sane one? I can never remember them.)
20:37:11 <elliott> fizzie: Well, you see, I don't know dzen2 syntax. :p
20:37:15 <fizzie> Perspiration.
20:37:20 <Phantom_Hoover> Expiration, I mean.
20:37:24 <elliott> And yes, the MIT is fairly sane, although BSD2 would be more personally convenient to me.
20:37:43 <fizzie> Well, you can treat it as that too.
20:37:52 <fizzie> I'm easy like that.
20:39:04 <elliott> :t \x -> fromMaybe [x] . lookup x [('^', "^^")]
20:39:05 <lambdabot> Couldn't match expected type `Maybe [Char]'
20:39:05 <lambdabot> against inferred type `[Char]'
20:39:05 <lambdabot> In the expression: "^^"
20:39:15 <elliott> :t \x -> lookup x [('^', "^^")]
20:39:16 <lambdabot> Char -> Maybe [Char]
20:39:23 <elliott> :t \x -> fromMaybe [x] $ lookup x [('^', "^^")]
20:39:24 <lambdabot> Char -> [Char]
20:40:16 -!- augur has quit (Remote host closed the connection).
20:46:09 <elliott> @src IO mempty
20:46:09 <lambdabot> Source not found. Where did you learn to type?
20:47:29 <shachaf> "Haskell provides indexable arrays, which may be thought of as functions whose domains are isomorphic to contiguous subsets of the integers."
20:47:36 <Deewiant> Since when is IO a Monoid
20:47:38 <shachaf> Thanks, Report. Threport.
20:47:52 <shachaf> Deewiant: MONOID IN THE CATEGORY OF ENDOFUNCTORS
20:48:00 <shachaf> (Well, Monoid in Hask.)
20:48:09 <shachaf> Er, endofunctors therein.
20:49:22 -!- Ngevd has joined.
20:53:03 <oerjan> Hello!
20:53:12 <Ngevd> aaaah!
20:53:13 <Ngevd> Hello!
20:53:18 <oerjan> TOO LATE
20:53:32 <elliott> Deewiant: I was expecting a (Monoid a) => Monoid (IO a) thing.
20:53:45 <elliott> <shachaf> "Haskell provides indexable arrays, which may be thought of as functions whose domains are isomorphic to contiguous subsets of the integers."
20:53:49 <elliott> shachaf: instance Ix CReal
20:53:51 <elliott> WHAT NOW, SCIENCE???
20:54:48 <oerjan> science now laughs at your nonterminating Ix instance
20:55:23 <shachaf> elliott: I still think "CReal" ~ s/Int/Real/ "CInt" whenever I see that type.
20:55:23 <oerjan> and prepares the diagonalizer unless you repent
20:56:18 <elliott> shachaf: Me too.
20:56:40 <shachaf> What does the C stand for, anyway?
20:56:57 <shachaf> @quote copumpkin overflow
20:56:57 <lambdabot> copumpkin says: <kmc> do you have a theory where the stack overflow is coming from? <copumpkin> joel spolsky
20:57:23 <elliott> shachaf: Computable.
20:57:44 <shachaf> > let x :: CReal; x = error "WHAT NOW, SCIENCE?" in x
20:57:45 <lambdabot> *Exception: WHAT NOW, SCIENCE?
20:58:57 <shachaf> elliott: I have such a great pun saved up for some argument where I win using Proof by Type-Checker.
20:59:01 <shachaf> Sadly the occasion has not come up.
21:00:23 <elliott> shachaf: Go on.
21:00:39 <shachaf> elliott: No.
21:00:47 <shachaf> You'd better set me up an opportunity for it sometime.
21:00:54 <Phantom_Hoover> Just engineer an opportunity, duh.
21:08:37 <elliott> fizzie: How does one right-align some text with dzen2, anyway?
21:08:40 <elliott> I can't find it in the README.
21:10:09 <fizzie> You start another well-aligned dzen, shacaf-style, and give it "-ta r". :p
21:10:15 <elliott> Wait, you have to invoke a separate program to find out the length of the text in the given font, go to the right, and then step backwards from there?
21:10:16 <elliott> Seriously?
21:10:56 <elliott> This is complete bullshit. fizzie: Will your legal obligation continue if yousu just renders its own widgets rather than shelling out to d "sucks" zen?
21:11:17 <fizzie> IANAL.
21:13:30 <fizzie> There is that undocumented ^ba.
21:13:44 <elliott> Which does what?
21:14:05 <fizzie> You give it a width and an alignment (left/center/right), and it writes a block of that specified width, aligned that way.
21:14:31 <oerjan> `run ls /var/irclogs/_esoteric/????-??-??.txt | tail -1
21:14:39 <HackEgo> ​/var/irclogs/_esoteric/2011-12-20.txt
21:14:46 <oerjan> huh
21:14:49 -!- Phantom_Hoover has quit (Ping timeout: 240 seconds).
21:15:07 * oerjan wonders what went wrong with elliott's experiments then
21:15:11 <elliott> fizzie: So again I have to psychically predict the length of the text >_<
21:15:27 <fizzie> Yes, well, you have to psychically predict an *upper bound* of the length.
21:15:30 <fizzie> That's so different.
21:15:51 <fizzie> I think it might also clip if it is longer.
21:15:56 <fizzie> Maybe.
21:16:02 <fizzie> I haven't tried.
21:16:09 <elliott> fizzie: Yes, but if the size is too big it'll push other widgets away, no?
21:16:17 <elliott> Otherwise you could just specify the screen width.
21:16:33 <fizzie> No, I really think it'll just overtype.
21:16:40 <fizzie> You can overtype with the absolute positioning just fine.
21:17:25 <elliott> fizzie: Well, right; the case is something like a clock, where the length is reasonably bounded, you just CBA to calculate the upper bound.
21:17:50 <fizzie> So maybe position x to 0, then "^ba(screenwidth,_RIGHT)foo^ba()" will put foo right-aligned; and it'll then just overlap if you happened to already write that far in the window.
21:17:55 <fizzie> Again, haven't tried.
21:18:04 * elliott loads http://hackage.haskell.org/package/X11.
21:18:06 <elliott> Purposefully.
21:18:29 <elliott> Although I suppose I could go with gtk too?
21:18:42 <elliott> fizzie now gets to tell me which of gtk and raw Xlib is superior.
21:18:55 <pikhq_> elliott: Perversely, GTK.
21:19:52 <pikhq_> Xlib actually abstracts X quite a deal. Poorly.
21:20:29 <elliott> I don't suppose this Graphics.X11.Xlib.Font stuff will work with Xft.
21:20:39 <elliott> Ah, http://hackage.haskell.org/package/X11-xft.
21:21:25 <elliott> I would use Gtk without thinking, it's just that I bet people like fizzie have these weird preferences where they prefer the widgets of their bar-thingy to look different to the widgets of their applications.
21:21:39 <zzo38> Can Xaw be used?
21:22:33 <pikhq_> zzo38: Technically yes.
21:22:35 <pikhq_> Really, no.
21:22:56 -!- augur has joined.
21:23:11 <zzo38> pikhq_: O, why is that, "Technically yes", "Really, no"
21:24:02 <pikhq_> zzo38: Xaw is comically terrible.
21:25:32 <zzo38> But, xdvi uses Xaw. Yes there are some problems with Xaw but I would like to use something very similar; mostly just by adding a few uses of addition mouse buttons and keyboard control to move the mouse cursor; it should still have hover focus for both windows and widgets but allow it to be adjusted by keyboard too.
21:25:58 <elliott> xdvi uses it, must be good.
21:26:42 <zzo38> (xdvi is a program for print preview; when at FreeGeek I use xdvi whenever I need to preview a document for printing.)
21:29:00 <elliott> fizzie: Are you ANAL enough to comment on whether using Gtk will eliminate your legal obligation(tm)?
21:29:05 * elliott will make all decisions like this in future.
21:29:31 <fizzie> I do not thing I'm going to comment anything about the "legal obligation(tm)" at all.
21:30:23 <elliott> fizzie: I guess I'll have to start dissing speech recognition, then!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
21:32:04 -!- Phantom_Hoover has joined.
21:33:00 <elliott> !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
21:33:10 <zzo38> ???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
21:33:36 <Ngevd> elliott is shocked at the sudden appearance of a ethereal vacuum cleaner
21:33:45 <Phantom_Hoover> ‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽‽
21:34:02 <Ngevd> Stop it all of you
21:34:16 -!- augur has quit (Remote host closed the connection).
21:34:30 <Phantom_Hoover> sex sex sex sex sex sex sex sex sex sex sex sex sex sex sex sex sex sex sex sex sex sex sex sex sex sex sex sex sex sex sex sex sex sex
21:34:36 <Phantom_Hoover> (Optimised to annoy Ngevd.)
21:34:50 <Ngevd> GRAAAAAAAAAAH!
21:35:04 <elliott> `quote read the bible
21:35:07 <HackEgo> 487) <Taneb> So... God has jizzed on everything? <oklopol> have you even READ the bible?
21:35:24 <monqy> im anoy too ;_;
21:35:36 <Phantom_Hoover> Ngevd/monqy otp
21:35:41 <monqy> D:
21:35:49 <Ngevd> Ngenqy
21:35:58 <zzo38> s/sex/six/g
21:36:04 <monqy> thanks
21:36:11 <Phantom_Hoover> s/six/sex/g
21:36:14 <monqy> D:
21:36:15 <Ngevd> As pairings go, Ngenqy scores quite highly in scrabble
21:36:31 <Phantom_Hoover> monqy, you should let him down lightly
21:36:36 <zzo38> Why do you care? "SEX" and "SIX" are both worth the same points in Scrabble.
21:36:52 <monqy> I don't have any Es
21:37:02 <elliott> monqy is annoy because "sex" is so close to "six" and he hates six because that's how old he is True Facts(tm)
21:37:16 <monqy> I thought I was 4...............
21:37:16 <Phantom_Hoover> So... I made monqy sex years old?
21:37:22 <elliott> Yes.
21:37:25 <elliott> Yes you did.
21:37:37 <Phantom_Hoover> D:
21:37:38 <monqy> maybe that was just for days ago
21:38:36 <Ngevd> I will sleep now.
21:38:40 <Ngevd> Tomorrow I shall return.
21:38:44 <zzo38> Well, yes, which words to play in Scrabble, it depend what you have, what you think opponent have, what other words can be made from it, and so on. Only the letters are important; meanings of words is not used. But you also have to know which dictionary you are using (there are a few possible dictionaries used)
21:39:01 <oerjan> `addquote <shachaf> fizzie: What kind of speech recognition do you do? <shachaf> If you only need to recognize famous speeches, like Churchill or something, it should be pretty easy.
21:39:03 <HackEgo> 770) <shachaf> fizzie: What kind of speech recognition do you do? <shachaf> If you only need to recognize famous speeches, like Churchill or something, it should be pretty easy.
21:39:19 <Ngevd> My uncle once pencilled in "ezay" to his dictionary with the definition "word for John in Scrabble"
21:39:56 <elliott> monqy: what is it like being sex years old
21:40:01 <monqy> bad
21:40:13 <Ngevd> sexenteen is much better
21:40:14 <Phantom_Hoover> Cheating at Scrabble, the cornerstone of the van Doorn family fortune.
21:40:37 <Ngevd> Also, new esolang
21:40:50 <Ngevd> Looks...
21:40:53 <Ngevd> NOT ESOTERIC ENOUGH
21:40:57 <monqy> bedfellow free pics?
21:41:16 -!- pikhq_ has quit (Ping timeout: 252 seconds).
21:42:00 <monqy> this sqrt spec
21:42:13 <Ngevd> Also, SLEEP TIEM
21:42:14 -!- Ngevd has quit (Quit: Leaving).
21:42:15 <elliott> createWindow :: Display -> Window -> Position -> Position -> Dimension -> Dimension -> CInt -> CInt -> WindowClass -> Visual -> AttributeMask -> Ptr SetWindowAttributes -> IO Window
21:42:17 <elliott> aaaaaaaaaaaaaaaaa
21:42:21 <elliott> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
21:42:25 <monqy> a
21:42:33 <Gregor> So, merging EgoBot into HackEgo.
21:42:59 <elliott> Gregor: No dooon't.
21:43:04 <elliott> I love both of them so much in their own special ways.
21:43:11 <elliott> You can merge the filesystems but keep my babies alive ;_;
21:43:29 <Gregor> ... dafuq
21:43:40 <Gregor> EgoBot doesn't even have a persistent filesystem
21:43:54 <elliott> Gregor: Well, why not?
21:44:03 <Gregor> Because that's HackEgo's job?
21:44:09 <elliott> You're the one who wants to merge them.
21:44:58 <Gregor> Exactly!
21:45:04 <elliott> Just put all the interpreters in /usr/local/bin/lang, and add /usr/local/bin/lang and /hackenv/bin/lang to EgoBot's $PATH instead of the usual directories.
21:45:10 <elliott> Then addinterp just has to put things in /hackenv/bin/lang.
21:45:27 <elliott> And HackEgo can call upon the interpreters if it wants to with just a lang/bf or whatever.
21:46:39 <Gregor> And then, I can get rid of EgoBot :)
21:46:52 <elliott> Gregor: >:(
21:46:56 <elliott> I will be exceedingly unhappy if you do that.
21:47:26 <elliott> Anyway, EgoBot commands are likely to clash with HackEgo commands, so the most you could do would be to have HackEgo respond to the ! commands. Which means your total savings are exactly one (1) IRC connection.
21:47:30 <zzo38> You could also just make them the same program, with only a single name but supporting both kind of commands.
21:49:14 <Gregor> Mostly I just want to integrate their chroots X-D
21:49:22 <Gregor> I'm running out of space and I have five chroots >_>
21:49:25 <elliott> Gregor: That's what I was telling you how to do... :P
21:50:02 <Gregor> That's what I'm /doing/.
21:50:20 <elliott> Gregor: That's not getting rid of EgoBot, that's merging the chroots and then getting rid of EgoBot.
21:50:24 <elliott> One is clean-up, the other is murder.
21:50:47 <Gregor> Yes, I switched to your plan because you're going to bitch if I merged them.
21:50:57 <elliott> Excellent!
21:51:04 <elliott> That's good, because my plan is the best.
21:51:23 <Gregor> Also it'll be easier to switch EgoBot to UMLBox this way.
21:52:06 <elliott> I don't see why EgoBot has to have a distinct codebase from HackEgo, really; just another IRC connection and a different $PATH. Same hg repo and all that.
21:52:33 <elliott> addinterp/delinterp want to mutate the filesystem, in HackEgo-speak they're just writing out a shebang and a program line to /hackenv/bin/lang/$foo :P
21:55:25 <elliott> Backup to self: http://sprunge.us/KdPO
21:55:29 <elliott> Now to try the Monster.
21:55:55 <elliott> Hmm, I'm totally not up for gtk yet, I'd have to compile it all.
21:56:06 <Gregor> "Backup to self" ... heard of VCS? >_>
21:58:22 <elliott> Gregor: Yes.
21:58:45 <elliott> Gregor: I don't start a repository until I'm over the "OK, how on earth am I going to structure this?" phase.
21:58:51 <elliott> Or every other commit would be "Rewrite completely".
21:59:38 <Gregor> I commit every sneeze to a VCS.
22:03:14 <zzo38> How often do your Haskell programs use Applicative stuff?
22:03:19 * elliott becomes incredibly anal about maintaining a clean and atomic VCS repository as soon as one exists.
22:03:43 <twice11> zzo38: Does using Monads count?
22:04:09 <zzo38> twice11: What I mean is using the Applicative stuff such as <* *> <*> and so on
22:04:53 <twice11> I can't remember when I used those last time...
22:05:51 <elliott> twice11: How do you lift functions?
22:06:05 <elliott> f `liftM` m1 `ap` m2 `ap` m3 -- yesssss
22:06:06 <twice11> classic liftMx
22:06:08 -!- pikhq has joined.
22:06:54 <twice11> That's the fate of people learning monads long before hearing of applicative.
22:07:31 <zzo38> In the dvi-processing package (not yet complete, although it does currently work), I found out I used <* and <*> and <$> a lot more than >>= and I used join sometimes too, and I made a new operator <>>= since I sometimes wanted to use that kind of things
22:08:01 <zzo38> x <>>= f = x >>= ap (<$) f;
22:08:23 <elliott> TBH I wish (<$>) and (<*>) had nicer names.
22:08:36 <elliott> (<*>) is just application, it should have some light name like (*.).
22:08:39 <zzo38> I think the names (<$>) and (<*>) are OK.
22:08:45 <elliott> f $. a *. b *. c
22:08:57 <elliott> They're just a bit too chunky.
22:09:03 <elliott> Although idiom brackets would solve that; (| f a b c |0.
22:09:04 <elliott> ).
22:09:20 <zzo38> Would you ever find the <>>= like I have written, to be useful to you?
22:09:51 <elliott> Not exactly what it does. But ap is just (<*>).
22:10:05 <elliott> x >>= ((<$) <*> f) -- all you need is a symbol for "f".
22:10:31 <zzo38> Yes I know ap is just <*>
22:11:21 <zzo38> Not exactly what it does? Can you elaborate on that please?
22:11:42 <pikhq> :t ap
22:11:42 <lambdabot> forall (m :: * -> *) a b. (Monad m) => m (a -> b) -> m a -> m b
22:11:48 <pikhq> That.
22:12:06 <pikhq> It is the sane function of that type.
22:12:17 <zzo38> pikhq: Yes I know. It is the same as <*> except ap is for monads instead.
22:12:29 <oerjan> :t let x <>>= f = x >>= ap (<$) f in (<>>=)
22:12:30 <lambdabot> forall (m :: * -> *) a b. (Monad m, Functor m) => m a -> (a -> m b) -> m a
22:12:40 <zzo38> For monads I generally use ap or <*> depending on whether or not I need it infix.
22:13:51 <oerjan> elliott: hey that one fits with the (>>= (>>=)) from yesterday
22:13:57 <oerjan> :t (>>= (>>=))
22:13:58 <lambdabot> forall (m :: * -> *) a b. (Monad m) => ((a -> m b) -> m a) -> (a -> m b) -> m b
22:13:59 <zzo38> Example of use of <>>= operation: createDVI n m u = (\h -> docStat { pageHandle = Just h, magnification = m, dviUnits = u }) <$> (openBinaryFile n WriteMode <>>= flip hPutStr "\247\2" <>>= flip writeData u <>>= flip writeData m <>>= flip hPutStr "\7Haskell");
22:17:26 <twice11> so from type and usage, I infer: 'f <>>= x = do val <- x; f val >> return val'
22:18:11 <oerjan> wrong argument order, but yes
22:19:01 <elliott> zzo38: Oops, *not sure exactly
22:19:39 <zzo38> elliott: O, well now you should know isn't it?
22:19:45 <elliott> Yes.
22:21:42 -!- calamari has joined.
22:23:09 -!- Phantom_Hoover has quit (Ping timeout: 240 seconds).
22:24:03 -!- augur has joined.
22:27:14 <oerjan> <elliott> Also HOW DO YOU SLEEP UNTIL THE BEGINNING
22:27:15 <zzo38> Would you ever use that kind of thing?
22:27:27 <oerjan> <elliott> OF THE NEXT MINUTE
22:27:44 <oerjan> you cannot, haskell uses type safety to ensure you always get your full 8 hours
22:29:28 -!- augur has quit (Remote host closed the connection).
22:30:14 -!- azaq23 has quit (Read error: Connection reset by peer).
22:30:23 -!- augur has joined.
22:30:26 -!- augur has quit (Remote host closed the connection).
22:33:27 <zzo38> In relation to the D&D game but outside of it, we were discussing something and thought, the executioner will wake up and might thought it must be "brain fairy" or whatever... because there is money in its place...
22:33:47 <zzo38> Can there make a magic poison that its antidote will be an empty potion?
22:36:43 <coppro> yes, it's called 'dilution'
22:37:22 <zzo38> No, I mean the container is completely empty. And that it is a D&D game.
22:46:10 -!- Phantom_Hoover has joined.
22:47:36 -!- nooga has quit (Ping timeout: 240 seconds).
22:50:09 -!- tuubow has quit (Ping timeout: 240 seconds).
22:51:49 -!- Phantom_Hoover has quit (Ping timeout: 240 seconds).
22:52:13 -!- calamari has quit (Quit: Leaving).
22:59:29 -!- derdon has quit (Remote host closed the connection).
23:01:52 -!- fizzie has quit (Quit: Coyote finally caught me).
23:01:59 -!- NihilistDandy has joined.
23:07:47 -!- fungot has quit (Ping timeout: 252 seconds).
23:24:19 -!- cswords__ has joined.
23:26:49 -!- cswords_ has quit (Ping timeout: 240 seconds).
23:31:09 -!- coppro has quit (Read error: Operation timed out).
23:31:14 -!- coppro has joined.
23:35:00 -!- augur has joined.
23:36:30 <kallisti> oerjan: is there some kind of formula that can determine the maximum number of factors in a factorization for a given number?
23:37:27 <kallisti> an upper bound would be like floor . logBase 2 $ n I think
23:38:17 <oerjan> in a full prime factorization?
23:38:21 -!- augur has quit (Remote host closed the connection).
23:38:39 <oerjan> well then yes that's an upper bound, which also is hit for n = 2^i
23:38:49 <kallisti> oerjan: full factorization with any integer less than or equal to n/2
23:39:21 <kallisti> I'm finding every possible factorization for a number.
23:39:25 <oerjan> um by "full" i mean that each factor which isn't prime is split up, which means that it must be a prime factorization
23:39:42 <kallisti> well, no. erase "full"
23:39:45 <oerjan> also, the prime factorization is always the longest, that's obvious
23:39:46 <kallisti> a factorization.
23:39:52 <kallisti> right.
23:40:09 -!- clog has quit (Ping timeout: 240 seconds).
23:40:16 <oerjan> eek
23:40:26 <kallisti> oerjan: I'm thinking logBase 2 n is good?
23:40:42 <kallisti> because the longest factor list is going be a bunch of 2s
23:40:48 <kallisti> with some other number.
23:41:00 <kallisti> possibly.
23:41:30 <oerjan> each prime factor is >= 2, thus the length can never be more than that
23:42:03 <oerjan> given i factors, then n >= 2^i.
23:42:03 <kallisti> good, so that's a pretty big improvement to my current algorithm.
23:42:51 <oerjan> kallisti: suggestion, once you find a factor, divide by it and restart on the divisor from the same point.
23:43:29 <oerjan> er
23:43:31 <kallisti> awww but then I can't just replicateM :P
23:43:59 <oerjan> sucks
23:44:36 <oerjan> there are many tricks to improve factorization. and of course some insane top-notch algorithms.
23:45:13 <oerjan> also, it may be a good idea to stop when the quotient becomes smaller than the divisor.
23:46:03 <oerjan> (which means stop at sqrt n, although that's awkward to calculate exactly)
23:46:22 <kallisti> oerjan: does Haskell have an integer log?
23:46:26 <kallisti> or do I just need to floor?
23:48:15 <oerjan> i don't think so (and it doesn't have an integer sqrt either)
23:49:33 <oerjan> but this method isn't going to be able to factor anything big enough for that to really matter, i think
23:52:41 <kallisti> > let intLog2 :: Int -> Int; intLog2 = floor.logBase 2 . fromIntegral; factors n = nub . map (sort . filter (/=1)) . filter ((==n).product) . replicateM (intLog2 n) $ [1 .. n `div` 2] in factors 40a
23:52:42 <lambdabot> Couldn't match expected type `SimpleReflect.Expr -> t'
23:52:42 <lambdabot> against infe...
23:52:45 <kallisti> > let intLog2 :: Int -> Int; intLog2 = floor.logBase 2 . fromIntegral; factors n = nub . map (sort . filter (/=1)) . filter ((==n).product) . replicateM (intLog2 n) $ [1 .. n `div` 2] in factors 40
23:52:48 <lambdabot> [[2,20],[4,10],[5,8],[2,2,10],[2,4,5],[2,2,2,5]]
23:53:04 <kallisti> oerjan: it's definitely an improvement over my previous algorithm, which couldn't go beyond 14.
23:53:34 <oerjan> XD
23:53:42 <kallisti> on lambdabot, I mean.
23:53:52 <kallisti> obviously on ghci is could calculate further, but at O(n!)
23:54:19 <kallisti> I think this one is O(n * log n) ?? well except that nub and sort probably matter as well.
23:55:18 <elliott> try a set-based nub
23:55:40 -!- fizziew has changed nick to fizzie.
23:55:42 <oerjan> "replicateM (intLog2 n)" ? wtf that's expensive :P
23:55:55 <kallisti> yes that's the expensive part.
23:56:16 <kallisti> obviously the best way to find factors is to brute force list every possible sequence of numbers and then test which ones product to n
23:56:34 <oerjan> clearly.
23:57:19 <fizzie> Clearly anything at all sounds plausible when prefixed with "clearly".
23:57:33 <fizzie> Oh, it wasn't.
23:57:41 <fizzie> Arrrrrrr tricked.
23:57:48 <kallisti> oerjan: hmmm, I could find the list of the factors beforehand, and then use replicateM on those.
23:57:53 <kallisti> that's probably a better idea.
23:58:21 <kallisti> NEED MOAR SET MONAD
23:59:31 <kallisti> unions . map
23:59:34 <kallisti> oh, that was difficult.
←2011-12-19 2011-12-20 2011-12-21→ ↑2011 ↑all