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