←2015-01-16 2015-01-17 2015-01-18→ ↑2015 ↑all
00:02:15 -!- adu has quit (Quit: adu).
00:14:15 -!- oerjan has joined.
00:20:37 <boily> oerjan: hellørjan. linguistics question: is your "yes" ingressive?
00:21:42 <nys> http://blog.northhighland.com/wp-content/uploads/2014/12/Features-300x250.png
00:22:33 <nys> http://1.bp.blogspot.com/-P3BJ_eMmNjs/Uh-S0FjnG3I/AAAAAAAAAN8/-jIWn91Hnl8/s1600/Success+Content+Diagram+For+Blog.jpg
00:23:18 <boily> nys: those are profundly uninformative.
00:23:22 <olsner> boily: the ingressive yes is at least commonplace in (some parts of) Sweden
00:23:45 <oerjan> :t \x -> x >> modify (+1)
00:23:46 <lambdabot> (MonadState s m, Num s) => m a -> m ()
00:23:52 <nys> the Features one reminds me of the metaclasses diagram in the smalltalk-80 guide
00:24:01 -!- allen has left ("Leaving").
00:24:16 <oerjan> boily: not usually, i think
00:25:23 <oerjan> i don't think it's common in my dialect region
00:25:29 <boily> olsner: I stumbled upon a short video about ingressive yes in Umeå the other day.
00:25:37 <boily> oerjan: oh well. tfth.
00:26:10 <olsner> umeå is iirc quite far from norway
00:26:17 <oerjan> i have a feeling it may be more common in oslo
00:27:10 <boily> olsner: wikipedia lists examples of ingressives, without specifying regions or dialects. Norway was in there.
00:27:30 * boily adds Oslo to his places-to-visit.
00:29:52 <oerjan> <newsham> doesnt tell me much, no constraints imposed by "modify"? <-- that's a bit disappointing, and it's not lambdabot cutting it off either. although you can use a lambda like above.
00:30:02 <olsner> I use ingressive yes a lot, but it's not really in my dialect (or the dialect around here)
00:43:16 -!- ais523 has quit (Read error: Connection reset by peer).
00:43:28 -!- ais523 has joined.
00:47:26 -!- AndoDaan has joined.
00:49:41 -!- jbkcc has joined.
00:56:57 -!- skj3gg has quit (Ping timeout: 245 seconds).
01:12:24 -!- CrazyM4n has quit (Remote host closed the connection).
01:14:04 -!- Froox has joined.
01:14:13 -!- Sprocklem has quit (Ping timeout: 244 seconds).
01:14:38 <oerjan> int-e: shachaf: it's even worse to fix https://ghc.haskell.org/trac/ghc/ticket/9858#comment:9
01:18:03 -!- Frooxius has quit (Ping timeout: 264 seconds).
01:34:46 -!- Tritonio has quit (Remote host closed the connection).
01:35:19 -!- Tritonio has joined.
01:36:30 <oerjan> also works without promoted data kinds.
01:37:01 <oerjan> @tell int-e btw the exploits works with just {-# LANGUAGE AutoDeriveTypeable, TypeFamilies, RankNTypes #-}
01:37:01 <lambdabot> Consider it noted.
01:37:45 <oerjan> hm editing trac posts may not be such a good idea
01:37:54 * oerjan only changed Constraint to * -> *, though
01:38:06 <oerjan> *comments
01:39:25 <oerjan> > Proxy :: Proxy Constraint
01:39:26 <lambdabot> Not in scope: type constructor or class ‘Constraint’
01:39:26 <lambdabot> Perhaps you meant ‘Contains’ (imported from Control.Lens)
01:39:53 <oerjan> > Proxy :: Proxy (Proxy :: * -> *)
01:39:54 <lambdabot> Proxy
01:40:40 <oerjan> > Proxy :: Proxy (Proxy :: Bool -> *)
01:40:41 <lambdabot> Illegal kind: ‘GHC.Types.Bool’
01:40:42 <lambdabot> Perhaps you intended to use DataKinds
01:42:59 <oerjan> @tell int-e i see you are missing the first one :P
01:42:59 <lambdabot> Consider it noted.
01:50:38 -!- jbkcc has quit (Ping timeout: 246 seconds).
01:55:59 <oerjan> poor int-e
01:58:07 <boily> split from his evil twin...
01:58:49 <oerjan> i am not sure whether i should ask someone to remove lambdabot until int-e awakes
01:59:10 <oerjan> (i got around his countermeasure)
02:00:35 <oerjan> it might be overly paranoid though
02:00:42 <boily> unless lambdabot poses a blatant security risk and tries to overtake the world, I guess we're kinda safe with him there.
02:00:51 <boily> (we still have Sir Fungellot to protect us, too.)
02:01:03 <boily> @metar CYUL
02:01:03 <lambdabot> CYUL 170100Z 30016G23KT 15SM DRSN FEW035 M16/M24 A3016 RMK CF1 CF TR SLP215
02:01:12 <boily> see, nothing to frette about.
02:02:33 <oerjan> i mean, i modified shachaf's exploit from earlier today so it still works on lambdabot
02:03:18 <oerjan> otoh presumably there are few people here intelligent enough to guess how _and_ mean enough to mess things up.
02:04:04 * oerjan optimist
02:06:21 <oerjan> it's looking quite awkward to fix the GHC bug now, basically Typeable reps would need to start including kind info
02:07:28 <zzo38> Phyrexian Generator {4} Artifact === {(W/P)(U/P)(B/P)(R/P)(G/P)}, {T}: Add {WUBRG} to your mana pool.
02:07:51 -!- augur has quit (Ping timeout: 252 seconds).
02:11:33 <boily> zzo38: 4?
02:12:10 -!- yukko_ has quit (Quit: Reconnecting).
02:12:21 -!- yukko has joined.
02:12:58 <boily> oh. I misread the {WUBRG}. it produces all of it at the same time.
02:13:41 <boily> (hm... with some mana-doubling stuff it becomes strangely easy to sneak in a Progenitus and/or a few Emrakuls...)
02:14:29 <zzo38> Maybe the cost of the artifact, or of the ability, may be wrong though
02:14:49 <zzo38> Maybe both of them should be increased by {1}
02:15:48 <zzo38> Or only one of them should be; I'm not sure
02:16:59 <zzo38> Well, with a lot of life and the ability to copy or untap the artifact, you could earn a lot of mana.
02:18:57 <boily> life is overrated. it's only another expendable resource.
02:19:31 <boily> (for the record, only MtG life. I value my own, tyvm hth.)
02:19:56 <zzo38> Yes, but you do start with only 20 life points and can also lose them due to being damaged.
02:20:27 <zzo38> Still it is something that is usable; for now I decided probably to increase both costs by {1}
02:21:20 <oerjan> `addquote <boily> life is overrated. it's only another expendable resource.
02:21:30 <oerjan> you know it had to be done.
02:21:32 <HackEgo> 1230) <boily> life is overrated. it's only another expendable resource.
02:21:44 <boily> bon, maudit. encore une fois...
02:22:05 * boily is reminded that he still needs to fix that damned Greek LaTeX problem...
02:22:52 <boily> zzo38: starting with 20 HP means you have 19 at your disposition.
02:23:28 <boily> (it's a gamble. unless you're playing against a red-deck-wins, it works pretty much all the time.)
02:24:32 <HackEgo> [wiki] [[Special:Log/newusers]] create * Dotamaria1 * New user account
02:24:39 <boily> example: I have a few Lashwrithes in my monoblack deck.
02:25:10 <elliott_> lambdabot: @quit
02:25:10 <lambdabot> Not enough privileges
02:25:14 -!- elliott_ has changed nick to elliott.
02:25:29 -!- elliott has quit (Quit: Reconnecting).
02:25:35 -!- elliott has joined.
02:25:39 <elliott> lambdabot: @quit
02:25:39 -!- lambdabot has quit (Quit: requested).
02:25:43 -!- elliott has changed nick to Guest1017.
02:25:45 <Guest1017> pretty sure int-e would want that
02:25:50 <Guest1017> uhhhh what
02:25:59 -!- Guest1017 has quit (Client Quit).
02:26:08 -!- elliott_ has joined.
02:26:38 <elliott_> why is sasl broken...
02:26:45 <zzo38> Of course it also depend what other cards you have as well as depending whether you play Constructed or Limited
02:27:03 <boily> elliott_: it's broken for you too?
02:27:11 <elliott_> well, it doesn't seem to be authenticating me.
02:27:14 <zzo38> If it is Limited then you might not get more than one copy of some card.
02:27:16 <boily> zzo38: tough choice...
02:27:39 <zzo38> (I always play Limited)
02:28:05 <shachaf> oerjan: whoa
02:28:08 <boily> I oscillate. we play modern during lunch, with the occasional about-monthly draft.
02:28:12 -!- elliott_ has changed nick to elliott.
02:28:14 <shachaf> oerjan++
02:28:15 -!- elliott has quit (Changing host).
02:28:15 -!- elliott has joined.
02:29:03 <shachaf> I was heading in that direction earlier but I stopped when I found the DataKinds things.
02:29:09 <oerjan> since lambdabot is now gone i might just as well link it: http://oerjan.nvg.org/ExploitForIntE.hs
02:29:25 * shachaf is on phome, will look later
02:29:25 <elliott> oerjan: no, it's not :(
02:29:28 <elliott> it's rejoining channels
02:29:33 <oerjan> elliott: oops
02:29:41 <elliott> I need to make it quick again because int-e helpfully made it reconnect unless it quits twice in quick succession
02:29:53 <elliott> which may not even be possible given how long it takes to respond to a @quit after connecting?
02:30:06 <elliott> okay it disconnected now at least
02:30:06 -!- augur has joined.
02:30:34 <boily> oerjan: uhm... I fail to understand the exploit. I guess it puts me in the very mean category...
02:30:43 <oerjan> boily: OKAY
02:31:39 * boily doesn't want to be mean. (except in coop boardgames :D)
02:32:49 <elliott> oerjan: of course now someone will notice the missing lambdabot in #haskell and spin up a replacement instance on their personal machine, as their normal user account...
02:32:51 <oerjan> boily: haskell has this Typeable class which is supposed to give you safe dynamical typing by allowing casts between types that are actually equal, based on a reified type representation. but there's a bug that allows you to get types with identical representation by using kind polymorphism
02:32:57 <elliott> and get owned far worse
02:33:06 <oerjan> bah
02:33:18 <elliott> :p
02:33:34 <boily> elliott: I ain't be running no cephalopods.
02:33:53 <boily> oerjan: and? it's a typecast. so what?
02:34:30 <elliott> boily: so you can cast IO () to something you can call in pure code
02:34:58 <boily> oh.
02:35:00 <oerjan> boily: this cast is supposed to be safely enough checked that you can use it Safe mode for running untrusted code, which lambdabot does.
02:35:05 <boily> oh dear fungot.
02:35:06 <fungot> boily: he was in the vale of pnath, and the waves of our bidding encompassed all the land of inquanok and saw against the stars, whose course exactly paralleled that of his own two-year-old son, who had hastily translated a few high spots as they came, and he speaks her fnord but he knew his room was fnord in that carven vestige of an older dwelling and which at times almost rose to the intensity of the dreams and legends, this
02:35:35 <boily> quite the interesting bug, I say.
02:35:58 <elliott> I like how "GHC 0-days" are a thing
02:36:45 <oerjan> shachaf's original exploit used the fact that certain "datakind promotion" can give you two types that have the same name in a way that isn't distinguished in the typerep.
02:36:46 -!- callforjudgement has joined.
02:36:55 -!- ais523 has quit (Disconnected by services).
02:36:56 -!- callforjudgement has changed nick to ais523.
02:37:11 <boily> time for me to have a few nightmares. 'night all!
02:37:15 -!- boily has quit (Quit: UNFINISHED CHICKEN).
02:37:31 <oerjan> i then modified it to use instead the fact that types can depend on kinds in such a way that the kind doesn't show up in the typerep at _all_.
02:41:35 -!- Lilax has joined.
02:44:07 <oerjan> shachaf: i was intrigued to try this by the fact that int-e's suggested fix in that other ghc trac thread seemed to simple to work
02:44:15 <oerjan> *too
02:51:51 <Lilax> I like math kinda
02:53:16 <zzo38> Kinda?
02:53:42 * Lilax nods head
02:53:45 <Lilax> Kinda
02:56:18 <zzo38> Kinda is not good enough.
02:58:19 <Lilax> How about
02:58:27 <Lilax> 97.6
02:58:39 <Lilax> % of liking
03:03:34 -!- Phantom_Hoover has quit (Ping timeout: 245 seconds).
03:07:15 <oerjan> class Kindable (Proxy :: k -> *) where ...
03:07:39 <elliott> oerjan: lowercase p, surely
03:07:39 <Lilax> that's not a word /o/
03:07:39 <myndzi> |
03:07:39 <myndzi> /|
03:07:49 <oerjan> elliott: no
03:07:52 <Lilax> thank you myndzi
03:07:59 <elliott> oerjan: that works...?
03:08:02 <oerjan> elliott: it's supposed to parametrize over the kind, not the type
03:08:10 <elliott> ok but it's not valid :P
03:08:14 <oerjan> elliott: well maybe proxy works
03:08:24 <elliott> oerjan: k -> 1 would be best
03:08:28 <elliott> for the obvious definition of 1
03:08:28 <oerjan> elliott: i'm just thinking about what they'll need to _really_ fix that bug
03:08:49 <oerjan> because you need kinds in typereps
03:08:57 * elliott nods
03:09:02 <elliott> it sounds like a mess.
03:09:12 <elliott> they just redid Typeable to be all polykinded, too...
03:09:31 <oerjan> yeah but kinds arent't poly-(sorted?) yet
03:10:09 <oerjan> the dependent typing investigations will unify types and kinds, though
03:10:25 <Lilax> That sounds
03:10:31 <Lilax> Interesting
03:10:36 <oerjan> it is
03:12:19 <Lilax> Ive finally made a play bot
03:13:26 -!- Tritonio has quit (Remote host closed the connection).
03:13:36 <oerjan> good, good
03:16:11 <oerjan> i suspect int-e will have to disable type families, iirc gadts are safer because there's still a dynamic check remaining
03:16:49 <Lilax> what happened?
03:16:49 <oerjan> well i guess he could refrain from importing cast, but maybe there are ways to sneak around that with other things using Typeable
03:17:12 <oerjan> Lilax: we found an exploit in ghc haskell, which affects lambdabot's sandboxing
03:17:23 <Lilax> :O
03:17:30 <Lilax> That sounds bad
03:17:57 <oerjan> yeah but it requires several ghc extensions to work, so int-e can probably find one to disable
03:18:20 <oerjan> (he tried disabling one earlier today, but i found a way around that)
03:18:24 <Lilax> I wondered why lambdabot wasn't on
03:19:08 -!- glguy has joined.
03:20:02 <oerjan> hm the RankNTypes is probably not needed either, let me see...
03:21:08 <Lilax> Making a currency system that updates on how many products the user has and upgrades/ lvl system is hard to maintain
03:22:27 -!- adu has joined.
03:22:32 <elliott> oerjan: oh are they thinking about adding full dependent typing?
03:23:27 <oerjan> elliott: richard eisenberg is
03:23:49 <oerjan> https://ghc.haskell.org/trac/ghc/wiki/DependentHaskell
03:24:14 <Lilax> gasp
03:29:42 <shachaf> oerjan: I think linking the exploit was pretty redundant by the time you gave all the information about it.
03:30:19 <oerjan> maybe :P
03:30:36 <oerjan> ok i don't need RankNTypes to cast between two concrete types
03:31:13 <shachaf> I didn't use RankNTypes in my original version of the code.
03:31:24 <oerjan> right
03:31:42 <shachaf> data family F a b p; data instance F a b (Proxy T) = A a; data instance F a b (Proxy 'T) = B b
03:31:49 <shachaf> uc :: forall a b. (Typeable a, Typeable b) => a -> b
03:31:49 <shachaf> uc x = case cast (A x :: F a b (Proxy T)) :: Maybe (F a b (Proxy 'T)) of { Just (B y) -> y; Nothing -> error "oops" }
03:32:04 <oerjan> that's pretty much the way i was just trying to change it
03:32:26 <oerjan> i think that might need ScopedTypeVariables to work for all Typeables
03:32:36 <shachaf> Yes, that uses ScopedTypeVariables.
03:32:48 <shachaf> But you can usually eliminate ScopedTypeVariables uses.
03:33:11 <oerjan> oh hm lessee
03:33:30 <shachaf> You can probably use GADTs instead of TypeFamilies too.
03:33:46 <shachaf> Though the obvious way of doing it doesn't work because GHC checks the tag even when there's only one possibility.
03:33:51 <oerjan> i thought GADTs ... right
03:33:55 <oerjan> is there another way?
03:34:05 <shachaf> I think there was a way...
03:34:09 <shachaf> How did that one thing work?
03:34:30 <shachaf> http://joyoftypes.blogspot.com/2012/08/generalizednewtypederiving-is.html does something with GADTs
03:35:55 -!- FreeFull has joined.
03:36:40 -!- callforjudgement has joined.
03:36:44 -!- ais523 has quit (Disconnected by services).
03:36:45 <shachaf> So maybe something like that. I'd need to think about the details.
03:36:46 -!- callforjudgement has changed nick to ais523.
03:39:33 -!- vanila has joined.
03:40:39 <Jafet> Do you get a prize for ticket #10000
03:40:59 <shachaf> I hope so, I worked for that ticket number.
03:41:36 <oerjan> well you got a cheer from spj, that must be something
03:41:40 <shachaf> https://ghc.haskell.org/trac/ghc/query?status=infoneeded&status=new&status=patch&col=id&col=summary&col=status&col=owner&col=type&col=priority&col=milestone&col=reporter&desc=1&order=id
03:42:14 <shachaf> It's a bit anticlimactic that it was a duplicate after all that.
03:42:29 <shachaf> But oerjan made it more interesting.
03:42:53 <shachaf> Is PolyKinds actually necessary for this bug?
03:43:08 <shachaf> (The trouble is that it works even without turning it on.)
03:44:56 <oerjan> shachaf: getting rid of the ScopedTypeVariables is tricky because b is so phantom...
03:46:25 <oerjan> shachaf: i've been thinking if this is one of those things that might be nipped in the bud by ghc's new "only allow inferred types that have all necessary extensions enabled" "feature"
03:47:01 <oerjan> someone should check this with 7.10.rc
03:47:27 <oerjan> the "working without listing PolyKinds" part, that is
03:48:11 <oerjan> or perhaps the necessary stuff is just implied by the other extensions
03:48:11 <elliott> I think it's safe to say at this point that turning a crufty old experimental research compiler into your sole line of security defence is a poor choice
03:48:19 <oerjan> YOU THINK
03:48:58 <elliott> I'm not sure what the plan is with safe haskell
03:49:24 <elliott> it doesn't seem to have ever been vaguely secure so what are they going to do, just wait a few years for all the really simple bugs to get ironed out and then say it's secure?
03:49:46 <shachaf> oerjan: What's the issue with turning off ScopedTypeVariables?
03:49:54 <shachaf> supercast :: (Typeable a, Typeable b) => F a b (Proxy T) -> Maybe (F a b (Proxy 'T)); supercast = cast
03:49:58 <shachaf> uc :: (Typeable a, Typeable b) => a -> b; uc x = case supercast (A x) of Just (B y) -> y
03:50:04 <vanila> is this exploit related to deriving?
03:50:50 <oerjan> vanila: only of Typeable, not newtypes
03:51:29 <vanila> nice work
03:51:44 <oerjan> basically the derived typereps of different types aren't always different
03:53:23 <shachaf> So all you need is a way to derive Typeable, and type families or something similar.
03:54:08 -!- adu has quit (Quit: adu).
03:58:55 -!- AndoDaan_ has joined.
03:58:56 -!- AndoDaan has quit (Read error: Connection reset by peer).
03:59:00 <vanila> ive got no idea what modern haskell is about haha
03:59:04 <vanila> all this dynamic type stuff
03:59:06 <oerjan> shachaf: thanks that worked
03:59:32 <oerjan> vanila: well the dynamic typing is just a small part
04:00:23 <elliott> Typeable has been around for a long time but the poly-kinded stuff that lets this nonsense work is relatively new
04:00:50 <elliott> oerjan: btw bob harper will have a field day with this one
04:00:58 <oerjan> OUCH
04:01:00 <vanila> yeah hahaha
04:01:05 <vanila> everyones like bob you just dont understand haskell
04:01:10 <vanila> and now this
04:01:19 <elliott> to be fair he's done unsafeCoerce with Typeable before
04:01:25 <elliott> but that was back when it was completely trivial
04:01:33 <elliott> (by giving your own manual instance of Typeable before that was forbidden)
04:01:42 <elliott> that was one of his troll posts :P
04:01:48 <vanila> "one of"
04:06:40 <oerjan> ok i got rid of StandaloneDeriving
04:08:05 -!- MDude has changed nick to MDream.
04:10:11 <shachaf> I just used AutoDeriveTypeable.
04:10:20 <shachaf> Which extensions are you using now?
04:10:37 <oerjan> DeriveDateTypeable and TypeFamilies
04:10:40 <oerjan> *a
04:11:05 <shachaf> Ah.
04:11:47 * shachaf is back to phone so can't experiment.
04:20:34 <shachaf> oerjan:
04:20:37 <shachaf> By the way, you're also using KindSignatures, which is turned in automatically by TypeFamilies.
04:20:44 <oerjan> ah
04:20:55 <shachaf> whoa, this ssh client is a bit of a scow
04:21:19 <oerjan> are they also turned on by GADTs?
04:21:22 <shachaf> (I'm assuming you're using kind signatures, anyway.)
04:21:29 <oerjan> well naturally
04:21:31 <shachaf> No.
04:21:44 <shachaf> (Unless I'm wrong.)
04:22:03 <shachaf> Not according to http://hackage.haskell.org/package/haskell-src-exts-1.0.1/docs/src/Language-Haskell-Exts-Extension.html
04:22:19 <oerjan> ok
04:22:22 -!- shikhin_ has quit (Ping timeout: 245 seconds).
04:22:57 <oerjan> shachaf: btw the reason i changed from AutoDeriveTypeable is because lambdabot didn't have it
04:23:08 <shachaf> Ah.
04:23:36 <shachaf> Would turning off DeriveDataTypeable be enough?
04:23:54 <oerjan> well that's what i'm trying to think about
04:24:28 <shachaf> Back to the old "user Typeable types are unsafe" thing.
04:25:17 <shachaf> Except including derived instances.
04:25:31 <shachaf> s/types/instances/
04:30:34 -!- nys has quit (Quit: quit).
04:31:02 * shachaf gets on train
04:31:27 <shachaf> Hmm, how did you do it without StandaloneDeriving?
04:31:52 <oerjan> made an ordinary newtype to wrap it in
04:32:17 <shachaf> Ah, makes sense.
04:37:19 <shachaf> Using a newtype also lets you get away with a type family rather than a data family.
04:37:47 <oerjan> ok
04:38:17 -!- Froo has joined.
04:39:13 <zzo38> In my opinion it should be allowed to define a class as being automatic, and in such cases you cannot write your own instances but it automatically derives it for all types it is applicable to whether or not the program that defines that type knows anything about the class.
04:40:09 -!- Frooxius has joined.
04:41:36 <zzo38> Typeable should be one such class.
04:42:03 -!- Froox has quit (Ping timeout: 264 seconds).
04:42:08 <oerjan> zzo38: i agree, although this bug wouldn't be helped by that
04:42:57 -!- Froo has quit (Ping timeout: 244 seconds).
04:46:52 <Lilax> Do any of you persons draw?
04:47:07 * Lilax is very much off topic
04:48:39 -!- ais523 has quit.
04:48:52 -!- ais523 has joined.
04:49:48 <zzo38> Lilax: I am not very good at drawing my brother make the pictures for my computer game
04:50:05 <Lilax> oh
04:50:26 <Lilax> I was doing an art final so I kinda need an idea for a second picture
04:58:39 <zzo38> It isn't something I would know.
05:06:04 -!- augur has quit (Ping timeout: 245 seconds).
05:22:07 -!- GeekDude has quit (Quit: {{{}}{{{}}{{}}}{{}}} (www.adiirc.com)).
05:22:48 <vanila> int-e, can i msg you about unsafe?
05:26:30 <oerjan> vanila: i don't think int-e is awake yet, or else he'd surely commented on tonight's exploit
05:26:46 <vanila> alright
05:27:12 <oerjan> :k Eq
05:27:16 <vanila> im wondering how to implement unsafePerformIO with unsafeCoerce: I got a really crashy way and somehow int-e's is more stable.. but it make less sense
05:27:16 <oerjan> oh duh
05:27:47 <oerjan> vanila: you need to understand how ghc implement's IO inside, i guess
05:27:51 <oerjan> *-'
05:28:02 <Jafet> Just make a replicate of the IO datatype
05:28:38 <oerjan> but since the function argument is a weird "this actually takes 0 bytes" type used nowhere else...
05:29:19 <oerjan> (well also in ST)
05:29:25 <elliott> vanila: just copy the IO and unsafePerformIO definition
05:29:27 <elliott> and unsafeCoerce to it
05:29:40 <oerjan> heh
05:30:04 <glguy> runST (unsafeCoerce (putStrLn "fun")) is probably the easiest
05:30:17 <vanila> oh lambdabot has runST doesn't it..
05:30:42 <vanila> i got caught up in somethin unecessary then
05:32:25 <vanila> http://lpaste.net/74498 thats' intes
05:38:37 <vanila> runST (unsafeCoerce (do readFile "/etc/passwd"))
05:38:40 <vanila> how come this crashes?
05:38:50 <vanila> i thought it would work fine
05:39:52 <vanila> int-es unsafePerofrmIO works though
05:40:04 <vanila> well it prints most of the file before segfaulting
05:41:22 -!- augur has joined.
05:47:51 <glguy> Did you try adding the stuff I mentioned in the other channel to make it strict?
05:48:06 <glguy> (I'm not sure that that's the problem, but I imagine it's why you switched channels
05:48:31 <vanila> thasnk glguy :)
05:48:49 <vanila> it still crashes but i get some output
05:48:54 <vanila> its kind of interesting
05:51:31 <vanila> i can get lambdabot installed to test this :(
05:51:36 <vanila> cant*
05:52:06 <shachaf> I must say I like this lambdabot absence thing.
05:58:26 <glguy> Yeah, less garbage in chat and if we need to share a type signature or evaluate an expression we can still do it in ghci and paste it
05:59:07 <shachaf> And if we need to see a quote we just ask shachaf to search the logs for it.
05:59:13 <glguy> win win
05:59:24 <oerjan> whee i crashed ghc
05:59:35 <shachaf> oerjan: whoa, still with this typeable thing?
05:59:45 <oerjan> yes, and uc 'a' :: Int crashed
05:59:59 <shachaf> Oh, at runtime?
05:59:59 <oerjan> shachaf: i'm trying to see how far i can avoid deriving Typeable
06:00:04 <shachaf> Or in typechecking?
06:00:07 <oerjan> runtime
06:00:25 <shachaf> Oh, well, that's not really crashing GHC.
06:00:34 <shachaf> It's easy to do with a GADT that has an invalid tag.
06:00:38 <shachaf> Maybe you did something else.
06:01:04 -!- jbkcc has joined.
06:01:21 <oerjan> i have data E :: * -> * -> * where E :: E a a deriving Typeable i don't think that's invalid
06:02:06 <shachaf> Well, you can use it (and the Typeable kind bug) to make an invalid thing.
06:02:09 <shachaf> Presumably.
06:02:16 <oerjan> OKAY
06:02:26 <vanila> http://joyoftypes.blogspot.co.uk/2012/08/generalizednewtypederiving-is.html
06:02:32 <shachaf> Or maybe you did something else?
06:02:37 <oerjan> (i'm trying to see if having that around is enough not to have to make any other Typeables)
06:02:51 <vanila> lol @ GHC can magically derive (wrong) instances for typeclasses you create ??
06:03:03 <shachaf> oerjan: That's exported from Data.Typeable, for what it's worth.
06:03:10 <shachaf> So you don't even need to derive Typeable for it yourself.
06:03:14 <oerjan> ooh
06:03:31 <Jafet> blsqbot: 0 1 {{.+}c!} {1} w!
06:04:26 <Jafet> !blsq 0 1 {{.+}c!} {1} w!
06:04:26 <blsqbot> | Ain't nobody got time fo' dat!
06:04:46 <Jafet> !blsq 0 1 {{.+}c!} {99.<} w!
06:04:46 <blsqbot> | 144
06:04:47 <blsqbot> | 89
06:04:47 <blsqbot> | 55
06:05:14 <oerjan> bah but now i need TypeOperators :(
06:06:15 <shachaf> Just use it prefix.
06:06:20 <Jafet> !blsq 0 1 {{.+}c!} {99.<} w!CL
06:06:20 <blsqbot> | {144 89 55 34 21 13 8 5 3 2 1 1 0}
06:06:25 <shachaf> type Is = (:~:)
06:07:19 <oerjan> huh
06:07:51 <oerjan> still crashing
06:09:29 <vanila> well that was reall yfun to think about
06:12:38 <oerjan> vanila: they've fixed that newtype deriving thing although the fix has other annoying side effects
06:12:50 <vanila> i find it amazing this was ever a bug
06:13:03 <vanila> why wouldn't you derive stuff by creating code and then typechecking it etc.
06:13:21 <vanila> they are like "lets skip typechecking"
06:13:28 <oerjan> vanila: because the code may not be available?
06:13:33 <glguy> Because you wouldn't be able to write the code for some of them
06:13:35 <shachaf> that's what augustss's compiler did
06:13:37 <vanila> the compiler is writing the code
06:13:47 <shachaf> (I believe.)
06:13:50 -!- AndoDaan_ has quit (Quit: bbl).
06:14:02 <glguy> but his compiler 1) cheats where it's convenient 2) can't derive as many instances even when they might be valid
06:14:05 <oerjan> shachaf: istr that too
06:15:17 * shachaf isn't sure how oerjan is crashing with a compiler error using just (:~:), actually
06:15:43 <oerjan> vanila: an important consideration here is that it should be _fast_ by having the wrapping be trivially optimized away
06:16:10 <oerjan> shachaf: but it typechecks :P
06:16:50 <oerjan> i tried readding some Maybes but that didn't help :(
06:17:03 <shachaf> maybe you should try writting them
06:17:20 <oerjan> OKAY
06:18:31 <oerjan> maybe i've hit another ghc bug
06:19:22 <vanila> i feel bad for haskell
06:19:31 <elliott> vanila: because unsafeCoerce is more efficient when it works basically :/
06:19:44 <elliott> map NewType or map unNewType is like unsafeCoerce but slower
06:20:17 <elliott> the same would apply to fmap *except* if you break the functor laws in an instance you can get unsafeCoerce out of it
06:20:21 <elliott> which is really annoying.
06:24:22 <elliott> I had a nice plan to fix it all elegantly but then they went and did something else instead
06:24:35 <elliott> which is probably for the best
06:25:17 <glguy> shachaf: did you decide to go public with your bug report specifically to take lambdabot down?
06:25:40 <shachaf> glguy: I told int-e about the bug before reporting it and he decided to disable DataKinds.
06:25:47 <elliott> it's not like GHC has any process for reporting security-sensitive bugs
06:25:52 <elliott> (afaik)
06:25:59 <shachaf> Then oerjan figured out that it wasn't sufficient so elliott took the bot down entirely.
06:26:08 <shachaf> I asked thoughtpolice what to do with it.
06:26:24 <Jafet> Does anyone use safehaskell for security?
06:26:25 <shachaf> The conclusion was that I might as well report it publicly.
06:26:29 <glguy> I was just joking due to the lambdabot comment, not actually questioning intent :)
06:26:31 <shachaf> lambdabot does
06:26:35 <elliott> if safe haskell is going to be deployed in production then GHC really needs a process for handling security bugs etc.
06:26:40 <elliott> which is basically all soundness bugs :/
06:26:47 <vanila> what is safe haskell
06:26:57 <elliott> Jafet: I think byorgey had some web-based thing that accepted arbitrary safe haskell code
06:26:57 <shachaf> no such thing hth
06:27:13 <Jafet> I assume int-e uses a chroot wrapped in a VM wrapped in a burrito
06:27:20 <elliott> vanila: basically something that tags modules as safe/unsafe/trusted etc. so you can run arbitrary code that can't import modules with stuff marked as unsafe like unsafePerformIO or unsafeCoerce
06:27:24 <elliott> (including third-party libraries)
06:27:27 <elliott> lambdabot uses it for obvious reasons
06:27:37 <elliott> you can @let import stuff but it won't work if you try to import Unsafe.Coerce etc.
06:27:40 <vanila> that sounds awful D:
06:28:14 <vanila> they should ues a type system for this...
06:28:14 <elliott> eh, it's an okay idea, it's just not very robust in practice because GHC is complex and has lots of bugs so you can often get unsafeCoerce through other ways
06:28:23 <elliott> that would be better yeah
06:28:43 <elliott> an --unsafe--> function type that you can turn off the application rule for
06:29:08 <vanila> they should make a language a bit like haskell but without unsafe stuff
06:29:17 <Lilax> mm burlesque is fun
06:29:23 <elliott> vanila: still the idea is that you can turn on safe haskell and get proper RT and stuff
06:29:36 <elliott> like actually be able to know things about what an (A -> B) can do no matter what haskell file you load
06:29:40 <elliott> as long as you load it in safe mode
06:29:53 <elliott> it just falls down because any GHC soundness bug is a security bug now
06:30:02 <vanila> you could compile to bytecode and have a bytecode interpreter with some settings for its capabilities
06:30:07 <elliott> and GHC just isn't that robust, especially with all the fancy extensions interacting
06:30:14 <vanila> there's so much you can do other than just putting comments in the code "this is safe lol"
06:30:22 <elliott> vanila: well the thing is, you want to be able to call code that is implemented unsafely
06:30:23 <shachaf> You could use any of the standard sandboxing mechanisms.
06:30:26 <elliott> for instance you can use ByteStrings just fine in safe haskell
06:30:44 <shachaf> The idea is that you can rely on the type checker to not have to do that.
06:30:45 <elliott> and you can do things like expose restricted IO monads to the safe code to use
06:31:02 <oerjan> *Main> uc 'a' :: Int
06:31:02 <oerjan> 1152921504606846976
06:31:13 <oerjan> DIDN'T CRASH THIS TIME HTH
06:31:18 <elliott> (code that uses unsafe code to implement a safe interface is called "Trustworthy")
06:31:19 <shachaf> oerjan: ship it
06:31:22 <elliott> (Safe Haskell lets you audit it)
06:31:26 <elliott> (by only letting packages you explicitly trust do this)
06:31:29 <Jafet> > showHex 1152921504606846976 ""
06:31:31 <Lilax> I use safehaskell
06:31:35 <Jafet> Err
06:31:41 <elliott> (so you can know what unsafe code you are trusting to be encapsulated properly)
06:31:51 <glguy> The only safe haskell is abstinence
06:31:54 <shachaf> "1000000000000000"
06:31:57 <shachaf> p. good
06:32:02 <vanila> LOL
06:32:07 <Lilax> pls
06:32:09 <shachaf> oerjan: this is with no extensions?
06:32:33 <elliott> what if you could write unsafeCoerce in pure hindley-milner all along
06:32:38 <vanila> haha
06:32:53 <elliott> yes yes it probably has a soundness proof or whatever, but what if ZFC is inconsistent too
06:32:54 <vanila> but its been proved you can't
06:32:59 <elliott> it could happen
06:33:17 <Jafet> 0day of the century
06:33:20 <elliott> haha
06:33:21 <elliott> ZFC 0-day
06:33:32 <elliott> that'll be when we're all relying on proof checkers to run arbitrary code with attached safety proofs
06:33:49 <elliott> urgent patch to the ZFC axioms with a coordinated multi-vendor release
06:33:55 <Lilax> redimensionalize derivative coefficients
06:34:12 <Lilax> redimensionalizing* I guess
06:34:22 <vanila> that sounds very possible except not ZFC but the given proof checker
06:35:19 <elliott> yeah but it'd be more fun if it was the axioms themselves that were broken
06:35:28 <oerjan> shachaf: only TypeFamilies
06:35:29 <Jafet> Most provers have a set theory (but not quite ZF)
06:35:33 <elliott> breaking axiom systems like we do hash functions today
06:35:44 <shachaf> oerjan: Oh, you're using TypeFamilies still?
06:35:55 <elliott> eventually nobody runs anything that takes more than peano arithmetic to prove safety of
06:35:55 <shachaf> Were you using it for that (:~:) thing all along?
06:35:59 <elliott> *prove the safety of
06:36:22 <vanila> hahaha imagine if PA was the limit
06:36:25 <elliott> http://lpaste.net/81269 some old vaguely-relevant fun to all this
06:36:30 <vanila> everything betond that got proved inconsistent
06:36:56 <elliott> vanila: well, god made the naturals
06:37:13 <vanila> and godel made some weird extra ones
06:37:29 <Lilax> I'm just gonna >_> use that lpaste for notes
06:38:00 <shachaf> i,i there exists a 0-day; if there exists an n-day, there exists an Sn-day; ...
06:38:44 <oerjan> shachaf: um i haven't changed the F part ...
06:38:58 <oerjan> although perhaps :~: could replace it, that's a thought
06:39:08 <shachaf> oh
06:39:22 <shachaf> i thought you were doing something like data Q a b p = A (Is p PT) a | B (Is p P'T) b
06:39:26 <shachaf> except clever and not obviously broken
06:39:37 <Jafet> I have a marvellous blackhat demo that this program is defective, but this pentest form is too small to contain it
06:40:28 -!- jbkcc has quit (Quit: My Mac has gone to sleep. ZZZzzz…).
06:41:19 <oerjan> http://oerjan.nvg.org/lbexploits/Exploit2.hs
06:41:29 <oerjan> is the not very well working one
06:41:43 <oerjan> (i moved the other one into this directory too)
06:42:51 <shachaf> oh, i see what you're doing
06:46:10 <oerjan> do you see why it's breaking too?
06:46:37 <Lilax> are you sure there isn't a import tunnel a bot to quick latex?
06:46:47 <oerjan> btw i tried wrapping in G and it didn't help
06:46:58 <vanila> Lilax, stop talking shit
06:47:07 <Lilax> /o/
06:47:27 <Lilax> Why would you say that, it startled me vanila
06:49:29 <glguy> The point is just that polykinded proxy's kind isn't reflected in its typerep?
06:49:39 <oerjan> glguy: yep
06:50:16 <shachaf> oerjan: no, i'll look after i get home if it's still unsolved
06:50:16 <oerjan> btw http://oerjan.nvg.org/lbexploits/ExploitForIntE.hs is actually working
06:50:37 <oerjan> unlike this new attempt to avoid some extensions
06:51:30 <shachaf> that's just the same as my original code with * -> * instead of T, right?
06:51:39 <shachaf> we've managed to take several extensions off since then
06:51:41 <oerjan> shachaf: pretty much
06:52:41 <oerjan> hm another high number
06:52:49 <oerjan> or possibly the same one
06:54:15 <Lilax> ugh calculus pls don't do this to me
06:54:32 <oerjan> hm the explicit Typeable constraints aren't needed
06:55:03 <Lilax> Why not?
06:55:25 <shachaf> oerjan: the Core for your code is funny
06:55:41 <oerjan> ok
06:55:47 <glguy> Paste for those of us on phones?
06:55:50 <shachaf> supercast = \ @ a5_axk @ b_axl w_s1pg _ -> $wsupercast w_s1pg
06:55:57 <shachaf> supercast completely ignores its non-E argument
06:56:09 <shachaf> but i need to go in ~4 minutes and will be back later
06:56:28 <shachaf> er, by your code i mean your code after i've changed it a bit, so maybe it's different in the original
06:57:48 <oerjan> i get a strange error if i try to add @Refl to the last e pattern in supercast
06:59:09 <shachaf> you'd expect strange errors when matching on an impossible Refl
06:59:17 <shachaf> though maybe yours is stranger than expected
06:59:22 <oerjan> oh duh of course
07:00:27 <shachaf> adding NOINLINE makes it work hth
07:00:34 <shachaf> but now i really need to go
07:00:38 <oerjan> ooh
07:07:30 <oerjan> oh hm
07:08:54 -!- JesseH has joined.
07:10:38 -!- ais523 has quit (Read error: Connection reset by peer).
07:10:46 -!- ais523 has joined.
07:13:37 <elliott> `relcome JesseH
07:13:46 <HackEgo> JesseH: Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: <http://esolangs.org/>. (For the other kind of esoterica, try #esoteric on irc.dal.net.)
07:14:11 <JesseH> 'relcome elliott
07:14:16 <elliott> it's `
07:14:36 <JesseH> What's up, elliott?
07:14:51 <elliott> uhhhh
07:14:53 <elliott> ghc bugs apparently
07:14:58 <elliott> same as always
07:15:24 <JesseH> Haskell, I see!
07:22:36 <oerjan> i see. it is never actually looking at the ID id value
07:24:09 <elliott> as usual :p
07:26:23 <oerjan> gah making the f parameter non-explicit worked
07:27:09 <oerjan> now to find out if any of these munge applications (to prevent ghc inlining) are needed
07:28:38 <oerjan> oops some are
07:32:43 <oerjan> i need to write id ecast instead of ecast to avoid the crash :D
07:33:06 <oerjan> that's the only place, other than removing some explicit arguments
07:33:26 <oerjan> i think it's a good guess that this might break under higher optimization levels
07:36:48 <oerjan> shachaf: http://oerjan.nvg.org/lbexploits/Exploit3.hs
07:36:56 <shachaf> oerjan: good timing, i just got home
07:37:16 <oerjan> i managed to make it work without a pragma, at least in GHCi.
07:37:48 <shachaf> this is getting more and more fragile hth
07:37:54 <oerjan> you think
07:38:01 <elliott> oerjan: {-# NOINLINE munge #-} should make it safe?
07:38:16 <oerjan> elliott: um the whole point of using munge is to avoid NOINLINE
07:38:20 <elliott> oh. but why
07:38:34 <oerjan> well maybe it cannot be disabled, in which case it's fine
07:38:43 -!- augur has quit (Ping timeout: 245 seconds).
07:38:59 <shachaf> Is there a difference between data families and newtypes+type families?
07:39:05 <oerjan> can you use NOINLINE pragmas in lambdabot?
07:39:11 <oerjan> shachaf: no idea
07:39:22 <shachaf> I think you can.
07:39:50 <elliott> you should be able to, yeah
07:39:51 <oerjan> but anyway the idea is to use as few extensions as possible
07:39:56 <elliott> you can just @let at the very least
07:39:59 <shachaf> oerjan: by the way shadowing is bad hth
07:40:07 <oerjan> what shadowing?
07:40:10 <shachaf> e
07:40:40 <oerjan> bah
07:40:42 -!- ^v^v has quit (Read error: Connection reset by peer).
07:41:07 <oerjan> nothing to see here, move on
07:41:07 -!- ^v^v has joined.
07:41:56 <shachaf> oerjan: i was suspicious at first when i reloaded your url but then i saw that its contents were exactly equal to my editor buffer and decided i must be imagining things
07:42:12 <oerjan> hah
07:42:16 <zzo38> How can I parse a MySQL dump to convert to SQLite format?
07:43:44 <shachaf> is there a reason for using munge instead of using id directly
07:44:21 <oerjan> well it was originally munge x = (replicate 9 undefined ++ repeat x) !! 10
07:44:45 <oerjan> because i wanted to be sure ghc couldn't see through it
07:45:08 <shachaf> i like that id works there but ($) doesn't
07:45:12 <oerjan> huh
07:45:37 <oerjan> probably because of ghc's special $ parsing rule?
07:45:46 <shachaf> who knows
07:47:23 <oerjan> anyway we've proved that it's not sufficient to disable DeriveDataTypeable.
07:48:17 -!- SopaXorzTaker has joined.
07:48:31 <elliott> oerjan: munge x = reflect x reify
07:48:45 <elliott> actually GHC can probably see through that these days
07:48:49 <elliott> not with the terrifying original implementation though
07:48:54 <shachaf> I wouldn't be surprised if GHC can inline reflect x reify
07:48:55 <shachaf> Right.
07:49:02 <shachaf> If you make it recursive, though, GHC has no chance.
07:49:08 <shachaf> It doesn't inline reverse [] = []
07:49:56 <glguy> You can get it to inline the first iteration
07:50:42 <shachaf> What do you mean?
07:51:21 <glguy> It will inline a recursive function up to the first recursive call with the right pragma
07:51:55 -!- augur has joined.
07:52:02 <shachaf> In the bad old days we defined rev [] = []; rev [x] = [x]; rev xs = realReverse xs, or something like that.
07:52:14 <shachaf> To help the inliner along with that particular case.
07:52:22 <elliott> can you use GHC.Exts.lazy
07:52:24 <elliott> or something
07:52:49 <elliott> also does this trick work with GHC.Exts.coerce
07:52:57 <elliott> because if so, ouch
08:03:02 <oerjan> shopping ->
08:32:52 -!- chaosagent has quit (Ping timeout: 244 seconds).
08:43:27 <Lilax> That seems
08:43:32 -!- ais523 has quit.
08:43:38 <Lilax> complicated to an extreme?
09:01:11 <oerjan> Lilax: that's ghc for you :P
09:02:16 <shachaf> oerjan: I think I found another related bug.
09:02:27 <shachaf> Though not one that you can use to unsafeCoerce.
09:03:36 <Lilax> Tres bein!
09:04:30 <shachaf> λ> data T a where { A :: T Int; B :: T Bool }
09:04:30 <shachaf> λ> let f :: T Int -> (); f A = (); f B = ()
09:04:44 <shachaf> complains about the second pattern
09:04:49 <shachaf> λ> data T a where { A :: T (Proxy (Proxy :: * -> *)); B :: T (Proxy (Proxy :: (* -> *) -> *)) }
09:04:52 <shachaf> λ> let f :: T (Proxy (Proxy :: * -> *)) -> (); f A = (); f B = ()
09:04:54 <shachaf> no complaints
09:05:36 <shachaf> so i guess it checks that the types are the same without checking the kinds
09:05:55 <Lilax> that
09:06:13 <Lilax> looks like trash
09:06:16 <Lilax> no offense
09:07:17 <elliott> you say that to every piece of code that gets pasted in here
09:07:32 <Lilax> Probably
09:07:38 <mroman> hm
09:07:54 <Lilax> But that's cuz I'm not as advanced I still understand it kinda
09:08:25 <Lilax> but to me at my level it looks like someone was angry at their keyboard
09:08:44 <zzo38> Lilax: Are you sure??
09:08:48 <Lilax> ill be quiet now ;-;
09:08:54 <mroman> Lilax: You're learning Haskell?
09:09:03 <Lilax> very slowly
09:09:11 <Lilax> veeeeeeerrrry slowly
09:09:18 <Lilax> because school
09:09:22 <mroman> > (\x -> (\y -> x)) z y
09:09:29 <Lilax> and I don't have much time to code
09:09:52 <mroman> hm. lambdabot is gone
09:10:10 <oerjan> mroman: that's because of the bug we found, it ruins its sandboxing
09:10:31 <mroman> oh. Is there a ghc trac issue for this?
09:10:38 <shachaf> #10000
09:11:09 <Lilax> why wasn't the bug detected before? and was the bugs occurance because of something being changed?
09:11:40 <zzo38> The code above looks like it is used to demonstrate the bug; it doesn't seem a very good code for an actual program but that doesn't make it "trash"
09:12:06 <oerjan> Lilax: it's an interaction with a subtle use of the new PolyKind feature which i guess no one has considered before.
09:12:24 <mroman> I don't understand those features good enough to see how exactly this breaks safehaskell :(
09:12:50 <oerjan> Lilax: the change was in making types and Typeable instances PolyKinded without realizing you then had to include the kinds in the data.
09:13:20 <oerjan> mroman: http://oerjan.nvg.org/lbexploits
09:13:24 <oerjan> hth
09:13:33 <Lilax> I never said it was well ( I did and I'm sorry if it came off wrong ) but as my veiw point as where I am standing in my area of expertise in the haskells, it looks like random lettering and chars zzo38
09:13:52 -!- jbkcc has joined.
09:13:55 <zzo38> Ah, well, then you must learn.
09:13:56 <oerjan> mroman: those are further refinements i made tonight, now it's down to a single extension
09:14:33 <Lilax> Well.. I don't have time since its finals this month
09:14:34 <shachaf> i,i {-# LANGUAGE NoSafe #-}
09:14:39 <mroman> so
09:14:45 <mroman> what exactly should safehaskell prevent?
09:14:48 <mroman> the use of cast?
09:15:15 <shachaf> A function uc :: a -> b which is a valid implementation of id.
09:15:20 <oerjan> mroman: yes
09:15:41 <oerjan> mroman: or, wait
09:15:43 <vanila> safehaskell makes me sad
09:15:48 <Lilax> not a lot of fanciful script on that site of yours oerjan
09:15:49 <vanila> I feel like haskell has so much more potential
09:16:01 <oerjan> mroman: cast should be safe, always. it's a ghc bug that it isn't.
09:16:01 <vanila> am I just a totally out of touch purist or what
09:16:02 <shachaf> Oh, in this particular thing. Yes, different types should have different TypeReps.
09:16:06 <Lilax> haskell is a hassle
09:16:11 <vanila> haha Lilax nice
09:17:34 <oerjan> Lilax: most of my fanciful stuff is in the esoteric/ subdirectory, and most of it you need to go via the wiki to find
09:17:46 <zzo38> If I make up a Magic: the Gathering card that says "you gain 6 life and target opponent draws 3 cards" then how much should be the cost?
09:17:48 <Lilax> Ive been trying to pursuade my IT teacher to install linux into the deepfreeze program in the computers so I can code more
09:17:51 <shachaf> oerjan: So it looks like "GHC checks type 'equality' without checking kinds" is a problem in more than just Typeable.
09:18:07 <shachaf> Can you think of anywhere else where it could allow unsafeCoerce?
09:18:25 <Lilax> zzo38: a rediculous ammount
09:18:29 <shachaf> zzo38: Why would you ever play that card?
09:18:38 <oerjan> shachaf: um what you found was just exhaustiveness checking, no?
09:18:56 <zzo38> shachaf: To improve your life total
09:19:41 <shachaf> oerjan: well, it doesn't complain even though you're matching on an impossible pattern
09:19:48 <Lilax> I assume your life total goes up and the opponant draws three so maybe you can withstand the attacks that are already being placed?
09:20:07 <oerjan> shachaf: i think it's pretty well known that part of ghc isn't "perfect"?
09:20:13 <Lilax> opponent&
09:20:19 <oerjan> and not unsafe just because of that
09:20:24 <Lilax> I can't brain I has the dumb
09:20:47 <zzo38> Lilax: Yes
09:20:57 <zzo38> Although maybe it should be 7 life
09:20:59 <shachaf> Maybe.
09:21:07 <Lilax> yes to what?
09:21:16 <Lilax> my response of summerization
09:21:30 <shachaf> zzo38: Giving your opponent three cards seems like a huge cost regardless.
09:21:40 <shachaf> Maybe your goal is to make them lose by drawing the last few cards of their library.
09:21:56 <elliott> did anyone try GHC.Exts.coerce yet
09:21:58 <Lilax> they can only draw land?
09:22:03 <zzo38> Yes, if you use it enough they will not have enough cards left
09:22:04 <elliott> with the built-in Coercible stuff
09:22:20 <Lilax> Anyways
09:22:20 <shachaf> Bargain costs 2W and has a similar effect (+7 life, one card)
09:22:25 <Lilax> o/
09:23:53 <shachaf> zzo38: I guess this is meant for Limited?
09:24:25 <zzo38> Yes, mainly
09:24:31 <shachaf> oerjan: I don't know of any other case where GHC will let you match on something that brings an invalid type equality into scope.
09:26:58 <zzo38> Or, you should be also allowed to remove any counters from yourself too
09:31:03 <oerjan> mhm
09:40:21 -!- oerjan has quit (Quit: Argh).
09:51:27 <int-e> vanila: awake now :P
09:52:30 <vanila> oh okay!
09:52:47 <vanila> it was interesting how much better your unsafePerformIO is than mine and runST
09:53:18 <elliott> int-e: hi, I had to kill lambdabot
09:53:30 <elliott> because you can unsafeCoerce with just TypeFamilies and Typeable
09:53:35 <elliott> sorry
09:54:52 <int-e> elliott: thanks. so the quit-twice mechanic finally found some use...
09:55:56 <elliott> int-e: I was worried it'd respond to the @quit too slowly the second time to trigger that
09:56:04 <elliott> since it was busy joining channels
09:56:20 <int-e> vanila: http://lpaste.net/74498
09:56:20 <elliott> int-e: it might be safe as long as you stop Data.Typeable from being accessed
09:56:28 <elliott> all the exploits so far use Data.Typeable.cast
09:56:37 <elliott> I feel like GHC.Exts.coerce might do it too though
09:56:44 <elliott> (not sure, maybe not)
09:58:36 <int-e> elliott: hmm, but how many modules like Data.Typeable.Lens are out there? (this one reexports cast, and another function based on it.)
09:58:52 -!- hjulle has joined.
09:58:58 <vanila> hthats the code im talking about
09:59:15 <elliott> int-e: yeah
09:59:22 <vanila> performIO m = b (a m ()) where
09:59:23 <vanila> a :: IO a -> rw -> (# rw, a #)
09:59:23 <vanila> a = unsafeCoerce
09:59:23 <vanila> b :: (# rw, a #) -> a
09:59:23 <vanila> b (# _, x #) = x
09:59:27 <vanila> that was my attempt
09:59:32 <elliott> int-e: and you can probably get it from tons of things that are based on top of cast too
09:59:33 <vanila> always segfaults afterwards though
09:59:58 <elliott> int-e: tbh if there's nothing else sensitive on the VPS I might just take a backup and let it run, since I don't think the bug has been publicised anywhere but trac and here
10:00:08 <elliott> that's fuss for you of course though
10:00:24 <elliott> I dunno if people have checked if it works in HEAD
10:00:27 <elliott> I guess probably since the bug is open
10:04:32 <int-e> elliott: I've checked the #10000 version on ghc head. it's essentially the same thing...
10:04:55 * elliott nods
10:05:33 <int-e> I'm a bit dismayed that this works without PolyKinds and DataKinds, has oerjan given details?
10:05:46 <elliott> yes
10:05:52 <elliott> http://oerjan.nvg.org/lbexploits/Exploit3.hs
10:06:23 <elliott> OldTypeable is probably fine :P
10:06:27 <elliott> (maybe?)
10:06:40 -!- TieSoul has joined.
10:06:46 <int-e> right, another level of indirection... thanks
10:07:44 <elliott> int-e: afaict there is no reason you can't just make mueval run inside a chroot
10:07:48 <int-e> and a good demonstration that including the full kind will be the only thing that's going to work.
10:07:55 <elliott> and then none of this would matter
10:08:07 <elliott> heck, use Gregor's UMLBox like HackEgo, maybe :p
10:08:09 <elliott> that's a bit slower though
10:08:12 <vanila> wouldnt it just be less dangerous
10:08:25 <elliott> vanila: well you wouldn't be able to do any useful IO without a linux kernel bug
10:08:28 <elliott> which exist, but
10:08:31 <elliott> as a short-term solution...
10:08:52 <int-e> escaping chroots is an easy exercise ... but ... people would have to write shell code, transplant it into L.hs somehow, it adds up.
10:08:58 <vanila> couldn't you still screw upt he chroot forcing lambdabot to reboot?
10:09:04 <vanila> how do you escape chroot?
10:09:23 <int-e> (easy if you have a local root exploit to work from, which a determined attacker will have)
10:09:47 <elliott> vanila: as a non-root user, you're not meant to be able to
10:09:56 <int-e> chroot would definitely raise the bar
10:10:06 <elliott> chroots aren't perfect namespaces though, there are other leaks, but
10:10:32 <elliott> int-e: also, the user lambdabot runs as doesn't have to have access to the password file, or write access to anything but L.hs and other state
10:10:47 <elliott> well
10:10:52 <elliott> I guess if you source the password as an rc it does
10:11:04 <elliott> not that it's uh
10:11:06 <elliott> a very secure password
10:11:19 <int-e> I could change it ;-)
10:11:25 <int-e> (but I see no reason to)
10:18:20 <int-e> Okay... I can do read-only binds on the VPS. so a chroot is within reach.
10:18:47 -!- jbkcc has quit (Quit: My Mac has gone to sleep. ZZZzzz…).
10:42:34 -!- scoofy has left ("Leaving").
10:46:49 <elliott> int-e: note that e.g. getting lambdabot to quit would require being able to kill it
10:46:53 <elliott> since mueval runs as a separate process, at least
10:58:18 <int-e> elliott: btw your @quit was accepted in 170 seconds and the threashold is 300. So that seems to be okay.
10:59:21 -!- hjulle has quit (Quit: ZNC - http://znc.in).
10:59:23 <int-e> I'm bringing lambdabot back with mueval running in an ad-hoch chroot (which can still read more than strictly necessary, but has no write access anywhere important)
10:59:55 -!- hjulle has joined.
11:02:19 -!- shikhin has joined.
11:02:53 -!- lambdabot has joined.
11:09:54 -!- vanila has quit (Quit: Leaving).
11:11:42 <int-e> elliott: this looks so silly: http://int-e.eu/~bf3/tmp/mounts.txt
11:11:54 <elliott> haha
11:12:06 <elliott> am I allowed to unsafePerformIO-steal the password that I already have
11:12:16 <int-e> sure
11:12:20 <elliott> too lazy actually
11:12:27 <elliott> > 123
11:12:28 <lambdabot> 123
11:12:29 <int-e> actually
11:12:38 <elliott> you could bind mount /dev/null over that file
11:12:39 <int-e> the password is not visible, that's in ~lambda/run
11:12:42 <elliott> oh, nice
11:12:49 <elliott> int-e: uh
11:13:01 <elliott> int-e: is anything stopping you from making a {-# LANGUAGE Trustworthy #-} L.hs
11:13:04 <elliott> I guess it doesn't matter
11:13:05 <elliott> since it's unsafe anyway
11:13:11 <elliott> and also I guess L.hs isn't trusted
11:13:12 <int-e> they're read-only bind mounts
11:13:16 <elliott> oh, yeah
11:15:02 <int-e> (and the UID would be wrong for write access, too)
11:15:24 <int-e> >
11:15:25 <lambdabot> not an expression: ‘’
11:16:42 -!- nortti has changed nick to lawspeaker.
11:18:45 -!- lawspeaker has changed nick to nortti.
11:19:59 <int-e> elliott: can you say if I did anything absurdly stupid in http://int-e.eu/~bf3/tmp/chroot.c ?
11:20:15 <elliott> int-e: I'm no export but you know chroot(1) exists, right?
11:20:25 <elliott> well, I guess you'd need sudo too
11:20:28 <elliott> so never mind
11:20:31 <elliott> *expert either
11:20:35 <elliott> it looks reasonable though
11:20:44 <int-e> elliott: I needed something to make setuid root anyway.
11:20:49 <elliott> int-e: you could use unshare(2) to make a namespace
11:21:05 <elliott> ooh, or even just seccomp
11:21:14 <elliott> that's perfect because all it can do is read and write
11:21:25 <elliott> could even skip the chroot at that point
11:21:29 <int-e> > oeis [1,3,5]
11:21:30 <lambdabot> Not in scope: ‘oeis’
11:21:38 <int-e> oh?
11:21:40 <elliott> those working from @run is a bug anyway :p
11:23:45 <elliott> of course seccomp stops you exec()ing, so hm
11:23:49 <int-e> seccomp won't work for me; I can't touch the kernel.
11:23:59 <elliott> isn't it enabled by default
11:24:05 <elliott> chrome uses it
11:24:30 <int-e> who runs chrome on a vps?
11:24:36 <elliott> well, I mean
11:24:42 <elliott> it's been in the kernel since 2005
11:24:48 <int-e> but ok, how do I figure out whether it's supported...
11:24:54 <elliott> it's used by multiple major applications for security by now
11:25:15 <elliott> int-e: grep the kconfig in /proc or wherever it is?
11:25:23 <elliott> I forget the exact filename
11:25:44 <int-e> oh openssh has support for it, that may motivate an vps provider to enable it
11:26:30 <elliott> note that exec is *not* one of the syscalls you can do post-seccomp, without seccomp-bpf, so I guess you might have to patch mueval. but it would certainly be a long-term solution, since it's pretty airtight
11:26:30 <int-e> /proc/config.gz, but that feature is disabled
11:26:30 -!- Phantom_Hoover has joined.
11:27:13 <int-e> *patch* mueval? that horror needs to be rewritten ... oh time ... oh motivation!
11:31:57 <elliott> hehe
11:32:01 <elliott> I just meant patch it to do one syscall :)
11:32:06 <elliott> you could also use seccomp-bpf and allow exec though
11:32:22 <elliott> though I don't know if that is safe.
11:33:31 -!- Lilax has quit (Quit: Connection closed for inactivity).
11:34:12 <int-e> I think I'm satisfied with the relative safety for now.
11:34:25 <int-e> but thanks for the ideas
11:35:01 <elliott> "So, a method of finding and patching the system calls at runtime was devised. It uses a disassembler on the executable code, finds each system call and turns it into an RPC to the trusted thread." chrome used to do terrifying things
11:35:49 <int-e> . o O ( sounds like light-weight valgrind or qemu )
11:37:57 <fizzie> import qualified Elliott as E
11:38:10 <elliott> ?
11:38:23 <fizzie> I'm just now reading that export/expert thing.
11:38:27 <elliott> oh.
11:38:33 <elliott> because I'm not qualified to answer.
11:38:35 <elliott> I see, I see.
11:39:52 <int-e> elliott: really the main reason I wrote that little C program is that scripts cannot be setuid, and I was too lazy to look for an existing wheel.
11:40:26 * elliott nods
11:56:35 * int-e idly wonders how the VPS boots with an empty fstab...
11:58:00 <elliott> passing root=?
11:58:09 <elliott> systemd can do partition autodiscovery stuff nowadays but it's probably not that
11:59:08 <int-e> I think there's no hypervisor, just a container. so all the mounts can be prepared from outside.
11:59:45 <int-e> (and right, systemd is also magical)
12:00:10 <int-e> (so perhaps a mounted root partition is enough to get things running)
12:00:30 <elliott> oh, it's not a real VPS, just a docker thing? okay
12:00:41 <elliott> that surprises me. that's a relatively new thing
12:00:54 <int-e> http://openvz.org/Main_Page
12:00:55 <elliott> I'm not sure I trust containers that much yet...
12:00:59 <elliott> oh, right
12:01:06 <int-e> so not docker.
12:01:07 <elliott> okay, OpenVZ is old but it's really bad I think
12:01:11 <elliott> at least, tons of stuff doesn't seem to work on it
12:02:31 -!- Phantom_Hoover has quit (Ping timeout: 272 seconds).
12:03:40 <int-e> I think it's good enough to lambdabot anyway. :P
12:03:44 <int-e> s/to/for/
12:05:08 <int-e> (but yes, the container is leaky. pstree was behaving odd for a while, for example. and the brutal filtering of dmesg is a bit annoying (I tend to look there for clues when things go wrong))
12:07:17 <elliott> I think it also doesn't support a bunch of "standard" things like tun/tap and stuff
12:07:17 <int-e> The main criterion for running lambdabot is that the provider does not noticably overcommit the RAM. And that seems to work okay.
12:07:22 <elliott> and does weird things with memory accounting
12:07:32 <elliott> er, OpenVZ is specifically used because you can overcommit a ton :)
12:07:43 <int-e> I said *provider*
12:07:46 <elliott> right.
12:08:05 <elliott> but if they use OpenVZ, it's quite likely to cut costs by letting them oversell RAM.
12:08:32 <int-e> And I'm sure they do overcommit, because few people actually use all their RAM all the time.
12:08:45 -!- Phantom_Hoover has joined.
12:09:22 <elliott> yeah
12:09:40 <int-e> anyway. it works, mostly, and at less than $5 a month I honestly don't expect much more.
12:09:48 <elliott> who's it with?
12:10:01 <int-e> ramnode
12:10:11 * elliott nods
12:10:20 <elliott> you can get like $10/year if you're willing to put up with total crap :)
12:10:46 <elliott> or $35/forever if you want a completely useless and constantly failing box like esolangs.org and HackEgo run on -_-
12:10:50 <int-e> yeah but lambdabot needs 200-300 MB when it runs mueval. total crap won't work.
12:11:37 <int-e> (actually ghc's memory usage is quite crazy.)
12:12:15 <elliott> I'm tempted to work on that @run-without-reloading-GHC-constantly replacement, except that I don't actually care any more
12:12:22 <elliott> *replacement plugin,
12:13:20 <int-e> I can't be bothered; I expect such a server would leak memory, and at that point I begin prefer the current solution, as bad as it is.
12:13:38 -!- Phantom_Hoover has quit (Ping timeout: 246 seconds).
12:13:58 <int-e> (some "to" missing there)\
12:14:01 * elliott nods
12:14:05 <elliott> does ghci leak memory?
12:14:30 <elliott> "Roilan, from TragicServers, is back with these improved offers exclusively available on LowEndBox." bargain basement VPS providers have worrying names
12:16:34 -!- Tritonio has joined.
12:18:08 -!- Phantom_Hoover has joined.
12:25:19 -!- Phantom_Hoover has quit (Ping timeout: 255 seconds).
12:28:59 <fizzie> The $35/forever was for two gigabytes of RAM.
12:30:16 <int-e> sounds legit
12:31:38 <int-e> elliott: I don't have long running ghci sessions. I know that ghc --make leaks heavily.
12:34:17 <int-e> why does $35/forever sound like a pyramid scheme to me?
12:42:34 -!- Zuu has left.
12:45:16 <Jafet> Could be a good band name
12:48:05 -!- Phantom_Hoover has joined.
12:49:19 <fizzie> int-e: "How can you do this for this price?" "We've already built and own the infrastructure, we don't have the same cost model as our competitors. Our space, power and internet costs are far lower, and we pass the savings on to you."
12:50:08 <fizzie> And sorry, it was $35/forever (or $1/month) for just a half gig, the 2 GB version is $140/forever or $20/month.
12:51:54 <int-e> well, where do they get the free electricity?
12:52:19 <int-e> oh well, cost models
12:52:28 <fizzie> Yes, it's all about cost models.
12:52:30 <int-e> the cost model may include a planned bankruptcy
12:52:58 <int-e> (and that brings me straight back to the pyramid scheme association)
12:53:09 <fizzie> Very possibly. Or I guess it's just barely possible they've figured enough people are paying the per-month prices to cover operating costs, at least if they cut corners enough.
12:53:49 <int-e> wait, $20/month for the 2GB version?
12:54:17 <fizzie> Yes. It's $1/month for 512 MB, $10/month for 1 GB, $20/month for 2 GB.
12:54:29 <int-e> that's ... interesting.
12:54:36 <Jafet> Cost models
12:54:55 <elliott> to be fair it's an already-established provider that I think has a lot of money to throw around running this
12:54:58 <Jafet> Consider the people who put up their phpbb board and get two hits per month from googlebot, never using $140 of resources for a whole lifetime
12:55:00 <elliott> but not very sustainable yes
12:55:20 <int-e> (though I guess they figured that anybody not picking the 512 MB option will actually require a decent amount of memory. unlike all those webservers that run one apache instance)
12:55:33 <elliott> http://www.fibernetics.ca/ the company
12:55:49 <fizzie> It's also $40/month for 4 GB, $60/month for 6 GB and $80/month for 8 GB. So it's strictly linear in terms of RAM, except for the $1/month that's presumably there for shock value.
12:56:18 <elliott> tbh, it's probably worth more at $1/month than $35/forever
12:56:26 <elliott> since you'll probably get sick of how often it goes down before 35 months pass
12:56:26 <int-e> so you can oversell the 512MB plan much more than the larger ones.
12:57:32 <int-e> I'm just curious what kind of probably-legal-but-ethically-speaking fraud they're pulling off there.
12:58:38 <elliott> I think they have a lot of money to burn and figure that most people will buy a $35/forever one just because "how can you not at that price?", and then rarely use it because it's low-end and goes down a lot and comes with ~no support and sucks.
12:58:42 <fizzie> Is there a reasonable way of figuring out when a Debian system was initially installed? E.g. some file timestamps?
12:58:59 <elliott> fizzie: I think debian-installer leaves a log somewhere
12:59:04 <elliott> fish around /var/log?
12:59:23 <fizzie> There's /var/log/apt but all files there are weekly cycled, at least on this box.
12:59:25 <elliott> anyway, their $10/mo and up plans look actually sustainable
12:59:36 <fizzie> Hm, there's an "installer".
12:59:50 <elliott> since they're broadly comparable to DigitalOcean prices and so on
13:00:01 <fizzie> Every file in /var/log/installer/ is timestamped Oct 5, 2013, which sounds reasonable.
13:00:38 <fizzie> So it's been... maybe 15 months now.
13:01:03 <elliott> so they're subsidising the super cheap one with existing cash + more expensive monthly plans + below-average operating costs (so more profit from the more expensive ones than other providers) + not bothering with decent support etc. + most people who buy super-cheap dodgy-looking lifetime VPSes won't bother using them enough for the sale to be a loss
13:01:19 <elliott> also, they obviously got a lot of publicity for this
13:01:34 <fizzie> Which means (assuming current prices match the original) it was a good investment (FSVO), since for the 2GB level, 15 months at $20/month is $300, but the one-time fee is $140.
13:01:39 <elliott> so I dunno, I could see them running for years if they got lucky
13:02:48 <elliott> int-e: also consider that anyone who really uses the resources will probably need to upgrade eventually, either to one of their more expensive models (= more $$$ for them), or to another provider (thus meaning it's just a dormant VM they're paying for again)
13:03:04 <int-e> oh and maybe they're hoping that people who actually need more resources will outgrow their plan... as you just wrote
13:03:27 <elliott> I like how they have a 50% off sale right now.
13:03:31 <elliott> is that on the lifetime prices too, I wonder?
13:03:56 <int-e> oh, crappy vm that I never use for $17.50? that sounds reasonable
13:04:12 <elliott> I would buy it for that price :)
13:04:34 <elliott> int-e: oh and also they can always stop offering these lifetime VPSes at any time
13:05:02 <elliott> so honestly I feel like it could be pretty smart on the whole
13:05:13 <elliott> still risky, but I'm not convinced they'll go bust super quickly
13:07:03 <int-e> "Current total: $17.50"
13:07:19 <elliott> <li onClick="javascript:location.href='http://www.cloudatcost.com/aboutus.php';"><a href="#">about us</a></li>
13:07:22 <elliott> ok, but why.
13:08:18 <elliott> int-e: nice, run lambdabot on that and if anyone trashes it they'll be doing you a favour
13:08:48 <int-e> haha
13:11:35 <int-e> okay, let's read the terms and conditions
13:12:05 <int-e> "Master Services Agreement" is a great name.
13:13:06 <fizzie> The one-off prices are also "LIMITED TIME", at least according to the "step 1" ordering page.
13:13:11 <fizzie> But they've been like that for quite a while now.
13:13:25 -!- GeekDude has joined.
13:13:27 <int-e> wait, can you translate this into english? "It is the Customer's responsibility to provide, prepare and maintain the Customer's locations, facilities and equipment for the installation of CloudatCost Facilities and for CloudatCost to provide the Services to the Customer. Such provision, preparation and maintenance shall comply with CloudatCost' specifications and shall be at the Customer's expense."
13:14:02 <fizzie> int-e: They'll come into your home and install some equipment and bill you for it.
13:14:33 <fizzie> int-e: Basically, turn your house into one of their datacenters, at your expense.
13:14:48 -!- GeekDude has quit (Remote host closed the connection).
13:15:33 -!- GeekDude has joined.
13:16:05 <elliott> int-e: you have to keep your house tidy or they won't give you a server
13:16:19 <int-e> I guess they didn't spend any money on lawyers either.
13:16:20 -!- woe has joined.
13:22:03 <fizzie> Or maybe they did, and that's just one of the traps they set.
13:23:11 <fizzie> It does sound like a clause from a totally different agreement.
13:24:27 <Jafet> "LIMITED TIME" sounds about right
13:25:44 <int-e> "The Customer shall be liable to CloudatCost for all damages caused to real or tangible personal property, or for bodily injury or death caused by the Customer or an End User."
13:25:58 <int-e> Sounds like they've had experience with disgruntled customers.
13:29:35 <int-e> "19.10This Agreement has been drawn up in the English language at the express request of the parties." -- aha.
13:32:12 -!- Tritonio has quit (Remote host closed the connection).
13:33:31 <int-e> the privacy policy is a copy of http://www.worldline.ca/privacy-policy ... they didn't even bother to change the link.
13:36:25 <int-e> and that also seems to be the original source for the remaining terms. now worldline is a telco, so all those references to equipment on the customer's location make sense.
13:37:01 <int-e> ...isn't that fun...
13:41:19 <int-e> They're connected though. "[...] Less than a year later, Cloud at Cost – a hosting service with a $35 one-time fee and no monthly bill – has raked in $1 million without any marketing, and injected fresh energy into Fibernetics, a Waterloo Region-based telecom provider founded 11 years ago."
13:44:54 -!- boily has joined.
13:45:15 <elliott> int-e: I see, Worldline is owned by the same company.
13:45:20 <elliott> oh, you said that
13:45:40 <elliott> hmm, I wonder about the breakdown of that $1M
13:48:57 <int-e> "$35 is an easy purchase to get something that you can categorize as a toy, and get on it and play around."
13:49:37 <int-e> (One of the founders compares the $35 lifetime plan to the Raspberry Pi)
13:51:06 <int-e> I'm reading http://news.communitech.ca/columns/cloud-at-cost-injects-fibernetics-with-startup-energy/ there are some other interesting points.
13:53:40 -!- Tritonio has joined.
14:02:22 -!- woe has quit (Ping timeout: 245 seconds).
14:13:57 -!- S1 has joined.
14:18:34 -!- woe has joined.
14:24:35 <GeekDude> a*a + b*b < 4 gives me, http://i.imgur.com/bJ6tJpr.png and a+b<2 gives me http://i.imgur.com/ZwNH2xO.png, but shouldn't they be the same according to the Pythagorean theorem
14:24:57 <int-e> what?!
14:25:17 <int-e> sqrt(a^2 + b^2) does not equal a+b.
14:25:25 <GeekDude> Sorry if I said something completely inaccurate
14:25:34 <GeekDude> uhh
14:25:47 <Jafet> Shopping is math, let's go hard
14:25:49 <GeekDude> I should get more sleep
14:26:30 <elliott> we don't need to make fun of people for remembering a theorem wrong
14:26:36 <int-e> that said the second picture looks more interesting.
14:27:05 <int-e> elliott: of course not.
14:27:07 <elliott> it looks like a mandelbrot spider in itsweb
14:27:08 <elliott> *its web
14:27:12 <GeekDude> elliott: I remember the theorem fine, I just can't think
14:27:28 <elliott> it's fine :p
14:27:40 <GeekDude> Also, my code for that is here http://ahk.us.to/?p=38307e
14:27:54 <elliott> autohotkey golf is less fine though
14:28:01 <elliott> I have my limits
14:28:06 <GeekDude> ;)
14:28:12 <elliott> do you need those spaces
14:28:33 <GeekDude> I'm thinking I might be able to remove the space between w%w% and h%h%
14:28:35 <boily> I once wrote "(x + y)^2 = x^2 + y^2" in a physics exam. it was far from my proudest moments...
14:28:36 <GeekDude> but other than that, yes
14:28:56 <GeekDude> boily: Well, if that were true it'd make my code much more fun
14:28:58 <elliott> boily: freshman's dream
14:29:24 <boily> GeekDude: sometimes, it can be!
14:29:32 <GeekDude> sometimes
14:29:40 <GeekDude> Even a broken clock is right sometimes
14:29:49 <int-e> boily: ah just work with some field of characteristic 2. but I guess that doesn't happen so often in physics.
14:30:19 <int-e> GeekDude: twice a day, the saying goes.
14:30:28 <GeekDude> Well, what if it's a 24 hour clock?
14:30:30 <boily> elliott: wasn't there some other equation called that? something that has an integral somewhere...
14:30:51 <boily> int-e: damned reality...
14:31:33 <boily> GeekDude: http://www.watchtime.com/watches/images_db/big/109_glycine_3856.jpg :D
14:31:54 <boily> (I want one, but it's prohibititatively expensive.)
14:35:15 <int-e> what am I looking at?
14:36:07 <int-e> 24 hours, and I guess one of those rings can be turned..
14:36:17 <int-e> but I don't see the attraction.
14:38:08 <boily> there are all those variations: http://www.glycine-watch.ch/e/collection/collection_overview.e.jsp?ID_Group=100000
14:39:11 <boily> it's an elegant watch. not a big impossible monster that covers your whole arm. none of those extraneous thingies. just the right amount of information density.
14:39:16 <boily> and it has 24 hours!
14:40:31 -!- MDream has changed nick to MDude.
14:42:58 <int-e> honestly I think the 24 hour thing would only serve to confuse me :)
14:43:18 <int-e> (though I guess one would get used to it after a while)
14:45:32 -!- MoALTz has quit (Quit: Leaving).
14:52:40 -!- nys has joined.
14:57:21 -!- vanila has joined.
15:00:52 -!- KingOfKarlsruhe has quit (Quit: ZNC - http://znc.in).
15:05:33 -!- KingOfKarlsruhe has joined.
15:06:19 -!- GeekDude has quit (Quit: {{{}}{{{}}{{}}}{{}}} (www.adiirc.com)).
15:18:25 <int-e> aha, another great potential savings: the VPS defaults to "save mode" - it shuts down itself after 7 days.
15:26:31 <int-e> (the typo is mine)
15:41:17 -!- booly-yam-9787 has joined.
15:42:32 <int-e> An IP change when re-imaging. Interesting...
15:45:35 <elliott> did you buy one of them just to investigate
15:45:57 <elliott> you're supporting their business model :)
15:46:05 -!- woe has quit (Quit: Beware of programmers who carry screwdrivers.).
15:49:42 -!- booly-yam-9787 has quit (Remote host closed the connection).
15:50:55 <int-e> elliott: sure did.
15:53:23 -!- SopaXorzTaker has quit (Ping timeout: 256 seconds).
15:59:56 -!- adu has joined.
16:30:13 <int-e> elliott: I think of it as a Telco-who-sells-toys-as-a-side-business, which is a charming idea ;-)
16:31:28 <elliott> yeah. unfortunately we rely on one of those toys for our wiki :p
16:38:58 <vanila> hey
16:39:09 <vanila> i thought i could get some good lambda terms tto test my program on from BLC
16:39:14 <vanila> but then I realized they are lazy....
16:39:25 <vanila> do yonkow where i can get some free strict lambda terms
16:39:44 <int-e> where's the fun in that
16:40:01 <vanila> itsn ot so much fun , but helps me test my compiler works
16:41:30 <elliott> oh BLC is strict?
16:41:34 <elliott> that's a little sad
16:41:35 <int-e> BLC is lazy.
16:41:41 <vanila> my language is strict
16:41:42 <elliott> ah
16:41:49 <vanila> i could use futamura to port cod efrom otherl languages but its a lot of work......
16:42:40 <elliott> I can write strict lambda terms for $100/hour <_<
16:42:53 <int-e> \x.x
16:43:03 <vanila> icant afford that!
16:43:08 <JesseH> Some people can.
16:43:39 <elliott> yeah :(
16:44:08 <int-e> vanila: why don't you take a couple of church numerals, say evaluate (\f x.f (f (f (f x)))) (\f x. f (f (f (f x))))
16:44:30 <vanila> oh ys il definitely do a few of those
16:44:55 <int-e> those are essentially folds and can be evaluated strictly. most of the really interesting code involved fixed points and those are icky in strict lambda calculus.
16:45:17 <vanila> yeah, the lazyness lets the code be shorter
16:45:55 -!- boily has quit (Quit: NEWTONIAN CHICKEN).
16:49:01 <int-e> (and some neat blc programs have infinite output)
16:49:20 <elliott> there is probably an easy lazy->strict conversion?
16:50:13 <vanila> i think CBN CPS would work
16:50:25 <vanila> but i dont wnat to introduce more stuff that might have bugs in it
16:51:57 -!- supay has quit (Ping timeout: 272 seconds).
16:52:10 -!- vanila has quit (Remote host closed the connection).
16:52:17 -!- ocharles_ has quit (Ping timeout: 244 seconds).
16:59:26 -!- shikhin_ has joined.
17:02:45 -!- shikhin has quit (Ping timeout: 276 seconds).
17:04:26 -!- shikhin has joined.
17:07:01 -!- shikhin_ has quit (Ping timeout: 255 seconds).
17:07:47 -!- Frooxius has quit (Quit: *bubbles away*).
17:15:11 -!- Frooxius has joined.
17:26:58 <int-e> wtf, why do I have rpcbind running on that VPS now?
17:27:41 <int-e> some nfs support apparently.
17:27:44 <glguy> NFS?
17:28:16 <APic> Welcome to Rivendell, Mr. Anderson!
17:28:16 -!- MoALTz has joined.
17:28:27 <int-e> who wants this sh... stuff?
17:28:32 <elliott> what, the VPS?
17:28:35 <elliott> sure
17:28:58 <glguy> The lambdabot vps?
17:29:18 <int-e> no, the brand new cheap one
17:29:22 -!- GeekDude has joined.
17:29:29 <elliott> for sale: baby vps, never worn
17:29:51 <glguy> Pristine file system
17:30:38 <int-e> the lambdabot vps only listens to port 22 from outside (and so, now, does the cheap one)
17:38:52 -!- adu has quit (Quit: adu).
17:41:04 <int-e> helpful. "Jan 17 12:38:54 cheap mpt-statusd: detected non-optimal RAID status" ["cheap" is the hostname]
17:41:47 <olsner> "non-optimal", nice euphemism
17:42:13 <int-e> what it means, apparently, is "open /dev/mptctl: No such file or directory"
17:42:38 <elliott> I doubt there's much optimal about any of it
17:42:56 <int-e> I'm not sure what this is doing at all on a VPS.
17:47:50 -!- JesseH has changed nick to NotJesseH.
17:47:53 <int-e> and look at all these kernel modules ... sound... I guess that's important!
17:48:10 <elliott> maybe you can make noise in their data centre with it
17:48:25 -!- NotJesseH has changed nick to JesseH.
17:48:35 <int-e> and a drm module
17:48:50 <Taneb> It is amazing how many songs it is possible to sing to the tune of House of the Rising Sun
17:49:23 -!- ocharles_ has joined.
17:52:41 <olsner> int-e: I think drm here means drm rather than drm
17:52:56 <int-e> direct rendering mode, of course
17:53:01 <int-e> important in a headless server
17:53:03 <olsner> indeed
17:53:29 <mroman> digital remodelling?
17:53:40 <olsner> is it running a display manager too, for that all-important graphical login?
17:54:18 <JesseH> Taneb, Just played house of the rising sun instrumental along with a tupac acapella and it worked sort of
17:54:24 <int-e> no, just dome gettys. (I actually have some vnc-like interface where I get to see the text console, even during boot.
17:54:27 <int-e> )
17:54:33 <int-e> (they're using some vmware thingy)
17:54:42 <Taneb> JesseH, Drop It Like It's Hot works, and 99 Red Balloons aaalmost does
17:54:55 -!- Tritonio has quit (Remote host closed the connection).
17:55:32 <JesseH> Taneb, Try playing it along with a science lecture
17:55:45 <JesseH> I might write a lang that does just this
18:03:46 -!- ^v^v has quit (Read error: Connection reset by peer).
18:04:09 -!- ^v^v has joined.
18:10:36 -!- supay has joined.
18:15:22 <b_jonas> wait what
18:24:48 -!- oerjan has joined.
18:26:21 <HackEgo> [wiki] [[ComeFrom2]] http://esolangs.org/w/index.php?diff=41693&oldid=41688 * DDR * (+679) Added pedigree, tags.
18:27:16 <HackEgo> [wiki] [[ComeFrom2]] M http://esolangs.org/w/index.php?diff=41694&oldid=41693 * DDR * (+6) Found out where an uncommented line of text went. Commented it out.
18:27:24 -!- augur has quit (Remote host closed the connection).
18:28:06 -!- augur has joined.
18:32:28 -!- augur has quit (Ping timeout: 245 seconds).
18:34:02 <JesseH> b_jonas, to me?
18:37:01 <b_jonas> JesseH: no, it was unrelated
18:37:05 <JesseH> ok
18:37:13 <JesseH> Poo, was hoping you were interested
18:47:58 -!- oerjan has quit (Quit: leaving).
18:50:43 <HackEgo> [wiki] [[ComeFrom2]] http://esolangs.org/w/index.php?diff=41695&oldid=41694 * DDR * (+1642) Annotated counting to 10.
18:53:31 <JesseH> Wait, the bot shows wiki updates?
18:53:40 <b_jonas> yes
18:53:46 <JesseH> This would have been useful (one sec)
18:54:17 <JesseH> a year ago
18:56:42 <fizzie> It didn't do that a year ago.
18:56:49 <fizzie> It's a relatively new feature.
18:57:05 <int-e> it was probably added because somebody thought it'd be useful
18:57:13 <int-e> just a guess.
18:57:23 <fizzie> int-e: I think it was added because MediaWiki supported it.
18:57:43 <fizzie> You know, the kind of climbing-Everest style justification of "because it was there".
18:58:03 <int-e> that's also a possibility
18:58:10 <int-e> it could be a combination of both!
18:58:36 <fizzie> One further contributing factor was that the wiki moved to be on the same system as the bot.
18:58:44 <fizzie> Even though that's not strictly speaking a requirement for it.
18:58:56 <fizzie> (The updates are sent over UDP.)
18:59:09 <int-e> oh wait, you'd have insider knowledge about that
19:17:59 -!- augur has joined.
19:23:41 -!- Phantom_Hoover has quit (Ping timeout: 252 seconds).
19:40:31 -!- S1 has quit (Quit: S1).
20:07:24 -!- augur has quit (Remote host closed the connection).
20:07:40 -!- adu has joined.
20:13:12 -!- augur has joined.
20:39:17 -!- augur has quit (Remote host closed the connection).
20:44:56 <shachaf> int-e: So what's the situation with lambdabot?
20:45:05 <shachaf> You put it in a chroot?
20:48:00 <int-e> mueval is chrooted
20:48:09 <int-e> I'm not so worried about lambdabot itself
20:48:46 <shachaf> And there are enough extensions for the bug?
20:48:56 <shachaf> If so you should turn DataKinds back on at one point.
20:50:45 -!- chaosagent has joined.
21:01:29 -!- adu has quit (Quit: adu).
21:05:50 -!- Patashu has joined.
21:09:21 -!- Patashu_ has joined.
21:09:21 -!- Patashu has quit (Disconnected by services).
21:12:56 <Taneb> I have had quite an enjoyable chinese talkaway
21:21:44 -!- TieSoul has changed nick to tIEsLEEP.
21:22:51 -!- FreeFull has quit (Ping timeout: 264 seconds).
21:23:18 <int-e> :t Refl
21:23:18 <lambdabot> a1 :~: a1
21:37:10 -!- jbkcc has joined.
21:43:37 <JesseH> Is it written in an esolang?
21:44:06 * JesseH looking for general purpose esolang
21:45:19 <JesseH> Wonder if any good ones are available.
21:45:36 <JesseH> (good being pretty vague)
21:46:55 <JesseH> Preferably one with batteries included, so to speak.
21:47:33 <int-e> maybe look at the golfscript family? I dunno.
21:49:01 <int-e> your requirements may be self-contradictory; included batteries usually indicate some sort of success, and that means the language fails to be esoteric.
21:49:33 <b_jonas> agreed
21:50:04 <JesseH> I think a language can be esoteric and still be able to do things.
21:50:09 <b_jonas> JesseH: if you just want an esoteric _core_ but with a non-esoteric easy to use interface over it, just go with x86_64 and C++.
21:50:38 <b_jonas> if you want something exotic, try some scheme or smalltalk thingy maybe? or, I dunno
21:50:42 <JesseH> Easy to use? I don't remember typing that.
21:51:21 <JesseH> But hey, I expected these answers :)
21:51:28 <b_jonas> I'm just not sure what youw ant then
21:52:14 <b_jonas> do you just want an esolang that lets you call into existing libraries, including ones written in non-eso langs?
21:52:25 <b_jonas> (like haskell or something)
21:53:07 <JesseH> Perhaps, or ones just written in that language, but yeah some higher level things just in an esoteric way
21:53:35 <b_jonas> how about J then?
21:54:23 <JesseH> perhaps
21:54:35 <int-e> shachaf: as you've probably seen, oerjan figured out that just TypeFamilies + DeriveDataTypeable and StandaloneDeriving or AutoDeriveTypeable + RankNTypes (to get rid of typeable constraints) suffices for exploiting that bug. I have not yet managed to do it without type families, though it looks like it should be possible to exploit fundeps instead.
21:55:25 -!- lambdabot has quit (Quit: (brb with DataKinds)).
21:55:43 <JesseH> Maybe I am being self contradictory
21:55:49 <JesseH> Undecided
21:56:03 <JesseH> Testing the boundaries
21:58:46 <JesseH> I think the asm suggestion was valid
21:59:07 <JesseH> I need a stricter definition of esoteric.
21:59:46 -!- lambdabot has joined.
22:00:50 <MDude> What would you consider "batteries"?
22:01:03 -!- Patashu has joined.
22:02:04 <MDude> If you just want graphics and sound interface for an esolang, there's IBNIZ and ByteByteJump.
22:04:04 <MDude> Oh wait, BytePusher is the version with graphics.
22:04:38 -!- Patashu_ has quit (Ping timeout: 264 seconds).
22:04:44 -!- GeekDude has quit (Quit: {{{}}{{{}}{{}}}{{}}} (www.adiirc.com)).
22:04:57 <shachaf> int-e: Yes, I was part of that outfiguring.
22:05:07 <shachaf> int-e: You don't even need DeriveDataTypeable, do you?
22:05:31 <shachaf> oerjan's latest thing just turned on TypeFamilies.
22:06:00 <shachaf> int-e: By the way, if you switch from TypeFamilies to some other extensions providing similar power, you won't get KindSignatures turning on automatically.
22:06:43 -!- b_jonas has quit (Ping timeout: 272 seconds).
22:07:42 <int-e> shachaf: right, he did.
22:08:06 <shachaf> It might be possible to have GHC infer the kinds, though.
22:14:23 -!- myname has quit (Ping timeout: 240 seconds).
22:14:29 -!- myname has joined.
22:14:45 -!- FreeFull has joined.
22:14:49 -!- FreeFull has quit (Changing host).
22:14:49 -!- FreeFull has joined.
22:16:50 <JesseH> MDude, sockets, split, and other things
22:17:25 <JesseH> could just add those things to my own lang
22:18:47 -!- b_jonas has joined.
22:21:22 -!- tIEsLEEP has changed nick to TieSoul.
22:32:12 -!- augur has joined.
22:33:14 -!- Tritonio has joined.
22:35:42 -!- GeekDude has joined.
22:39:39 -!- b_jonas has quit (Ping timeout: 272 seconds).
22:45:17 -!- Lilax has joined.
22:46:03 <Lilax> is lambdabot fixed
22:46:17 <Lilax> > pizza
22:46:18 <lambdabot> Not in scope: ‘pizza’
22:46:53 * APic ordered Pizza Frutti de Mare with Pineapple and Anchovies.
22:46:57 <APic> Sorry for OT
22:51:29 -!- b_jonas has joined.
22:51:43 <MDude> > 1
22:51:44 <lambdabot> 1
22:52:14 <MDude> > 1 ( 1 )
22:52:16 <lambdabot> Could not deduce (GHC.Num.Num (a0 -> t))
22:52:16 <lambdabot> arising from the ambiguity check for ‘e_111’
22:52:16 <lambdabot> from the context (GHC.Num.Num (a -> t), GHC.Num.Num a)
22:52:51 <Lilax> > 1^2(7+7)\frac{dy}{dx}(7*8b^2)
22:52:52 <lambdabot> <hint>:1:9: parse error on input ‘\’
22:53:01 <Lilax> oh
22:53:18 <Lilax> touchè
22:59:04 -!- S1 has joined.
23:01:22 <MDude> > <
23:01:23 <lambdabot> <hint>:1:1: parse error on input ‘<’
23:03:29 -!- shikhin_ has joined.
23:06:29 -!- shikhin has quit (Ping timeout: 245 seconds).
23:24:14 -!- jbkcc has quit (Quit: My Mac has gone to sleep. ZZZzzz…).
23:25:09 <zzo38> Do you have any .XI instruments? I want to make AmigaMML in #EXTENDED mode to accept .XI instruments (in addition to what it already accepts).
23:36:51 -!- oerjan has joined.
23:37:26 <zzo38> Do you know these things?
23:37:57 <nys> i'm trying to remember whether kiarchive or waveworld had any .XI files
23:38:13 <Lilax> >help
23:38:20 <Lilax> lambdabot: pls
23:38:26 <nys> milkytracker can readily fabricate them if you need them
23:40:59 <oerjan> Lilax: i think you want @help . > (which needs a space after) is only for evaluating haskell expressions.
23:41:25 <oerjan> @help
23:41:25 <lambdabot> help <command>. Ask for help for <command>. Try 'list' for all commands
23:42:14 <oerjan> int-e: hey a suggestion: @help should show the prefixes, and > help could be defined to do the same thing
23:42:56 <oerjan> > help
23:42:58 <lambdabot> Not in scope: ‘help’
23:44:41 <oerjan> @tell int-e it might help newbies if @help showed lambdabot's prefixes, and help could be defined so > help does the same thing
23:44:41 <lambdabot> Consider it noted.
23:46:22 -!- hjulle has quit (Ping timeout: 240 seconds).
23:51:31 -!- Patashu has quit (Disconnected by services).
23:51:31 -!- Patashu_ has joined.
23:52:03 -!- GeekDude has changed nick to GeekCraft.
23:55:18 <Lilax> thanks Mr. oerjan
23:55:24 <nys> zzo38, kiarchive has .XI instruments: http://modarchive.org/?faq-torrents-current
23:56:51 -!- hjulle has joined.
23:58:01 <zzo38> But do they have just some ZIP archives with a few files? I don't need all of them.
←2015-01-16 2015-01-17 2015-01-18→ ↑2015 ↑all