←2011-10-27 2011-10-28 2011-10-29→ ↑2011 ↑all
00:01:05 <elliott> choose
00:02:34 -!- tiffany has quit (Quit: Leaving).
00:04:36 <monqy> aurget or pacaur? packer's linked webpage isn't as tidy as either of theirs so im disqualify it
00:05:08 <elliott> what, https://github.com/bruenig/packer?
00:06:28 <monqy> yeah; it is slightly less tidy
00:06:42 <monqy> at least I think it is???
00:06:45 <elliott> oh I don't like pacaur much because it has its own non-pacman syntax
00:06:51 <elliott> even if it supports the pacman ones too
00:06:59 <monqy> I don't know enough to make actually educated guesses ;_;
00:07:10 <zzo38> Is there any other way to represent equality of numbers in the type system?
00:07:13 <elliott> aurget is tempting especially since it avoids wrapping pacman operations
00:07:31 <monqy> oh yeah that's nice
00:07:40 <zzo38> I thought of using bijective function but there is no such type that can only be bijective function.
00:08:23 <monqy> equality of what numbers
00:11:17 <monqy> where did you get these numbers? what is their home
00:11:19 <zzo38> For example, (Maybe (Maybe Zero), Maybe (Maybe (Maybe Zero))) meaning 2 times 3 make 6 so you can have a bijective function between that and the Maybe (Maybe (Maybe (Maybe (Maybe (Maybe Zero))))) for six
00:14:39 -!- MSleep has quit (Ping timeout: 240 seconds).
00:15:07 <monqy> wjat?
00:17:03 <elliott> monqy: aurget seems good
00:17:22 <monqy> i'll get aurget next time i need to aur i guess
00:17:49 <elliott> monqy: i'm glad the aur packages for haskell stuff are good... they build profiling and docmentation
00:17:52 <elliott> lol, dynamic too but w/e
00:18:30 <monqy> i haven't gotten much aur haskell stuff...afraid of conflicts with cabal stuff...nightmares...
00:18:49 <monqy> haven't gotten much/i forget if i've gotten any
00:19:05 <elliott> monqy: oh i am literally just using only aur
00:19:10 <elliott> and not cabal-install
00:19:10 <monqy> oh
00:19:18 <monqy> what happens when you need something that's not on aur
00:19:25 <monqy> manual instl?
00:19:45 <elliott> monqy: http://aur.archlinux.org/packages.php?K=arch-haskell&SeB=m
00:19:49 <elliott> there's 1815 packages
00:19:55 <elliott> anything that's not on there is probably not worth using
00:19:58 <elliott> or else I can just package it myself
00:19:59 <monqy> h,mm
00:20:01 <elliott> I think there's an automated tool
00:20:08 <elliott> to turn cabal -> pkgbuild
00:21:09 <monqy> i guess i'll try that next time i start oveR??
00:26:25 <elliott> monqy: yeah, I'm practically sure all these are generated
00:26:27 <elliott> because they have things like
00:26:31 <elliott> # custom variables
00:26:31 <elliott> _hkgname=cpphs
00:26:31 <elliott> _licensefile=LICENCE-LGPL
00:26:36 <elliott> and all their build/package functions look the same
00:27:07 <elliott> monqy: yep: http://aur.archlinux.org/packages.php?ID=17471
00:27:09 <elliott> cabal2arch
00:27:23 <elliott> awesome
00:27:38 <elliott> this could keep me with arch indefinitely, if it's a reliable way to avoid cabal-install being a pile of crap
00:31:58 <elliott> monqy: I still need cabal to handle actually building my stuff though
00:32:01 <elliott> but that's much less painful
00:32:08 -!- evincar has quit (Quit: leaving).
00:33:26 <zzo38> What would your D&D character do in case of the following:
00:33:33 <zzo38> * You find some money that you think is money but everyone else thinks is just all hallucination.
00:33:38 <monqy> I have no dnd character
00:33:41 <zzo38> * You find some money that you think is just hallucination but everyone else thinks is real money.
00:33:55 <elliott> `quote game where
00:33:57 <HackEgo> 50) <GregorR-L> If I ever made a game where you jabbed bears ... <GregorR-L> I'd call it jabbear. \ 582) <monqy> game where you flip a coin but it's really really big
00:33:57 <zzo38> * The king is going bald!
00:34:05 <elliott> second one to be precise
00:34:25 <zzo38> * Your deity has been destroyed.
00:34:33 <zzo38> * Along the road, you encounter a kobold that looks injured - he's unconcious, bleeding slowly from an arrow wound.
00:34:42 <zzo38> * Someone offers a party member a job you are clearly unqualified for.
00:34:51 <zzo38> * You find a magic scroll with strange effects that matches nothing you have ever seen before. (Using any Identify spell and such doesn't help)
00:35:01 <elliott> monqy: should i use String or Text or mix both help
00:35:19 <monqy> what are you doing and whats text ;_;
00:35:34 <elliott> you know what Text is..........
00:35:54 <monqy> sort of
00:36:17 <elliott> http://hackage.haskell.org/package/text.........
00:36:33 <monqy> yeah that thing
00:36:51 <monqy> but I don't know every trade off
00:36:59 <monqy> never used it so i can;t judge preteynes either
00:38:15 <elliott> well I don't really want to just use String
00:38:18 <elliott> mixing String and Text is ugly BUT
00:38:23 <elliott> it means you can avoid OverloadedStrings
00:38:35 <elliott> tag names and the like become Strings but actual body text becomes Text
00:38:43 <elliott> but you'll want to pattern-match over the former much more than the latter
00:39:10 <monqy> how ugly is mixing? maybe the best chocie?
00:40:32 <elliott> not that ugly, but it just Feels a bit Wrong
00:40:38 <elliott> especially since I get the data from the C lib in UTF-8
00:40:46 <elliott> so I need a UTF-8 -> String decoder as well as UTF-8 -> Text
00:40:49 <elliott> which might even mean another dependency
00:42:15 <monqy> oh gross
00:43:46 <oerjan> oh sh why isn't there a hobbit pun in iwc today
00:44:07 <oerjan> (well it _is_ (prolonged) guest week, but still...)
00:48:06 <oerjan> :t many
00:48:07 <lambdabot> forall (f :: * -> *) a. (Alternative f) => f a -> f [a]
00:51:13 <zzo38> There is monad transformer that makes a new monad from a monad, but what is it called when it makes a monad from a comonad instead?
00:51:28 <elliott> [21 of 21] Compiling Language.Haskell.Exts ( src/Language/Haskell/Exts.hs, dist/build/Language/Haskell/Exts.dyn_o )
00:51:28 <elliott> BFD: reopening dist/build/libHShaskell-src-exts-1.11.1.a(Exts__22.o): No such file or directory
00:51:28 <elliott> uh
00:51:31 <coppro> A comonad cotransformer
00:51:33 <monqy> "weird"
00:51:43 <monqy> don't comonad transformers go comonad->comonad????
00:51:53 <monqy> or am I thinking of something else
00:52:01 <oerjan> monqy: presumably
00:52:03 <monqy> oh I missed the co
00:52:06 <monqy> in cotransformer
00:52:07 <elliott> this is getting painful
00:52:10 <monqy> yeah cotransformer makes sense
00:52:12 <monqy> I guessssssss
00:52:28 <monqy> I was thinking cotransformer too then looked and wow it was there
00:52:37 <monqy> crys in not reading things properly shame
00:56:56 <zzo38> What are some examples of comonad cotransformers?
00:57:23 -!- pikhq_ has joined.
00:57:48 -!- pikhq has quit (Ping timeout: 260 seconds).
01:00:00 -!- MSleep has joined.
01:05:01 <elliott> hmm
01:05:03 <elliott> > id <|> id
01:05:04 <lambdabot> Overlapping instances for GHC.Show.Show (a -> a)
01:05:04 <lambdabot> arising from a use of `...
01:05:15 <elliott> :t (fromLeft <|> fromRight)
01:05:16 <lambdabot> Not in scope: `fromLeft'
01:05:16 <lambdabot> Not in scope: `fromRight'
01:05:22 <elliott> oh wait no
01:05:23 <elliott> hmm
01:05:34 <elliott> :t ((?f :: a -> Maybe b) <|> (?g :: a -> Maybe b))
01:05:36 <lambdabot> Could not deduce (?f::a -> Maybe b) from the context ()
01:05:36 <lambdabot> arising from a use of implicit parameter `?f'
01:05:36 <lambdabot> at <interactive>:1:2-3
01:05:39 <elliott> sigh
01:05:39 <oerjan> > (id <|> undefined) 2
01:05:40 <lambdabot> No instance for (Control.Applicative.Alternative ((->) a))
01:05:40 <lambdabot> arising from ...
01:05:46 <elliott> :t ((undefined :: a -> Maybe b) <|> (undefined :: a -> Maybe b))
01:05:48 <lambdabot> forall a b. (Alternative ((->) a)) => a -> Maybe b
01:05:54 <elliott> darn, there's no instance
01:05:55 <oerjan> ic
01:05:59 <elliott> oerjan: I was thinking goNext = goRight <|> goUp
01:06:12 <elliott> oh wait
01:06:13 <elliott> it's actually
01:06:20 <elliott> goNext = goRight <|> (goUp >>= goNext)
01:06:29 <oerjan> > (Just <|> undefined) 2
01:06:29 <lambdabot> No instance for (Control.Applicative.Alternative ((->) a))
01:06:29 <lambdabot> arising from ...
01:06:30 <elliott> goNext x = goRight x <|> (goUp x >>= goNext)
01:06:30 <elliott> not bad
01:07:30 <oerjan> :t (id <|> id)
01:07:31 <lambdabot> forall a. (Alternative ((->) a)) => a -> a
01:08:01 <oerjan> elliott: you're forgetting some goDown there
01:08:11 <elliott> oh hm
01:08:17 <elliott> what is the correct implementation?
01:08:40 <oerjan> well depends whether you want to do the parent node first or last
01:09:06 <elliott> oerjan: first, I would think; although last would be good to have too; but doesn't last result in an infinite loop?
01:09:20 <elliott> if you transform a child into something that causes the parent node to match ... hmm, no
01:09:25 <elliott> yeah i guess both would be nice
01:09:39 <elliott> oerjan: parent node first sounds like it needs less satck
01:09:44 <elliott> s/satck/stack/
01:12:30 <elliott> [ 2 of 21] Compiling Language.Haskell.Exts.Annotated.Syntax ( src/Language/Haskell/Exts/Annotated/Syntax.hs, dist/build/Language/Haskell/Exts/Annotated/Syntax.dyn_o )
01:12:32 <elliott> so sloooow
01:12:38 <oerjan> goDown x <|> goRight x <|> (goUp >>= goNext)
01:13:51 <elliott> oerjan: what is goDown?
01:13:53 <elliott> go down to first child?
01:13:58 <oerjan> yes
01:14:40 <elliott> pretty
01:14:44 <elliott> what's the other way around?
01:16:23 <oerjan> (goRight x >>= goBottom) <|> goUp x
01:16:34 <elliott> #let alignment t = "%lu", (unsigned long)offsetof(struct {char x__; t (y__); }, y__)
01:16:37 <elliott> hmm, does that _work_?
01:16:41 <elliott> any language lawyers? :P
01:16:47 <elliott> oerjan: goBottom?
01:17:05 <oerjan> goBottom x = (goDown x >>= goBottom) <|> pure x
01:17:23 <elliott> ah
01:17:43 <elliott> these are nice. feels like we've cracked it
01:17:49 <oerjan> that recursion is what i wanted many for, btw, but it doesn't fit
01:18:40 <elliott> darn
01:18:52 <oerjan> hm?
01:19:27 <elliott> re: many
01:21:57 <oerjan> it's a kind of muntil
01:22:13 <oerjan> @hoogle muntil
01:22:13 <lambdabot> No results found
01:22:17 <oerjan> @hoogle untilM
01:22:17 <lambdabot> No results found
01:22:35 <elliott> http://hackage.haskell.org/packages/archive/monad-loops/0.3.0.2/doc/html/Control-Monad-Loops.html
01:22:41 <elliott> untilM :: Monad m => m a -> m Bool -> m [a]Source
01:22:41 <elliott> Execute an action repeatedly until the condition expression returns True. The condition is evaluated after the loop body. Collects results into a list. Parameters are arranged for infix usage. eg. do {...} untilM_ ...
01:22:55 <oerjan> aha
01:23:00 <oerjan> not quite it, either
01:23:06 <elliott> oerjan: well there's whileM
01:23:15 <elliott> whileM :: Monad m => m Bool -> m a -> m [a]Source
01:23:16 <elliott> Execute an action repeatedly as long as the given boolean expression returns True. The condition is evaluated before the loop body. Collects the results into a list.
01:23:23 <elliott> oerjan: and whileM' does it for any MonadPlus
01:23:27 <oerjan> we _don't_ want a list :P
01:23:50 <elliott> thus whileM'
01:23:51 <elliott> Dependenciesbase (<4) or
01:23:51 <elliott> base (≥4)
01:23:55 <elliott> good dependencies
01:24:58 <oerjan> elliott: we need something with (a -> m a) argument
01:26:05 <oerjan> all of the untilM's and iterateUntil seem to think it's enought to just do an action.
01:26:23 <oerjan> which _technically_ is correct since you can use a StateT wrapping
01:26:27 <oerjan> i think
01:26:41 <oerjan> *enough
01:28:12 <oerjan> :t many . StateT
01:28:13 <lambdabot> forall a s (m :: * -> *). (Functor m, MonadPlus m) => (s -> m (a, s)) -> StateT s m [a]
01:28:39 <oerjan> well many also collects, hmph
01:28:58 <oerjan> :t many_
01:28:59 <lambdabot> Not in scope: `many_'
01:29:03 <oerjan> :P
01:34:42 <oerjan> so this norwegian non-profit organization SOS Rasisme was apparently taken over by communists, who inflated their membership numbers by something like 900% to receive 9.5 million NOK in state support.
01:37:47 <oerjan> http://translate.googleusercontent.com/translate_c?act=url&hl=no&ie=UTF8&prev=_t&rurl=translate.google.no&sl=no&tl=en&u=http://www.dagbladet.no/2011/10/27/nyheter/innenriks/sos_rasisme/medlemsjuks/lnu/18790279/&usg=ALkJrhjuxo3KtieUzuxMTVuJAptIb0NPfw
01:38:02 <elliott> oh, i thought you meant in the past.
01:38:16 <oerjan> no, last 10 years :P
01:38:39 <oerjan> well it's definitely in the past _now_
01:57:51 -!- pikhq has joined.
01:57:54 -!- pikhq_ has quit (Ping timeout: 252 seconds).
01:59:00 -!- ive has joined.
02:16:29 <zzo38> Do you know of any comonad cotransformers or monad cotransformers? Is there anything else even more strangely?
02:19:17 -!- aloril has quit (Ping timeout: 260 seconds).
02:26:31 <oerjan> zzo38: http://comonad.com/reader/2011/monads-from-comonads/ seems relevant
02:28:22 <zzo38> oerjan: Yes I saw that too.
02:28:41 <oerjan> there's a whole series of posts
02:31:34 -!- aloril has joined.
02:36:18 <zzo38> One idea for bijective function syntax would be like: bijection { (x, y) -> (y, x); } similar to case but with various restrictions.
02:40:31 -!- MSleep has changed nick to MDude.
02:48:18 <elliott> Deewiant: I bet you know ALL ABOUT offsetof.
02:50:12 <oerjan> vladimir offsetof, famous russian book printer
02:57:59 <elliott> :t replicateM
02:58:00 <lambdabot> forall (m :: * -> *) a. (Monad m) => Int -> m a -> m [a]
02:58:16 <elliott> :t peekElemOff
02:58:17 <lambdabot> Not in scope: `peekElemOff'
02:58:19 <elliott> ?hoogle peekElemOff
02:58:20 <lambdabot> Foreign.Storable peekElemOff :: Storable a => Ptr a -> Int -> IO a
02:59:32 <oerjan> boris peekelemoff, notorious st. petersburg voyeurist
03:01:33 -!- aloril has quit (Read error: Operation timed out).
03:02:09 <elliott> :D
03:08:05 <elliott> i hate ffis
03:08:44 <oerjan> foreign functions coming here and stealing our jobs
03:13:14 -!- pikhq has quit (Remote host closed the connection).
03:17:49 -!- aloril has joined.
03:18:16 -!- pikhq has joined.
03:22:50 -!- pikhq has quit (Remote host closed the connection).
03:25:02 -!- pikhq has joined.
03:26:02 -!- DCliche has joined.
03:29:35 -!- Darth_Cliche has quit (Ping timeout: 245 seconds).
03:41:02 <elliott> hey oerjan what happens if i work on something else to distract me from code problems but it's broken too????
03:46:32 <oerjan> it's bugs all the way down
03:51:49 <zzo38> When I was thinking about making number theory with Haskell type system, I think that (Not x) is like the C (!x) for natural numbers x, like (x -> Zero) or $0^x$ is that correct?
04:09:32 <pikhq> "Mozilla and Bing are pleased to make available Firefox with Bing, a customized version of Firefox that sets Bing as the default search engine in the search box and AwesomeBar and makes Bing.com the default home page."
04:10:03 <elliott> instant download
04:10:31 <pikhq> Hell is awfully chilly today.
04:10:50 <zzo38> Why does Mozilla have to do anything about that? Bing could do it by themself, isn't it?
04:11:04 <pikhq> zzo38: Most definitely.
04:12:57 <elliott> zzo38: because this way microsoft give money to mozilla
04:13:54 -!- quintopia has quit (Ping timeout: 255 seconds).
04:24:44 -!- quintopia has joined.
04:41:12 <zzo38> How much do you know about Local Sidereal Time?
04:47:10 <pikhq> Not much; there is no time but UTC.
04:51:30 <zzo38> There is other time specifications, though.
04:51:41 <pikhq> Few of them worthwhile.
04:52:16 <zzo38> It seems to depend what you do, such as solar time or whatever
04:53:54 <pikhq> DESTROY THE DAY STAR
04:53:54 <pikhq> :P
04:54:02 <fizzie> UT1, the Unreal Tournament time.
04:54:53 -!- Jafet has joined.
05:20:34 -!- copumpkin has changed nick to IAmTheOnePercent.
05:21:19 <zzo38> Astrolog supports equatorial mode but its implementation does not work with all charts that Astrolog can make; and as far as I know there is no "Local Sidereal Time" object that can be plotted in equatorial mode. The documentation suggests using sidereal zodiac and hours/minutes display of angles, but tropical/sidereal mode appears to be ignored in equatorial mode
05:22:28 <zzo38> "This will display planetary positions relative to the Earth's equator instead of the ecliptic i.e. Earth's orbit. This is the way more commonly used in astronomy, and results in real right ascension notation, especially when combined with the -s sidereal zodiac and -sh hours and minutes display format. This switch makes the declination values in the standard -v listing also relative to the
05:22:56 <zzo38> equator, instead of the ecliptic latitude displayed by default, where "Declination" will be printed at the head of the column instead of "Latitude". (Without this the only way to get such information is from the zenith latitudes in the -L astro-graph chart which show the same thing.) Note that this setting isn't fully integrated with allof Astrolog's charts; specifically it will distort the values in the
05:23:10 <zzo38> -Z local horizon, -S orbit, and -L astro-graph charts which assume ecliptic positions, and hence -sr shouldn't be combined with these options."
05:23:53 -!- IAmTheOnePercent has changed nick to copumpkin.
05:25:45 -!- DCliche_ has joined.
05:29:34 -!- DCliche has quit (Ping timeout: 260 seconds).
05:40:09 <zzo38> But the documentation seems to be wrong; selecting sidereal zodiac does not affect equatorial mode.
05:44:55 <pikhq> http://perldoc.perl.org/perlmod.html#BEGIN%2c-UNITCHECK%2c-CHECK%2c-INIT-and-END
05:45:04 <pikhq> The Awkawkawkawkawkawk section of Perl.
05:49:17 -!- pikhq_ has joined.
05:52:17 -!- pikhq has quit (Ping timeout: 256 seconds).
05:54:56 <zzo38> Actually it seems the 10th Cusp object might plot the local sidereal time
05:55:29 <zzo38> (That is, in equatorial mode)
05:55:37 <elliott> zzo38: Why are you using Astrolog, anyway?
05:59:35 <elliott> pikhq_: /nick elliott, i wanna try something
05:59:40 -!- elliott has changed nick to qqqq.
06:00:31 <zzo38> Maybe I should make my own program instead so that I can include whatever improvements and licensed under GNU GPL (in fact, the Swiss Ephemeris requires it; Astrolog does not use Swiss Ephemeris and is licensed for non-commercial use only); there are some features of Astrolog which I wish to purposely omit (such as interpretation mode), althhough a separate program could use its output to produce something similar.
06:01:43 -!- oerjan has quit (Quit: Good night).
06:05:15 <qqqq> OK someone else take my nick.
06:05:23 <qqqq> monqy you do it.
06:09:12 <monqy> hi
06:09:20 <monqy> are you going to kill me ;_;
06:10:35 -!- elliott has joined.
06:10:49 <zzo38> Now you can try something.
06:11:04 -!- elliott has changed nick to Guest58077.
06:11:39 -!- Guest58077 has quit (Remote host closed the connection).
06:12:04 <qqqq> oh
06:12:06 <qqqq> i forgot
06:12:07 <qqqq> oops
06:12:12 <qqqq> i apologise zzo38
06:12:17 <qqqq> i did not see it :(
06:13:49 <zzo38> Why don't you try it on another connection from your computer?
06:14:16 <qqqq> oh right that would work
06:15:13 -!- elliott has joined.
06:15:15 -!- qqqq has quit (Quit: Leaving).
06:15:27 -!- qqqq has joined.
06:15:27 -!- elliott has quit (Disconnected by services).
06:15:34 <qqqq> * elliott :Nickname is already in use.
06:15:35 <qqqq> * nicksev :No such nick/channel
06:15:37 <qqqq> -NickServ- elliott has been ghosted.
06:15:39 <qqqq> close enough :P
06:16:23 <qqqq> hmm, i guess xchat has no way to wait a bit
06:25:29 <qqqq> ?hoogle try
06:25:36 <lambdabot> Control.Exception try :: Exception e => IO a -> IO (Either e a)
06:25:36 <lambdabot> Control.OldException try :: IO a -> IO (Either Exception a)
06:25:36 <lambdabot> Control.Exception.Base try :: Exception e => IO a -> IO (Either e a)
06:26:14 -!- qqqq has changed nick to elliott.
06:26:17 -!- elliott has quit (Changing host).
06:26:17 -!- elliott has joined.
06:26:51 <shachaf> elliott: Leeds?
06:27:04 <elliott> Leeds is a place, yes.
06:27:30 <shachaf> A place you're in?
06:28:17 <elliott> No. (Is this going to be followed by another placename until I say yes?)
06:29:04 -!- zzo38 has quit (Remote host closed the connection).
06:29:05 <shachaf> elliott: Maybe.
06:29:10 <shachaf> Langtoft?
06:29:55 <elliott> I actually live in a little cardboard box underneath Sealand.
06:30:06 <shachaf> Oh.
06:30:28 <shachaf> What happened to <elliott> I am in fact already in California. </elliott>?
06:30:39 <elliott> We are all, in some sense, already in California.
06:30:49 <elliott> Actually I have no idea why I said that. Nor do I remember saying it.
06:31:08 <shachaf> elliott: We were talking about how great the cheese in the US was, or something.
06:31:12 <shachaf> And by great I mean terrible.
06:31:17 <shachaf> And by cheese I mean something I don't remember.
06:31:55 <elliott> pikhq_: nttpf
06:31:58 <elliott> oh, you did
06:32:45 -!- DCliche_ has quit (Quit: You are now graced with my absence.).
06:42:16 <shachaf> elliott: FunPtrs are aptly named.
06:42:21 <elliott> Yes
06:42:27 <elliott> s/s/s./
06:42:37 <shachaf> Surely you mean s/$/./
06:42:51 <elliott> Yes.
06:42:56 <shachaf> Anyway, get ready for a lot of fun.
06:43:39 <Madoka-Kaname> s/(.)(.)(.)/\2\3\1/g
06:44:01 <elliott> shachaf: Do _you_ know whether exceptions are meant to work from Haskell code called by C via a FunPtr?
06:44:26 <elliott> I mean, hanging for like ten seconds, spiking in CPU or RAM use (not sure which) and then getting killed by the OS is quite a dramatic result.
06:45:31 <shachaf> elliott: Oh, that sounds exciting.
06:46:09 <shachaf> Speaking of excitement, it's 02:45 and I should go to sleep.
06:46:09 <fizzie> All you want to do is to have some FunPtr.
06:47:08 <shachaf> (Also, I don't know.)
06:48:06 <fizzie> Does Sealand follow the UK timezone/DST rules?
06:48:20 -!- aloril has quit (Read error: Operation timed out).
06:49:54 <fizzie> I was wondering how hard would it be the convince Finland to invert our timezone from UTC+2 (+3 in the summer) to UTC-10; I mean, then we could *really* be the "land of the midnight sun".
06:53:21 <olsner> regardless of timezone you'll still be screwed when the polar night starts
06:55:15 <fizzie> Sure, but it'd still improve our midnight-sun-% by a whole lot.
06:55:52 <elliott> ?hoogle Either SomeException a -> IO a
06:55:52 <lambdabot> Data.Typeable typeOf2 :: Typeable2 t => t a b -> TypeRep
06:55:53 <lambdabot> Prelude either :: (a -> c) -> (b -> c) -> Either a b -> c
06:55:53 <lambdabot> Data.Either either :: (a -> c) -> (b -> c) -> Either a b -> c
06:57:46 <olsner> hmm, except, isn't "midnight" really when the sun is on the other side of the earth, rather than some time stamp?
07:02:47 <CakeProphet> olsner: if you're a pedantic asshole, sure
07:03:52 -!- aloril has joined.
07:04:00 <CakeProphet> if you want to communicate with anyone else in the world, who subscribes to this standardized system of time so that communication and commerce isn't a complete nightmare, then no.
07:04:29 <olsner> why would I want to communicate with anyone else?
07:09:44 <fizzie> Also this bridge has got a hump in it: http://mw2.google.com/mw-panoramio/photos/medium/15358461.jpg
07:09:53 <elliott> hmm, this is a _very_ difficult problem due to laziness :)
07:11:19 <elliott> on the other hand
07:11:26 <elliott> i don't get why it's even happening if laziness
07:12:42 -!- aloril has quit (Ping timeout: 260 seconds).
07:14:46 <CakeProphet> I wish df were open source.
07:15:09 <elliott> it half is
07:15:13 <elliott> well
07:15:17 <elliott> source-available
07:15:28 <CakeProphet> yeha not the half I want.
07:19:07 <CakeProphet> http://lifehacker.com/5854053/how-to-stop-caring-about-trolls-and-get-on-with-your-life
07:19:10 <CakeProphet> ,,,,
07:19:10 <CakeProphet> ;;;;
07:19:26 <CakeProphet> worst troll ever.
07:24:53 -!- aloril has joined.
07:28:16 <CakeProphet> http://en.wikipedia.org/wiki/Indiana_Pi_Bill
07:28:37 <CakeProphet> or wait, maybe the Indiana General Assembly collectively are the worst trolls.
07:30:13 <elliott> yesss, one IORef and a bunch of code later, it works
07:31:22 <CakeProphet> aren't IORefs like communing with demons or something?
07:31:34 <CakeProphet> the angry demons of mutability or... something.
07:36:39 <olsner> I think they are more like angry demons of mutability put in little cages for safer handling
07:37:56 <elliott> http://sprunge.us/YVVQ
07:37:59 <elliott> this code is quite messy.
07:40:01 <CakeProphet> good hubbubLocks
07:41:02 -!- ais523 has joined.
07:41:03 -!- ais523 has quit (Changing host).
07:41:03 -!- ais523 has joined.
07:41:40 <elliott> hi ais523
07:42:48 <ais523> hi elliott
07:43:02 <ais523> just woken up, or not yet gone to sleep?
07:43:37 <elliott> I'm not even sure myself
07:43:41 <elliott> but I think it's the latter
07:45:38 <elliott> ?hoogle Bool -> m a -> Maybe a
07:45:38 <lambdabot> Control.Exception assert :: Bool -> a -> a
07:45:38 <lambdabot> Control.OldException assert :: Bool -> a -> a
07:45:38 <lambdabot> Control.Exception.Base assert :: Bool -> a -> a
07:45:41 <elliott> ?hoogle Bool -> m a -> m (Maybe a)
07:45:41 <lambdabot> Data.Generics.Aliases orElse :: Maybe a -> Maybe a -> Maybe a
07:45:41 <lambdabot> Control.Monad unless :: Monad m => Bool -> m () -> m ()
07:45:41 <lambdabot> Control.Monad when :: Monad m => Bool -> m () -> m ()
07:48:32 <Deewiant> ?pl \b mx -> if b then return Nothing else liftM Just mx
07:48:32 <lambdabot> (. fmap Just) . flip if' (return Nothing)
07:55:20 <CakeProphet> @hoogle Bool -> a -> Maybe a
07:55:21 <lambdabot> Control.Exception assert :: Bool -> a -> a
07:55:21 <lambdabot> Control.OldException assert :: Bool -> a -> a
07:55:21 <lambdabot> Control.Exception.Base assert :: Bool -> a -> a
07:56:03 <Deewiant> ?pl \b x -> guard b >> Just x
07:56:03 <lambdabot> (. Just) . (>>) . guard
07:58:13 <elliott> Deewiant: Can one forcibly take ownership of an AUR package from someone else; I want to update the C-INTERCAL package without having to talk to Vorpal
07:58:41 <Deewiant> If you ask some kind of adminy person, probably
07:58:49 <Deewiant> Otherwise he needs to disown it
07:58:53 <Deewiant> If I understand correctly
07:59:47 <elliott> Oh well, I guess I can tolerate momentary hostile contact :D
08:00:24 <elliott> Holy fuck, someone who isn't Vorpal uploaded a cfunge package
08:00:34 <elliott> Then 3 people voted for it??
08:00:49 <Deewiant> I may've voted for it
08:01:02 <elliott> I said three, not one :P
08:01:02 <Deewiant> It's outdated by now though
08:01:14 <Deewiant> Well, he probably did and if I did that makes two
08:01:19 <Deewiant> (he = submitter)
08:01:24 <Deewiant> (uploader)
08:01:25 <Deewiant> (whatevre)
08:01:26 <Deewiant> (er)
08:01:26 <elliott> Maybe Vorpal did too then
08:01:28 <elliott> Fiine
08:01:29 * elliott considers making a package for CCBI, realises it's D, gives up on idea immediately.
08:01:43 <Deewiant> You could make ccbi-bin
08:01:55 <elliott> As a wise man once said: Gross
08:02:04 <elliott> Ha, ldc is orphaned and out of date
08:02:11 <elliott> What's the D compiler of the year
08:02:13 <Deewiant> Or you could depend on ldc-bin and company, it should build without too much trouble
08:02:18 <Deewiant> I dunno
08:02:23 <elliott> BeholdMyGlory: Hey, stop maintaining ldc-hg, it's weird seeing names from here elsewhere
08:02:24 <Deewiant> I don't know how alive D1 is in general
08:02:32 <elliott> I thought CCBI2 was D2.
08:02:36 <Deewiant> It's not
08:02:58 <elliott> Will it start being D2 when mushspace comes out? :p
08:02:59 <Deewiant> I might make it D2 what with GDC going into GCC and all
08:03:12 <elliott> You should also make it: not depend on Tango.
08:03:19 <Deewiant> That's the main problem :-P
08:03:31 <Deewiant> Unfortunately: Tango is the only good library.
08:03:43 <elliott> Deewiant: It's also completely unmaintained to my knowledge :P
08:03:51 <elliott> You could: use a real programming language.
08:04:03 <Deewiant> It's maintained
08:04:07 <elliott> "Real" here is defined as literally anything but D how do you even end up with multiple stdlibs.
08:04:15 <elliott> Deewiant: pikhq said not a few weeks ago
08:04:18 <Deewiant> C has multiple stdlibs
08:04:22 <elliott> A cursory glance at their website supported this
08:04:28 <Deewiant> There are changesets from 4 days ago in the timeline
08:04:30 <elliott> And yeah but they all follow the same rough standard
08:04:46 <elliott> The difference between what you're about to say and D is that people actually use both Phobos and Tango
08:04:49 <Deewiant> The problem is that D has no standard
08:05:24 <elliott> So in conclusion
08:05:27 <Deewiant> And if I could do the metaprogramming shit conveniently I might move CCBI to C++11, but I doubt I can
08:05:32 <elliott> I'll package CCBI if you completely rewrite it
08:05:44 <Deewiant> I could package it myself if I cared :-P
08:05:44 <elliott> Deewiant: OK, you picked possibly the only worse language to move it to.
08:05:52 <Deewiant> elliott: Smallest effort
08:06:17 <Deewiant> Like okay sure I could use a Lisp but that's a full rewrite, of every single line
08:06:17 <elliott> Deewiant: I think you probably could pull the metaprogramming shit off; my qualifications backing this statement: http://esolangs.org/wiki/Deadfish#C.2B.2B_templates
08:06:33 <Deewiant> Yeah but "conveniently"
08:06:51 <elliott> You should rewrite it in Haskell, and call it shiro.
08:06:58 <Deewiant> I don't want to, because it would be slow.
08:07:03 <Deewiant> And also a 100% rewrite.
08:07:11 <elliott> No fuck you it is going to be so fast.
08:08:10 <elliott> Deewiant: Well, dmd is in community
08:08:15 <elliott> Does CCBI work with dmd/tango
08:08:19 <Deewiant> Yes but DMD sucks
08:08:25 <elliott> Define sucks
08:08:34 <Deewiant> It might be slower than shiro
08:08:40 <elliott> Wow
08:08:46 <Deewiant> (Okay maybe not that slow but still)
08:08:53 <elliott> Heyyy :P
08:08:53 <Deewiant> I haven't used it in a while, dunno
08:08:58 <elliott> shiro is faster than Language::Befunge.
08:08:59 <Deewiant> It might also not build due to bugs
08:09:03 <elliott> By lots.
08:09:05 <Deewiant> That's not an achievement ;-)
08:09:12 <elliott> IT'S PROBABLY EVEN FASTER THAN PYFUNGE.
08:09:27 <Deewiant> Woo, beating interpreted languages
08:09:31 <elliott> What I need to do is restructure it so it doesn't use the abominally stupid "StateT of globals over IO" approach.
08:09:41 <Deewiant> What's the better approach
08:09:51 <elliott> Depends
08:10:18 <elliott> I think IORefs would buy me quite a bit in Shiro though
08:10:24 <elliott> Also I should factor a lot of it out to be completely pure and take params
08:10:29 <elliott> Rather than just doing read-only shit on the state
08:11:18 <Deewiant> ?hoogle StateT s m a -> ReaderT s m a
08:11:18 <lambdabot> No results found
08:11:33 <Deewiant> ?hoogle ReaderT s m a -> StateT s m a
08:11:33 <lambdabot> No results found
08:11:34 <elliott> Deewiant: Yeah, no
08:11:36 <CakeProphet> elliott: is it faster than Perl?
08:11:41 <CakeProphet> that's the true test.
08:11:47 <elliott> Deewiant: That still has the problem that it takes EVERY SINGLE GLOBAL
08:11:52 <elliott> Rather than, e.g.: what it needs.
08:12:03 <elliott> CakeProphet: Language::Befunge is Perl.
08:12:28 <CakeProphet> oh, I guess I should have pressed page up. :P
08:12:44 <Deewiant> elliott: But hey re. C++11 at least people could build it
08:13:02 <elliott> Deewiant: Unless they're on e.g. Debian stable (I think)
08:13:12 <Deewiant> Well yeah, the 11 makes it harder
08:13:15 <elliott> gcc (GCC) 4.6.1 20110819 (prerelease)
08:13:15 <elliott> Prerelease? Seriously guys?
08:13:29 <Deewiant> I just said 11 because it's likely that such will be useful :-P
08:13:37 <elliott> Arch's goal in life is to always be at the absolute latest repository commit of every package.
08:13:44 <Deewiant> Not really
08:13:52 <elliott> Or, better: Latest set of working files on the most active developer's computer.
08:14:03 <Deewiant> It's probably a prerelease build that's equivalent to the release
08:14:10 <elliott> Shut up with your facts and logic.
08:14:13 <Deewiant> Besides, 4.6.2 is out
08:14:20 <elliott> Yeah, so is GHC 7.2.1
08:14:24 <Deewiant> Yep
08:14:49 <elliott> I can't really complain though because AUR is about 34895734985793485 times better than cabal-install.
08:15:02 <elliott> So I am pretty much unreasonably happy as far as Haskell goes.
08:15:26 <Deewiant> I ran into problems regarding outdated packages so switched back to cabal-installing everything
08:15:34 <Deewiant> AUR updates too slowly :-p
08:15:36 <elliott> ldc 1574-1
08:15:36 <elliott> Last Updated: Sun, 04 Oct 2009 20:28:36 +0000
08:15:36 <elliott> First Submitted: Thu, 04 Dec 2008 18:07:57 +0000
08:15:36 <elliott> Noice
08:15:44 <elliott> Deewiant: You could use cabal2arch yourself
08:15:50 <Deewiant> elliott: What a pain
08:16:07 <elliott> Deewiant: Meh, just a matter of writing a pacabalman script :P
08:16:39 <Deewiant> elliott: What a pain
08:16:44 <elliott> Deewiant: Okay, so will CCBI build with an LDC from hg and a tango from SVN
08:16:54 <elliott> Oh for fuck's sake BeholdMyGlory
08:16:56 <Deewiant> No not a tango from SVN probably
08:16:59 <elliott> You haven't updated them in literally a year
08:17:21 <Deewiant> "You’ll need Tango—version 0.99.9 or later. But not too late: there are breaking changes in trunk which CCBI doesn’t support building against."
08:17:37 <CakeProphet> > pi * 10000000000000000000000000
08:17:38 <lambdabot> 3.1415926535897935e25
08:17:47 * CakeProphet gasps! :o
08:18:01 <elliott> Deewiant: Just...
08:18:09 <elliott> Deewiant: Just port it to something reasonable already :P
08:18:21 <Deewiant> That's not unreasonable, that's the latest Tango release :-P
08:18:32 <elliott> It's funny because you just claimed D is reasonable!
08:18:47 <Deewiant> It got less reasonable over time
08:19:14 <elliott> I was having problems with D toolchains in 2007, 2008
08:19:24 <Deewiant> You're you
08:19:49 <Deewiant> You tend to find problems in everything :-P
08:20:04 <elliott> No, problems like "I literally can't get a compiler working"
08:20:10 <elliott> "Apart from this ancient gdc"
08:20:28 <Deewiant> Yes, because you're you
08:20:50 <elliott> No, everyone else is just suffering under a collective delusion that D has ever worked
08:21:20 <CakeProphet> I.. don't think I have that delusion
08:21:31 <CakeProphet> I think most people have the collective delusion that D is not a thing.
08:21:41 <CakeProphet> or they don't know very much about it. :P
08:22:02 <Deewiant> elliott: Feel free to suggest good targets for porting
08:22:22 <Deewiant> (Note: anything slower than C is not good)
08:22:38 <CakeProphet> Fortran!
08:22:48 <Deewiant> Lacks metaprogramming
08:22:57 <CakeProphet> Fortran with CPP
08:23:02 <Deewiant> CPP isn't metaprogramming
08:23:20 <CakeProphet> maybe you're just not inventive enough. :P
08:23:27 <Deewiant> Maybe I don't want to be
08:23:46 <elliott> Deewiant: C
08:23:53 <elliott> C++ is "slower than C", anyway
08:23:54 <elliott> As is D
08:23:59 <Deewiant> C lacks metaprogramming
08:24:03 <Deewiant> And no, not really
08:24:13 <Deewiant> They're within margin of error at worst ;-P
08:24:36 <elliott> C has metaprogramming
08:24:51 <elliott> And your uses of metaprogramming are mostly superfluous, at least the ones I saw :P
08:25:08 <CakeProphet> Java.
08:25:14 <Deewiant> C doesn't have metaprogramming :-P
08:25:26 <elliott> cpp
08:25:28 <Deewiant> CakeProphet: Note: anything that doesn't create native binaries is not good
08:25:31 <Deewiant> CPP isn't metaprogramming
08:25:41 <elliott> Yes, it is; also, gcj
08:25:52 <CakeProphet> Ada.
08:26:07 <elliott> Yes. Ada.
08:26:13 <elliott> Go with Ada.
08:26:51 <Deewiant> Meh, I don't wanna learn Ada
08:27:09 <CakeProphet> ATS
08:27:17 <Deewiant> Nobody wants to learn ATS
08:27:40 <CakeProphet> so I guess you're stuck with C with CPP
08:27:48 <CakeProphet> because no one would want to use D.
08:28:15 <Deewiant> C++ is much better, with its templates
08:28:23 <Deewiant> For the kind of metaprogramming I do
08:28:26 -!- derrik has joined.
08:28:38 <Deewiant> But I don't know if it's sufficient, at least without much pain
08:29:00 <CakeProphet> pain is the only concept that's relevant to C++
08:29:28 <elliott> <Deewiant> Nobody wants to learn ATS
08:29:29 <elliott> I do
08:30:57 -!- ive has quit (Quit: leaving).
08:31:53 <CakeProphet> anyway you could use GHC as it can approach speeds that are reasonably close to the average C program.
08:31:56 <CakeProphet> just become a badass
08:32:04 <CakeProphet> and then your speed addiction will be solved
08:32:43 -!- monqy has quit (Quit: hello).
08:38:02 <CakeProphet> elliott: I wish the great language shootout had data on LuaJIT.
08:38:49 <CakeProphet> http://attractivechaos.wordpress.com/2011/01/23/amazed-by-luajit/ "I have kept looking for a replacement of Perl for several years. Now I have found it: Lua, although the decision is not made based on the language itself, but on its implementation LuaJIT."
08:38:54 * CakeProphet stops reading in disgust.
08:39:26 <CakeProphet> there is no replacement for Perl. Well, maybe Perl 6.
08:40:44 <elliott> hmm, I need a nicer name for this whiz-bang high-level library than hubbub-tree
08:41:21 <CakeProphet> what does it do?
08:41:38 <elliott> hubbubs trees
08:42:26 <CakeProphet> right, what the hell is that.
08:43:26 <elliott> Yes
08:43:35 <elliott> s/$/./
08:43:59 <CakeProphet> I. see.
08:44:08 <CakeProphet> well, sorry, I can't help you with your name problem.
08:44:13 <CakeProphet> not knowing what a hubbub tree is.
08:45:24 <CakeProphet> http://thesaurus.com/browse/rowdydow commotion, babel, bedlam, brouhaha, clamor, hullabaloo, pandemonium, ruckus...
08:45:38 <CakeProphet> plenty of good names.
08:45:39 <fizzie> 1. (1) hubbub, uproar, brouhaha, katzenjammer -- (loud confused noise from many sources)
08:45:45 <fizzie> katzenjammer-tree.
08:50:06 <CakeProphet> elliott: are these "reverse context trees"?
08:50:12 <elliott> No.
08:50:17 <CakeProphet> Okay
08:52:44 <atehwa> I wonder why there's so much talk about the pros and cons of languages on a channel which is primarily meant for discussion about languages that were not intended to be practical in the first place.
08:53:37 <fizzie> How to recognize a graph theorist: show them something like http://ecofuture.net/energy/files/2011/03/tree-field.jpg and ask if they think it's a forest.
08:55:41 <elliott> Heh.
08:56:09 <elliott> atehwa: That makes the grossly unjustified assumption that this channel was ever sincerely on-topic.
08:56:37 <atehwa> ;_;
08:56:56 <atehwa> (of course, I don't really think that channels should be on-topic.)
08:57:04 <elliott> Only ais523 thinks that.
08:57:23 <CakeProphet> elliott: back in the great golden age, when #esoteric wasn't overrun the dastardly language zealots, things were... well... still off-topic.
08:57:32 <elliott> warning: haskell-haskell-src-exts-1.11.1-20 is up to date -- reinstalling
08:57:42 <elliott> That sure makes a lot of sense, aurget!
08:57:54 <elliott> Deewiant: I am a convert to the yaourt cause
08:58:06 <atehwa> Maybe it's just good to remember that, for instance, the fact that there's no pros to C++ is not a reason to stop using it -- merely a sign that using C++ has artistic value.
08:58:26 <elliott> atehwa: Oh, certainly! C++ sudoku is one of my favourite games.
08:58:39 <elliott> But for something /serious/ like a Funge-98 interpreter...
08:58:40 <CakeProphet> this is making the implication no pros -> esoteric
08:58:44 <CakeProphet> which is totally wrong.
08:59:31 <CakeProphet> Funge-98 is probably the best language for a Funge-98 interpreter.
08:59:38 <atehwa> CakeProphet: that wasn't my intention; just to point out that the good sides of a language can be something else than that it is practical, expressive, has efficient implementations, or the like.
09:00:30 <CakeProphet> yes, like Perl.
09:00:33 <atehwa> using C++ _does_ have artistic value, even though the language is not very esoteric.
09:00:37 <atehwa> yes, like Perl.
09:01:01 <CakeProphet> well, Perl /can/ be practical and expressive, but I don't know if those qualifiers fit always.
09:01:32 <atehwa> But why bother with those values, when its artistic value is not to be questioned?
09:02:39 <CakeProphet> uh, well, I think programming is always going to be rooted in practicality, even if the production of source code is a kind of art.
09:02:45 <atehwa> ;_;
09:03:25 <CakeProphet> it's an art of organization, efficiency, clarity, and probably a few other nouns.
09:04:27 <atehwa> heck, all it really boils down to is "wow, _that_ is a neat way to use closures / mixins / iterators / whatever you happen to like"
09:04:55 <CakeProphet> I wouldn't say that.
09:05:17 <elliott> <CakeProphet> uh, well, I think programming is always going to be rooted in practicality, even if the production of source code is a kind of art.
09:05:24 <elliott> mark me down on the record as super anti-this statement
09:05:34 <CakeProphet> marked.
09:06:34 <atehwa> well, I'm just trying to advocate a broader view on the values of programming (languages): we're already as deeply immersed in those "practical" values as can be, so it would be nice to give some notice to the other values, too.
09:06:46 * elliott ++
09:06:50 <CakeProphet> they're noted. especially here.
09:06:54 <elliott> That was meant to be atehwa++.
09:06:58 <elliott> But I can't use computers.
09:07:21 <CakeProphet> elliott: what happens when atehwa wraps around?
09:07:27 <CakeProphet> is that like, a huge diss?
09:07:33 <CakeProphet> wicked burn, etc?
09:07:41 <elliott> @karma atehwa
09:07:42 <lambdabot> atehwa has a karma of 0
09:07:45 <elliott> :(
09:07:48 <elliott> @karma elliott
09:07:49 <lambdabot> You have a karma of 2
09:07:50 <elliott> :)
09:07:52 <atehwa> I also know that organisation, efficiency, clarity, and so on are important, but they also depend on one's aesthetic preferences
09:07:54 <CakeProphet> @karma CakeProphet
09:07:54 <elliott> @bot
09:07:54 <lambdabot> :)
09:07:55 <lambdabot> You have a karma of 0
09:08:19 <CakeProphet> atehwa: well, aside from efficiency, but efficiency is not a requisite for good programs.
09:08:39 <atehwa> if one was to define expressivity, what it comes down to is http://c2.com/cgi/wiki?NumberOfKeystrokes
09:08:51 <CakeProphet> I do believe there is such a thing as good organization and bad organization.
09:08:59 <CakeProphet> and no, there's not really a quantifiable metric for it.
09:09:06 <atehwa> if one was to define efficiency, what it comes down to is http://shootout.alioth.debian.org/
09:09:20 <Madoka-Kaname> @karma
09:09:21 <lambdabot> You have a karma of 1
09:09:42 <CakeProphet> just what #esoteric needs: a brownie point system.
09:09:47 <atehwa> CakeProphet: and BTW: I don't overflow: I'm arbitrary precision.
09:10:04 * elliott does not think expressivity and efficiency can be defined so simply.
09:10:11 * atehwa does :)
09:10:16 <elliott> Especially expressivity = keystrokes is problematic.
09:10:25 -!- copumpkin has quit (Ping timeout: 245 seconds).
09:10:42 <atehwa> I've been advocating this for quite some time; I'd like to hear the counterarguments
09:10:43 <elliott> Certainly the idea is to minimise human<->computer friction to express a program.
09:10:50 -!- copumpkin has joined.
09:10:59 <elliott> But increased expressive power can have an up-front cost that would make it lose to an uber-golfed language on some tasks.
09:11:03 -!- copumpkin has quit (Changing host).
09:11:03 -!- copumpkin has joined.
09:11:04 <elliott> Yet the former's expressivity scales far better.
09:11:21 <CakeProphet> Haskell vs. GolfScript
09:11:21 <atehwa> elliott: it depends on what one is used to
09:11:48 <atehwa> if we're not trying to measure the efficiency of language-user pairs but languages, then number of keystrokes makes sense
09:12:03 <atehwa> s/efficiency/expressivity/
09:12:19 <CakeProphet> number of keystrokes for.. what? an average of every program ever written?
09:12:21 <atehwa> and actually, it is the expressivity of a language for a certain task
09:12:24 <elliott> atehwa: Well, the question is -- what CakeProphet said.
09:12:34 <elliott> The domain is "programs people actually want to write".
09:13:03 <elliott> People want to write things more complex than FizzBuzz, so GolfScript loses very quickly -- even if it minimises keystrokes it certainly doesn't minimise development time.
09:13:12 <elliott> (Because it's unreadable.)
09:13:39 <CakeProphet> yet Python is readable but not incredibly expressive compared to other high level languages.
09:15:28 <CakeProphet> here expressive means... what one can accomplish with a single expression.
09:17:01 <derrik> and single expressions means what?
09:17:45 <CakeProphet> please go read one of the many definitions of what an expression is. preferably a correct one.
09:18:04 <derrik> http://s3.amazonaws.com/theoatmeal-img/comics/brain/ideas.png
09:18:22 <elliott> Have we actually proven that derrik isn't a Markov bot?
09:18:28 <CakeProphet> no.
09:18:41 <elliott> Well, we know CakeProphet is.
09:18:47 <derrik> CakeProphet: "correct" as in ... ?
09:19:15 <ais523> elliott: it's reasonably hard to prove that anyone isn't a markov bot, I think
09:19:51 <CakeProphet> derrik: do you actually know what an expression is?
09:20:16 <atehwa> elliott, CakeProphet: but it is important to understand that it does _not_ make sense to talk about the expressivity of a language for an unspecified task.
09:20:30 <derrik> i know that no single word means anything without context, CakeProphet
09:20:44 <atehwa> for instance, what kind of task is Python "not incredibly expressive" for?
09:20:50 <CakeProphet> atehwa: so all the "Python is sooooooo expressive" blog posts are invalid. Yes, I can agree with that statement.
09:21:14 <CakeProphet> derrik: the context here is programming languages, dude.
09:21:41 <derrik> CakeProphet: not so familiar with programming languages.. but i am very familiar with natural languages
09:21:43 <elliott> atehwa: Sure, but you can talk about the expressivity in general of a programming language as much as you can talk about any subjective, slightly ill-defined statement.
09:21:59 <elliott> It's about the expressivity in terms of "programs people want to write", or more cynically "programs the speaker wants to write".
09:22:34 <atehwa> this?: print sorted([(line, lineno) for lineno, line in enumerate(file("foo.txt"))])
09:23:09 <atehwa> elliott: yes, that's true.
09:23:37 <atehwa> it just often turns out that people want to write different stuff.
09:24:02 <elliott> main = readFile "foo.txt" >>= print . sortBy (comparing fst) . zip [0..] . lines
09:24:16 <atehwa> When people talk about expressivity of Lisp, they often think about e.g. heuristic solution space searches
09:24:32 * elliott would expect metaprogramming instead.
09:25:04 <atehwa> when people talk about the expressivity of Perl, they might talk about all the libraries that provide glue with different protocols/services
09:25:54 <ais523> atehwa: I normally phrase that as "Perl has excellent library support"
09:26:09 <atehwa> yes
09:26:38 <atehwa> elliott: metaprogramming is cool, but it too, can be used more for some tasks and less for others
09:26:43 <CakeProphet> Perl is also pretty expressive in not-that-sense as well.
09:26:55 <elliott> atehwa: I just meant, I think that's what most people would say when they talk about the expressivity of Lisp.
09:27:04 <elliott> Rather than what you said.
09:27:08 <elliott> But I might be wrong.
09:27:57 <atehwa> hmm... maybe... but then they'd be horribly cut off from what expressivity means for the actual programming... if they weren't thinking about some specific cases where metaprogramming helped them to make their programs shorter.
09:28:19 <elliott> Well, metaprogramming is just a kind of abstraction.
09:28:47 <elliott> Abstraction helps in an awful lot of places; metaprogramming is a rather blunt form of it to use everywhere, but it's still abstraction.
09:29:07 <elliott> (And like all abstraction offers obfuscatory potential etc. etc. etc., but that's probably true of anything that increases expressivity.)
09:29:13 <elliott> (There's that word again!)
09:29:36 <CakeProphet> therefore Perl is the best at expressionsivity.
09:29:40 <atehwa> The usefulness of abstraction tools or code organisation tools should be measured, IMO, by the number of keystrokes they save you, for given task(s).
09:30:20 <CakeProphet> maybe if you're a software project manager.
09:31:03 <atehwa> maybe in every case.
09:31:34 <CakeProphet> hmmm, okay, well that's solved then.
09:31:37 <atehwa> good!
09:31:39 <CakeProphet> next topic: let's measure "beautiful"
09:31:47 <atehwa> yes, I was just coming to that :)
09:32:29 <CakeProphet> I think the Saw movies had beautiful imagery.
09:32:39 <elliott> atehwa: IMO, number of keystrokes saved is a bit of an overly first-order interpretation.
09:32:44 <CakeProphet> if not the best storyline, or well, anything else.
09:32:48 <atehwa> beauty of a language can be measured by the number of people who, having learned something of the language, tell their opinions to other people.
09:33:14 <CakeProphet> elliott: but it does correspond to Java not being terribly expressive
09:33:17 <elliott> Let's at least say: Mean of number of keystrokes saved by you in every possible universe weighted by its probability.
09:33:18 <CakeProphet> which is very acceptable for me. :P
09:33:34 <atehwa> elliott: well, it's directly tied to Kolmogorov complexity :) and as we all know, the KC of a datum (program) depends on the language it is specified in...
09:33:42 <elliott> Then, just because you miraculously avoid inserting a ridiculously easy bug to add that'd take years to fix, doesn't make the tool magic :)
09:34:33 <CakeProphet> I think reducing the number of some kind of language-defined construct might make more sense?
09:34:36 <CakeProphet> like... "atoms"?
09:34:48 <CakeProphet> keystrokes are cheap and kind of irrelevant in my opinion.
09:35:00 -!- Slereah_ has quit (Ping timeout: 260 seconds).
09:35:16 -!- Slereah_ has joined.
09:35:36 <CakeProphet> but this doesn't say anything at all about the language, just the particular abstraction being used.
09:35:40 <elliott> CakeProphet: aka token
09:35:45 <CakeProphet> yes, that works.
09:36:23 <atehwa> CakeProphet: well, I wouldn't count out the number of keystrokes that come from the language definition: compare "def" with "public static String"
09:36:55 <atehwa> and compare "i" with "indexOfTraversedArray"
09:36:57 <CakeProphet> 1 and 3, respectively.
09:37:07 <CakeProphet> what you name your variables is totally irrelevant to expressivity.
09:37:34 <atehwa> humhum
09:37:56 <atehwa> I think that a language that would require me to use very long variables is quite unexpressive (or quite unimpressive)
09:38:18 <CakeProphet> I could take an extremely expressive (uh) expression and change all of the variables to ghost_ridesTheWhipN where N is an incrementing number that starts at 0
09:38:25 <CakeProphet> and it would be pretty much the same thing I think?
09:38:26 <elliott> atehwa: so do we count keystrokes an ide saves you?
09:38:44 <atehwa> OO languages increase expressivity by allowing same names to be used for operations of different data types
09:38:49 <atehwa> elliott: if we have to
09:38:52 <CakeProphet> Visual Studio, most expressive programming language.
09:38:52 <fizzie> "Similarly, if someone asserted that cats were vegetables, someone correcting this might emphasize the last word: <p>Cats are cute <em>animals</em>.</p>" -- HTML5 specification, the best specification.
09:39:00 <atehwa> but I don't like to use an IDE, so...
09:39:14 <elliott> atehwa: So it's not measuring the expressivity of a language, it's a development environment (Unix counts)
09:39:24 <elliott> Oh no, I told the Risc OS people I'm a Haskell person and now they think I'm weird.
09:40:01 <CakeProphet> Perl in a UNIX environment is the most expressive. I get bash and Perl and everything in UNIX!
09:40:01 <atehwa> elliott: I don't believe IDE's save all that many keystrokes...
09:40:10 <ais523> elliott: /Risc OS/ people think you're weird?
09:40:12 <CakeProphet> the bash and UNIX stuff is just 2 tokens away. ` and `
09:40:39 <elliott> atehwa: Like I said, Unix counts.
09:40:44 <elliott> atehwa: My point is that your tools matter.
09:40:57 <ais523> elliott: I consider UNIX a good development environment
09:41:00 <elliott> Magnetic butterfly is slower than cat and restarting if you make a mistake is slower than vi is slower than mind-reading.
09:41:01 <ais523> I'm not sure if it counts as an IDE, though
09:41:22 <ais523> `addquote <elliott> Magnetic butterfly is slower than cat and restarting if you make a mistake is slower than vi is slower than mind-reading.
09:41:29 <HackEgo> 699) <elliott> Magnetic butterfly is slower than cat and restarting if you make a mistake is slower than vi is slower than mind-reading.
09:41:35 <ais523> it's probably slightly better out of context
09:41:37 <ais523> `quote
09:41:38 <ais523> `quote
09:41:40 <HackEgo> 395) <olsner> two quotes about quotes about django <olsner> I guess the worst part is that I appear in all three hackego quotes about django
09:41:41 <ais523> `quote
09:41:41 <HackEgo> 591) <Gregor> Electrons are so fragile X-D
09:41:42 <ais523> `quote
09:41:43 <HackEgo> 270) <ais523> gah, why does lose keep winning?
09:41:44 <ais523> `quote
09:41:44 <HackEgo> 27) PA ET ANNET UNIVERSET DER DE ENESTE PERSONEN OERJAN: <oerjan> sa jeg kan bare konkludere med at det er feil, eller er verden helt bonkers
09:41:46 <HackEgo> 628) <itidus20> what is nice about a pebble is that you can process it with your brain as a number by simply looking at it
09:41:50 <elliott> atehwa: Trivial example: Tab completion saves keypresses if your identifiers are over a certain length. Maybe those identifiers are more readable because they're longer, and this means you make less mistakes, and thus need to do less bug-fixing, and thus end up pressing fewer keys overall.
09:42:05 <atehwa> elliott: I believe that tools matter; maybe that is why the length of variable names does not have all that much to do with expressivity (because you end writing the same number of keystrokes, if you have an editor to help you with long names)
09:42:08 <elliott> `delquote 591
09:42:10 <HackEgo> ​*poof*
09:42:15 <ais523> elliott: it was either that one or 628
09:42:25 <ais523> I'm not sure which was worse
09:42:34 <elliott> 628 is my favourite there
09:42:42 <ais523> ah, OK
09:42:55 <elliott> 27 is probably the weakest, but: tradition.
09:42:55 <ais523> I like 395 the best, I think
09:42:58 <CakeProphet> we haven't made very much progress on measuring beautiful.
09:43:04 <elliott> atehwa: Right. So you're not really measuring the expressivity of a language at all :)
09:43:38 <elliott> ...so what I'm saying is, @ is the most expressive thing ever, and every other development environment of any sort is vastly inferior by definition.
09:43:47 <elliott> Finally something none of us can disagree with.
09:44:28 <CakeProphet> maybe we could measure the hip-waist ratio of programs to determine beauty.
09:46:15 <atehwa> elliott: I think I am measuring the expressivity of languages after all, because really, all the nifty ways to enter programs do not affect number of keystrokes all that much. It's still about the least number of keystrokes you can go with.
09:46:27 <elliott> <elliott> atehwa: Trivial example: Tab completion saves keypresses if your identifiers are over a certain length. Maybe those identifiers are more readable because they're longer, and this means you make less mistakes, and thus need to do less bug-fixing, and thus end up pressing fewer keys overall.
09:46:38 <elliott> You might think it doesn't make much difference in practice, but it's still a difference.
09:46:53 <elliott> And all I have to do is make the tools more magical until it's all the difference :)
09:47:09 <atehwa> elliott: if you're going with the least number of keystrokes, you won't be using variable names that benefit from auto-completion. :)
09:47:34 <CakeProphet> what is the expressivity of Piet?
09:47:35 <elliott> atehwa: You would because: "Maybe those identifiers are more readable because they're longer, and this means you make less mistakes, and thus need to do less bug-fixing, and thus end up pressing fewer keys overall."
09:47:38 <atehwa> this brings to my mind a book where they talked about inducing (logic) programs, such as Prolog programs
09:48:02 <elliott> So there's an example where a more verbose coding style but a fancier editor results in less overall keystrokes.
09:48:13 <elliott> So it's not about the language (consider if it enforced the coding style).
09:48:15 <CakeProphet> I don't think Piet is programmed with keystrokes, necessarily.
09:48:59 -!- elliott has quit (Remote host closed the connection).
09:49:05 <atehwa> elliott: but I wouldn't be so sure that it happens in practice. There's ample statistical evidence that the time programmers use to correcting and rewriting programs is also proportional to the program length.
09:49:12 -!- Ngevd has joined.
09:49:57 <atehwa> I think it would stand even if the extra length was only caused by longer identifier names.
09:50:05 <Ngevd> Hello!
09:50:17 -!- elliott has joined.
09:50:26 <atehwa> elliott: but I wouldn't be so sure that it happens in practice. There's ample statistical evidence that the time programmers use to correcting and rewriting programs is also proportional to the program length.
09:50:49 <atehwa> I think it would stand even if the extra length was only caused by longer identifier names.
09:51:12 <elliott> So, you're saying it literally never applies? i.e., every identifier should be as short as physically possible?
09:51:36 <atehwa> I'll try to rephrase what I'm trying to claim
09:51:38 <CakeProphet> this is why Perl is the best language.
09:52:09 <CakeProphet> to accomodate the length of sigil, you simply remove spaces in front of the sigil.
09:52:14 <CakeProphet> my $x becomes my$x
09:52:49 <atehwa> The claim is this: the "expressivity" of a language for a given task is the amount of physical work that is required to write the shortest program that exists that is a "solution" of the given task.
09:53:20 -!- ais523 has quit (Ping timeout: 252 seconds).
09:53:39 <CakeProphet> in this sense, Charles Babbage's Analytical Engine has the least expressive language.
09:54:06 <CakeProphet> all those punch cards. You probably have to shovel coal into a furnace or something too because it's steam-powered.
09:54:24 <atehwa> CakeProphet: I wouldn't be surprised; on the other hand, I wouldn't be surprised to find programming environments that are even less expressive than Babbage's engine.
09:54:54 <atehwa> CakeProphet: but count out the work that goes into _executing_ the program.
09:55:05 <CakeProphet> hmmm, wait I don't think it's steam powered
09:55:24 <atehwa> only count the work that goes into _specifying_ the program.
09:55:35 <elliott> <atehwa> The claim is this: the "expressivity" of a language for a given task is the amount of physical work that is required to write the shortest program that exists that is a "solution" of the given task.
09:55:44 <elliott> yes, and i've been trying to prove that it isn't about the language :)
09:55:50 <elliott> and that it only makes sense in terms of an entire toolchain
09:55:56 <CakeProphet> ah well I just use slaves to punch my Analytical Engine cards.
09:56:16 <CakeProphet> slaves = most expressive component of your toolchain.
10:01:05 <atehwa> elliott: well, I agree with you in principle; I just think that the impact of the rest of the toolchain is almost negligible
10:01:34 <Ngevd> "almost negligible" implies it isn't negligible
10:01:37 <atehwa> elliott: there's a reason why source code is called so: it is the single point that is really the work of people, not automata.
10:01:43 <elliott> atehwa: Well, certainly coding Java without an IDE is quite painful, because the language itself is underpowered and verbose. An IDE helps to mitigate that.
10:02:22 <elliott> atehwa: But maybe I'll agree that /today/ it doesn't matter all that much beyond pathological examples like that.
10:02:28 <elliott> (Although worryingly common ones.)
10:02:35 <CakeProphet> hlep Piet and keystrokes problem ignored.
10:02:36 <atehwa> elliott: well, when I enter discussions about how unexpressive Java is and how it takes so much work to write a program in Java, people invariably toss IDE's in.
10:02:43 <elliott> But I'm pretty sure there's no way that @ won't disprove this thesis as soon as everyone is using it :)
10:03:02 <atehwa> elliott: what is @? Pointer?
10:03:22 <Ngevd> elliott's operating system type thing porject
10:03:23 <elliott> It, er; oh no, ais isn't here, I can't even delegate the task.
10:03:26 <elliott> It's an OS. Sort of.
10:03:29 <Ngevd> *project
10:03:38 <elliott> Except not really.
10:03:38 <Ngevd> Hence "type thing"
10:03:44 <atehwa> elliott: in the lines of INTERLISP-D?
10:03:45 <elliott> Except yes really but it's misleading to think of it in those terms.
10:03:52 <CakeProphet> @ is The Most Revolutionary Mostly Undefined Thing.
10:04:10 <elliott> atehwa: Attempting to go for the most obscure reference possible? :-)
10:04:12 <Ngevd> It's an operating system, Jim, but not as we know it
10:04:13 <CakeProphet> suitable for the many porpoises.
10:04:37 <atehwa> elliott: no really, it was what first came to my mind... because I've been thinking about implementing a Scheme OS, myself.
10:05:07 <elliott> Well, @ is certainly lumpable under the "language-based OS" banner, although that's not strictly true.
10:05:12 <CakeProphet> NULL is the most obscured reference.
10:05:19 <elliott> Scheme is waaayy below it, though :-)
10:05:36 <elliott> (Note: Same applies to almost every language I know of; the rest are just way below, rather than waaayy below.)
10:05:37 <atehwa> elliott: I'm sure it is.
10:05:46 <Ngevd> elliott, the things you say are getting annoyingly close to self-contradictions
10:05:56 <elliott> Ngevd: Well, they are... and they aren't.
10:05:59 <Ngevd> :P
10:06:18 <CakeProphet> wait a second, I thought I had copyright on self-contradictions here?
10:06:25 <CakeProphet> I will have to take legal action soon.
10:06:33 <atehwa> CakeProphet: Piet kinda handled by changing "number of keystrokes" into "amount of physical work"
10:07:10 <CakeProphet> pure-data is probably the least expressive language then
10:07:14 <CakeProphet> because it's a pain in the ass to program.
10:07:58 <Ngevd> CakeProphet, that's a generic trademark now
10:08:03 <CakeProphet> example program: http://en.wikipedia.org/wiki/File:Pd_example_3.svg
10:08:44 <elliott> More representative example program: http://upload.wikimedia.org/wikipedia/commons/7/74/Pure_Data_with_many_patches_open_%28netpd_project%29.png
10:08:53 <elliott> Well, s.
10:08:58 <CakeProphet> program(s) --yes
10:09:08 <elliott> But what's a plural between friends.
10:09:12 <elliott> No, wait, we're not friends.
10:09:14 <elliott> Between enemies.
10:09:40 <atehwa> I guess one could also replace a Java IDE with macro preprocessing :) to set up sensible abbreviations for all boilerplate code.
10:09:44 <CakeProphet> actually I would the massive spaghetti mess underneath all of those clean UIs is more representative.
10:09:49 <CakeProphet> *would say
10:10:57 <CakeProphet> anyway graphical dataflow languages are an interesting concept, but I'd prefer more textiness.
10:11:07 <fizzie> http://goto10.org/wp-content/uploads/goto10.org/2008/11/pure_data-workshop.png
10:11:17 <fizzie> How about that for representativeness?
10:11:24 <CakeProphet> yes that's not too far off.
10:11:49 <CakeProphet> you can mitigate that kind of situation with some good style, but no one does this of course.
10:11:53 <CakeProphet> as it involves more clicking.
10:16:21 * elliott tests something.
10:16:21 -!- elliott has quit (Quit: Leaving).
10:16:37 -!- elliott has joined.
10:16:39 <elliott> `echo elliott
10:16:41 <HackEgo> elliott
10:16:47 <fizzie> ^echo elliott
10:16:47 <fungot> elliott elliott
10:17:02 <elliott> Yay, t'works.
10:17:23 <CakeProphet> `run echo `echo echo`
10:17:25 <HackEgo> echo
10:17:32 <elliott> `echo elliott
10:17:34 <HackEgo> elliott
10:17:35 <fizzie> ^cho elliott
10:17:36 <fungot> elliottlliottliottiottottttt
10:18:26 <elliott> Man, nobody told me `speaker-test -c2` produced avant-garde noise on command.
10:18:33 <CakeProphet> > map head (tails "elliott")
10:18:34 <lambdabot> "elliott*Exception: Prelude.head: empty list
10:18:35 <elliott> fizzie: Make fungot do a /me that highlights me pls.
10:18:35 <fungot> elliott: 17. no pokers are soft; all pillows are soft. 11. no. 16. here we only understand " are" between names of two attributes ( for example, such propositions as " all the fnord i've done, from fnord and from fnord.
10:19:20 <fizzie> ^bf +.,[.,]+.!ACTION elliott whatever
10:19:20 * fungot elliott whatever
10:19:25 <elliott> Sigh.
10:19:27 <elliott> OK, to clarify
10:19:32 <elliott> fizzie: One that doesn't highlight me the line before :P
10:19:41 <elliott> That worked, but probably only because you highlighted me...
10:20:01 <elliott> ^bf +.,,[.,,]+.!.A.C.T.I.O.N. .e.l.l.i.o.t.t. .w.h.a.t.e.v.e.r
10:20:01 * fungot elliott whatever
10:20:02 <CakeProphet> just do a rot13
10:20:07 <CakeProphet> or that.
10:20:11 <elliott> ^bf +[+]+.,,[.,,]+.!.A.C.T.I.O.N. .e.l.l.i.o.t.t. .w.h.a.t.e.v.e.r
10:20:11 * fungot elliott whatever
10:20:51 <atehwa> is there documentation somewhere about the many bots on the channel?
10:21:03 <CakeProphet> dunno ask fungot
10:21:04 <fungot> CakeProphet: and what a grand thing it would be glad to be helped up again.
10:21:19 <atehwa> fungot: is there documentation about you and your comrades?
10:21:19 <fungot> atehwa: next to him the eldest daughter: she suggested very little, only asked if he would take her with her look of ' passive beauty.'
10:21:23 <fizzie> ^bf +.,[-.,]+.!BDUJPO!fmmjpuu!whatever
10:21:23 * fungot elliott vg`sdudq
10:21:35 <Ngevd> ^style
10:21:35 <fungot> Available: agora alice* c64 ct darwin discworld europarl ff7 fisher fungot homestuck ic irc jargon lovecraft nethack pa sms speeches ss wp youtube
10:21:37 <CakeProphet> sdudq, good data structure name.
10:21:55 <Ngevd> ^style irc
10:21:55 <fungot> Selected style: irc (IRC logs of freenode/#esoteric, freenode/#scheme and ircnet/#douglasadams)
10:21:56 <CakeProphet> `help
10:21:57 <HackEgo> Runs arbitrary code in GNU/Linux. Type "`<command>", or "`run <command>" for full shell commands. "`fetch <URL>" downloads files. Files saved to $PWD are persistent, and $PWD/bin is in $PATH. $PWD is a mercurial repository, "`revert <rev>" can be used to revert to a revision. See http://codu.org/projects/hackbot/fshg/
10:22:08 <fizzie> There is "documentation" in the sense of
10:22:10 <fizzie> ^prefixes
10:22:11 <fungot> Bot prefixes: fungot ^, HackEgo `, EgoBot !, lambdabot @ or ?
10:22:14 <fizzie> `prefixes
10:22:15 <HackEgo> Bot prefixes: fungot ^, HackEgo `, EgoBot !, lambdabot @ or ?
10:22:17 <elliott> ^bf +[+]+.,,[.,,]+.!.A.C.T.I.O.N. .e.l.l.i.o.t.t. .w.h.a.t.e.v.e.r
10:22:17 * fungot elliott whatever
10:22:18 <elliott> ^bf +[+]+.,,[.,,]+.!.A.C.T.I.O.N. .e.l.l.i.o.t.t. .w.h.a.t.e.v.e.r
10:22:19 * fungot elliott whatever
10:22:25 <elliott> Ugh, why won't it be context-sensitive.
10:22:37 <atehwa> fizzie: interesting.
10:22:47 <fizzie> !prefixes I think used to work too maybe I guess.
10:23:06 <CakeProphet> `!prefixes
10:23:08 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: !prefixes: not found
10:23:10 <CakeProphet> !prefixes
10:23:13 <fizzie> But EgoBot's being uncoöperative, to ö a bit, lately.
10:23:32 <atehwa> and besides, lambdabot has > too
10:23:35 <atehwa> > 1
10:23:35 <lambdabot> 1
10:23:44 <Ngevd> > head [1..10]
10:23:45 <lambdabot> 1
10:23:46 <fizzie> It's different.
10:23:53 <fizzie> It does that ":t" thing on-channel also.
10:23:59 <fizzie> :t Nothing
10:24:00 <lambdabot> forall a. Maybe a
10:24:04 <CakeProphet> `echo HackEgo is th ebest.
10:24:06 <HackEgo> HackEgo is th ebest.
10:24:28 <CakeProphet> `words
10:24:30 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: words: not found
10:24:34 <CakeProphet> :(
10:24:38 <fizzie> ^echo fungot is the eboniest.
10:24:38 <fungot> fungot is the eboniest. fungot is the eboniest.
10:24:50 <CakeProphet> `ls bin
10:24:52 <HackEgo> ​? \ addquote \ allquotes \ calc \ define \ delquote \ etymology \ forget \ fortune \ frink \ google \ json \ k \ karma \ karma+ \ karma- \ learn \ log \ logurl \ macro \ marco \ paste \ pastekarma \ pastelog \ pastelogs \ pastenquotes \ pastequotes \ pastewisdom \ ping \ prefixes \ qc \ quote \ quotes \ roll \ runperl \ toutf8
10:24:56 -!- elliott has quit (Remote host closed the connection).
10:25:22 -!- elliott has joined.
10:25:24 <CakeProphet> why did words get deleted? :(
10:25:40 <fizzie> `word 4
10:25:42 <HackEgo> strunkuna cal las cous
10:25:45 <CakeProphet> oh.
10:25:46 <fizzie> It just got truncamated in the ls.
10:25:46 * CakeProphet is blind.
10:25:51 <CakeProphet> or that.
10:25:55 <fizzie> `run ls bin/w*
10:25:57 <HackEgo> bin/wl \ bin/word \ bin/wtf
10:26:09 <CakeProphet> `word 10
10:26:12 <HackEgo> fes banchind wiigandepatalastollinqui mter genbrimed inata mes chedu chturtihaheaing hot
10:26:30 <CakeProphet> hot
10:27:02 <elliott> <HackEgo> strunkuna cal las cous
10:27:05 <elliott> sounds like a phrase
10:27:09 <fizzie> You're such a chedu.
10:27:49 <CakeProphet> fizzie: The relevance is an inata
10:28:01 <elliott> Good god, there's no Clearlooks for GTK3?
10:28:18 <fizzie> For some reason I think 'chedu' sounds like a derogatory racial term from Star Wars.
10:28:56 <CakeProphet> wiigandepatalastollinqui is an ancient god.
10:29:40 <fizzie> "Valarin seemed to use long words; for example, the Valarin word for Telperion, Ibrîniðilpathânezel, is eight syllables long."
10:29:58 <Ngevd> CakeProphet, that's the Mayan god of esoteric programming languages
10:34:29 <CakeProphet> `run echo '[a-z'\''-]+(?<='\''s)'
10:34:31 <HackEgo> ​[a-z'-]+(?<='s)
10:34:35 <CakeProphet> hmmm
10:35:16 <CakeProphet> does '[a-z'\''-]+(?<='\''s)' count as a single argument?
10:35:52 <fizzie> It should; there's no whitespace in there.
10:36:26 <CakeProphet> eng_filter='[a-z'\''-]+(?<!'\''s)'
10:36:34 <CakeProphet> gb_opt eng-1M Eng1M $eng_filter
10:36:40 <CakeProphet> sh: Syntax error: ")" unexpected
10:37:15 <fizzie> Sure, it's not escaped/quoted any more at that point.
10:37:21 <fizzie> Try "$eng_filter" or some-such.
10:37:29 <CakeProphet> oh right...
10:37:34 <CakeProphet> stupid bash.
10:37:35 -!- GreaseMonkey has quit (Quit: The Other Game).
10:38:13 <CakeProphet> fizzie: same thing.
10:38:22 -!- Phantom_Hoover has joined.
10:38:25 <elliott> hi Phantom_Hoover
10:38:27 <elliott> s/ $//
10:38:34 <Phantom_Hoover> That was quick.
10:38:34 <lambdabot> Phantom_Hoover: You have 2 new messages. '/msg lambdabot @messages' to read them.
10:38:39 <CakeProphet> elliott: ah. I was confused.
10:38:43 <CakeProphet> until you made that correction.
10:39:09 <CakeProphet> I was like "who is Phantom_Hoover ?"
10:39:43 -!- ais523 has joined.
10:39:45 <CakeProphet> fizzie: same error. it doesn't seem to change anything.
10:40:54 <fizzie> CakeProphet: Hrm. Well, I'unno. foo='[a-z'\''-]+(?<!'\''s)'; echo $foo seems to work just fine.
10:41:14 <CakeProphet> maybe because the "$eng_filter" is being passed to a function
10:41:20 <CakeProphet> which then doesn't quote things.
10:41:32 <CakeProphet> bash is silly. :P
10:41:33 <ais523> [11:40] <ais523> how do I convert a char to a string in OCaml, without using any modules? I'm trying to write a script to automatically mark other people's homework (in a kind of reverse to the usual question), so it has to run inside a sandbox where modules aren't allowed, and there's no standard string_of_char function, nor anything similar that I can find in Pervasives
10:41:34 <ais523> [11:40] <ais523> I have a feeling that I'm missing some sort of syntax for declaring a string a character at a time
10:41:45 <ais523> I asked in #ocaml, but I'd better ask here too just in case somebody knows
10:41:47 <fizzie> Passing into a function shouldn't be any different than passing into a command; but of course what you do inside the function is a different thing.
10:41:50 <ais523> it shouldn't be that difficult an operation...
10:41:54 <ais523> *…
10:42:06 <CakeProphet> fizzie: right, I'm not quoting inside the function. so that's the problem.
10:42:20 <Ngevd> I don't know OCaml
10:42:39 <Ngevd> If it's anything like Haskell, surround it by square brackets
10:43:12 <elliott> ais523: I'm sure there's something in the string module
10:43:14 <elliott> which I think exists
10:43:24 <Ngevd> elliott, didn't you read?
10:43:27 <fizzie> There is something in the String module, but "without using any modules".
10:43:28 <Ngevd> He's not using modules!
10:43:31 <elliott> Oh.
10:43:46 <elliott> ais523: Surely the string module is not all that unsafe.
10:44:10 * elliott tests somethin
10:44:10 <elliott> g.
10:44:12 <ais523> elliott: it's not a security thing, but a using-modules-to-do-their-work-for-them thing
10:44:12 -!- elliott has quit (Quit: Leaving).
10:44:19 <ais523> #ocaml have come up with a suggesiton, I'll try it
10:44:32 -!- elliott has joined.
10:44:35 <fizzie> ais523: Is the suggestion... complicated and perverse?
10:44:55 <Ngevd> Hey, look, they've changed the royal succession rules for Commonwealth countries
10:45:20 <ais523> # let x = "x" in x.[0] <- 'y'; x ;;
10:45:21 <ais523> - : string = "y"
10:45:23 <ais523> fizzie: indeed
10:45:23 <Phantom_Hoover> How does that work?
10:45:32 <ais523> turns out strings are mutable in OCaml
10:45:38 <ais523> so I use a one-character string literal and mutate it
10:45:41 <Phantom_Hoover> Commonwealth countries recognise a different monarch to the UK?
10:45:50 <Ngevd> UK's in the Commonwealth
10:46:16 -!- elliott has quit (Client Quit).
10:46:26 -!- elliott has joined.
10:46:42 <CakeProphet> gb_opt() { echo perl ./construct_grams.pl -m "${2:-$1}"${3:+ -f $3}${4:+ -e $4} $D/googlebooks-$1-*.csv; }
10:46:45 <CakeProphet> d_opt() { echo perl ./construct_grams.pl -m "${3:-$1}"${2:+ -e "$2"}${4:+ -f "$4"} dict/$1;
10:46:53 <CakeProphet> bash is the best programming language for writing abstractions
10:47:21 <ais523> # string_of_char 'a' ^ string_of_char 'b' ;;
10:47:22 <ais523> - : string = "aa"
10:47:24 <ais523> oh dear
10:47:37 <CakeProphet> nope. same error. :(
10:47:58 <ais523> the joys of impure languages, right?
10:48:06 <elliott> ais523: wat
10:48:17 <ais523> elliott: it's closing over "x"
10:48:27 <elliott> I don't even want to know.
10:48:33 <ais523> so it's modifying the same string literal twice
10:48:36 <elliott> Does anyone know how to get my LAN IP without ifconfig?
10:48:37 <fizzie> ais523: Heh, heh. What if you return "" ^ x after mutating x.
10:48:48 <CakeProphet> I guess I need to like
10:48:48 <elliott> ais523: oh, that's your string_of_char
10:48:50 <CakeProphet> echo the "'s ?
10:48:55 <CakeProphet> ughhhhhzsodihwiuerhiuwerh
10:49:05 <elliott> ais523: why not just make a new variable each time
10:49:18 <elliott> ais523: let string_of_char char = let x = "x" in x.[0] <- 'y'; x ;;
10:49:24 <elliott> or does that actually share the "x"
10:49:29 <elliott> in which case: ewwwww
10:49:52 <ais523> elliott: it closes over the "x"
10:49:57 <elliott> ais523: that's disgusting
10:50:02 <ais523> # let string_of_char c = let x = "*" ^ "" in x.[0] <- c ; x ;;
10:50:04 <ais523> val string_of_char : char -> string = <fun>
10:50:05 <ais523> # string_of_char 'a' ^ string_of_char 'b' ;;
10:50:07 <ais523> - : string = "ab"
10:50:09 <ais523> concatenation operator saves the day
10:50:13 <elliott> ais523: I prefer fizzie's
10:50:14 <ais523> as it has to construct a new string each time
10:50:25 <CakeProphet> `run echo \"test\"
10:50:27 <elliott> let string_of_char c = let x = " " in x.[0] <- c; "" ^ x ;;
10:50:27 <HackEgo> ​"test"
10:50:49 <elliott> aha, "ip addr show dev eth0"
10:51:21 <fizzie> But would let x = " " in x.[0] <- c; "" ^ x ;; be theoretically non-re-entrant?
10:51:41 <ais523> fizzie: indeed
10:51:50 <CakeProphet> perl ./construct_grams.pl -m "Eng1M" -f "[a-z'-]+(?<!'s)" "/media/Elements/googledata//googlebooks-eng-1M-*.csv"
10:51:56 <CakeProphet> this is what my function outputs
10:52:32 -!- elliott has quit (Quit: Leaving).
10:52:37 -!- elliott has joined.
10:52:55 -!- elliott has quit (Client Quit).
10:53:00 -!- elliott has joined.
10:53:11 <CakeProphet> er wait I don't want the * in quotes.
10:53:12 <CakeProphet> wuehruhweriuhasudhiuwehr
10:53:13 -!- elliott has quit (Client Quit).
10:53:19 -!- elliott has joined.
10:53:26 -!- hagb4rd has joined.
10:53:26 <elliott> _sigh_ what is this thing complaining about
10:53:40 <fizzie> Also with the default bash config (histexpand true) ""s aren't enough to quote a !.
10:53:52 <CakeProphet> uh, why?
10:53:58 <CakeProphet> what's special about !
10:54:01 <fizzie> $ echo "foo!bar"
10:54:02 <fizzie> bash: !bar": event not found
10:54:04 <fizzie> That's why.
10:54:08 <fizzie> It's the history expansion character.
10:54:12 <CakeProphet> so... \!?
10:54:12 <fizzie> (Well, the default one.)
10:54:21 -!- elliott has quit (Client Quit).
10:54:25 -!- elliott has joined.
10:54:31 <fizzie> $ echo "foo\!bar"
10:54:31 <fizzie> foo\!bar
10:54:31 <elliott> WHY WOULD YOU SAY NO IDENT RESPONSE
10:54:32 <fizzie> Not quite.
10:54:33 <elliott> OH
10:54:34 <elliott> duh
10:54:44 -!- elliott has quit (Client Quit).
10:54:49 -!- elliott has joined.
10:54:51 <CakeProphet> fizzie: help what do.
10:54:56 <elliott> Excellent.
10:54:59 <elliott> ais523: Look at mah hostname.
10:55:33 <CakeProphet> fizzie: also does * not expand inside quotes?
10:55:53 <fizzie> CakeProphet: I suggest: despair. And yes, * does not expand inside quotes.
10:56:01 <CakeProphet> how do I quote spaces in a file name and also expand wildcards?
10:56:04 <CakeProphet> WEIRWEEHRJIUS<FDUWHERUHAEUHWERUHWET
10:56:07 <CakeProphet> bash string hell.
10:56:14 <fizzie> You put the * outside the quotes.
10:56:26 <CakeProphet> oh so wildcard expansion comes after quote expansion
10:56:39 <fizzie> htkallas@pc112:~$ touch 'foo bar 1'
10:56:39 <fizzie> htkallas@pc112:~$ touch 'foo bar 2'
10:56:39 <fizzie> htkallas@pc112:~$ echo "foo bar"*
10:56:39 <fizzie> foo bar 1 foo bar 2
10:57:16 <CakeProphet> I seem to be able to echo ! just fine.
10:57:34 <fizzie> You (or someone else) may have set histexpand off.
10:57:40 <fizzie> (It's the sensible thing.)
10:57:42 <CakeProphet> yep unquoted * fixed everything now.
10:57:58 <CakeProphet> and now my functions are beautifully written as:
10:57:59 <CakeProphet> gb_opt() { echo perl ./construct_grams.pl -m \"${2:-$1}\"${3:+ -f \"$3\"}${4:+ -e \"$4\"} \"$D/googlebooks-$1-\"*\".csv\"; }
10:58:02 <CakeProphet> d_opt() { echo perl ./construct_grams.pl -m \"${3:-$1}\"${2:+ -e \"$2\"}${4:+ -f \"$4\"} \"dict/$1\"; }
10:59:02 <CakeProphet> so basically I'm going to compile all the English stuff with a special filter so I can avoid weirdness
10:59:11 <CakeProphet> and then use my default filter on everything else
10:59:19 <CakeProphet> until I determine more weirdness in those corpii.
10:59:36 <CakeProphet> but anyway I can specify a regex filter for word data now.
11:00:09 <fizzie> The completely different argument order for gb_opt and d_opt looks pretty weird already.
11:00:21 <CakeProphet> yes it's for convenience
11:00:36 <CakeProphet> what I might need to commonly specify for the googledata is not the same as the /usr/share/dict data.
11:00:52 <CakeProphet> /usr/share/dict needs more explicit encodings. the googledata is all in the data encoding.
11:00:55 <elliott> noidentd.hs: accept: resource exhausted (Too many open files)
11:01:00 <CakeProphet> s/data/default/
11:01:00 <elliott> Nooooo, my identd is exploitable.
11:02:18 * elliott wonders if there's any way to avoid that without one process per connection.
11:02:22 <CakeProphet> googledata however needs explicitly specified module names more often because a lot of the names have hyphens
11:02:33 <CakeProphet> I suppose I could fix this with a de-hyphenate regex in my perl script, but... eh.
11:03:24 -!- ais523 has quit (Ping timeout: 255 seconds).
11:05:17 <CakeProphet> actually the dehyphenate regex sounds nice so I'll do that...
11:06:54 <CakeProphet> now they have the same argument order
11:07:10 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 , Skype: patashu0 .).
11:07:46 -!- ais523 has joined.
11:08:05 <ais523> there we go
11:08:25 <ais523> thanks, it's nice to have IRC to depend on when you need to do something bizarre with a relatively rarely-used language in an emergency
11:08:45 <elliott> ais523: Did I mention I preferred fizzie's?
11:08:53 <elliott> let string_of_char c = let x = " " in x.[0] <- c; "" ^ x ;;
11:08:54 <ais523> elliott: not while my connection was holding
11:09:04 <ais523> it feels weird mutating the same string constantly, though
11:09:19 <elliott> That's conceptually "nicer" than making a too-big string just to do what you do.
11:09:20 <CakeProphet> feels completely natural in Perl.
11:09:21 <ais523> so it's the difference between mutate then clone, and clone then mutate
11:09:26 <elliott> Erm, not too-big.
11:09:26 <ais523> elliott: there isn't a too-big string
11:09:30 <elliott> But anyway, okay, if you insist.
11:09:36 <elliott> ais523: I misspoke.
11:09:37 <elliott> Fingerthunk.
11:09:40 <elliott> Tunkletyped.
11:10:19 <CakeProphet> TUnkletypedfingerthunk
11:10:59 <elliott> BSD sockets should be simpler so that it's actually possible to golf a fake identd.
11:11:55 * elliott has a 20-line Haskell solution, but it's Just Not The Same.
11:12:20 <ais523> probably because Haskell doesn't have mutable strings
11:12:24 <fizzie> I'd have been worried with let x = "*" ^ "" in x.[0] <- c; x that some constant-folding pass pre-did "*" ^ "" -> "*"; but I guess not.
11:12:31 <elliott> ais523: Yes, that is a correct reading of context.
11:12:36 <elliott> fizzie: OCaml basically doesn't optimise.
11:12:42 <CakeProphet> gb_opt() { echo perl ./construct_grams.pl -m \"$1\"${2:+ -f \"$2\"}${3:+ -e \"$3\"} \"$D/googlebooks-$1-\"*\".csv\"; }
11:12:45 <CakeProphet> d_opt() { echo perl ./construct_grams.pl -m \"$1\"${2:+ -e \"$2\"}${3:+ -f \"$3\"} \"dict/$1\"; }
11:12:48 <CakeProphet> this is a little nicer.
11:12:50 <ais523> elliott: well, that optimization is incorrect
11:13:22 <ais523> otherwise, if you later mutated one of the original strings, ^'s return value would change too
11:13:37 <fizzie> Yeah, well, mutable strings.
11:14:18 <Ngevd> I think I'll register Pietbot with nickserv now
11:14:29 <elliott> fizzie: Hey, golf me a fake identd.
11:14:42 * elliott awaits total success.
11:14:51 <ais523> Ngevd: is it actually written in Piet?
11:15:30 <fizzie> elliott: Nnnno. But I've seen a not-many-lines fakedentd somewhere.
11:15:43 <elliott> fizzie: But it's like two hundred.
11:15:44 <Ngevd> Actually, no I won't
11:17:04 <ais523> elliott: you could just submit it as an anagol puzzle, then use the result?
11:17:13 <elliott> ais523: those can't do networking
11:17:14 <coppro> ohgods graph theory
11:17:28 <ais523> elliott: could you just use an nc wrapper?
11:17:30 <coppro> awesome, but such a pain
11:17:34 <elliott> ais523: no
11:17:34 <ais523> or is the identd protocol more complicated than that?
11:17:55 <coppro> anyone here ever looked at random graphs at all?
11:18:29 <elliott> ais523: no, it's trivial
11:18:30 <CakeProphet> I should just write a sprunge script
11:18:39 <CakeProphet> because I can never remember the command for it.
11:18:47 <ais523> CakeProphet: the command is on sprunge's website
11:18:50 <elliott> fizzie: ah, hmm, this one is only 143 lines, but it needs to be executed via identd
11:18:52 <elliott> i'll just write my own
11:18:53 <CakeProphet> ais523: I'm aware
11:19:02 <CakeProphet> but going to the website to get the command defeats the purpose of a command line pastebin
11:19:18 <ais523> not really, it saves you a copy-and-paste of the thing you're trying to submit
11:19:29 <CakeProphet> that's true.
11:20:24 <fizzie> I think someone did use a nc wrapper inside a 'while true' loop. It's a bit race-conditiony perhaps since the nc will only accept the first connection, but usually it's over fast enough.
11:20:27 -!- Ngevd has quit (Ping timeout: 240 seconds).
11:21:12 <elliott> ports are unsigned sixteen bits, right?
11:21:32 <fizzie> For now... (ominous ominesance)
11:23:01 <CakeProphet> echo -e '#!/bin/sh'"\n"curl -F 'sprunge=<-' http://sprunge.us > scripts/sprunge
11:23:02 <fizzie> The one I saw was just "read line; chomp newline; append ' : USERID : UNIX : osofake'; write out" without bothering to, you know, check that the query made any sense.
11:23:04 <CakeProphet> woooo
11:23:22 <ais523> elliott: yes, generally speaking
11:23:49 <elliott> fizzie: That's what I'm doing too.
11:24:06 <CakeProphet> er wait that doesn't work
11:24:13 <elliott> fizzie: Except (a) with a maximum length it'll read before kicking you and (b) maintaining like 16 connections at a time and if there's more than that a new one boots an old one off.
11:24:22 <elliott> fizzie: In case, you know, someone tries to DOS it.
11:24:32 <CakeProphet> cat Acro/build_data.sh | ./sprunge
11:24:32 <CakeProphet> ./sprunge: 2: cannot open -: No such file
11:24:42 <ais523> why would someone try to DOS a golfed identd
11:24:47 <ais523> and why would an identd golfer worry about DOSes?
11:25:32 <ais523> also, hmm, is 0 a valid port number? what about 65535?
11:25:34 <CakeProphet> oh...
11:25:35 <CakeProphet> right
11:25:36 <CakeProphet> stupid
11:25:37 <CakeProphet> bash
11:25:38 <CakeProphet> quoting
11:26:22 <elliott> CakeProphet: alias sprunge='curl -F "sprunge=<-" sprunge.us'
11:26:33 <CakeProphet> cat sprunge | ./sprunge http://sprunge.us/Qfge
11:26:40 <CakeProphet> elliott: I fixied it
11:26:52 <fizzie> ais523: At least API-wise 0 is generally not a valid port number, since it's used to indicate "any port".
11:27:07 -!- Vorpal has joined.
11:27:15 <CakeProphet> elliott: hmmm, alias? what is that?
11:27:21 <CakeProphet> no man entry for it.
11:27:33 <fizzie> It's a bash builtin.
11:27:44 <ais523> CakeProphet: try "help alias" in bash
11:28:33 <CakeProphet> hmmm okay
11:28:40 <CakeProphet> are these defined in a file or something?
11:28:51 <fizzie> Quite often in .bashrc, or some other file.
11:29:11 <CakeProphet> so I don't need to like... "export" them or anything.
11:29:21 <elliott> ...
11:29:23 <elliott> TEST TIME
11:29:25 -!- elliott has quit (Quit: Leaving).
11:29:29 -!- elliott has joined.
11:29:39 <fizzie> It's pretty close to a shell function except more restricted.
11:29:39 <elliott> Aww.
11:31:05 <fizzie> Vorpal: Heh, remember yesterday's sillily-titled IEEE tech alert? It seems they got some feedback: "Subject: IMPORTANT: A Letter From IEEE Spectrum Editor in Chief Susan Hassler About Today's Tech Alert
11:31:05 <fizzie> -- Please accept our sincere apologies for the headline in today's Tech Alert: "With the Arduino, Now Even Your Mom Can Program." The actual title of the article is "The Making of Arduino."
11:31:05 <fizzie> I'm an IEEE member, and a mom, and the headline was inexcusable, a lazy, sexist cliché that should have never seen the light of day. Today we are instituting an additional headline review process that will apply to all future Tech Alerts so that such insipid and offensive headlines never find their way into your in-box. --"
11:31:43 <elliott> select reports connects to a listening socket as "reads", right?
11:31:49 <CakeProphet> ah so I do need to edit .bashrc or whatever.
11:31:55 <CakeProphet> they don't persist between sessions otherwise.
11:33:15 <Phantom_Hoover> https://sites.google.com/site/mandelbox/negative-mandelbox
11:33:23 <Phantom_Hoover> help i can't stop looking
11:33:30 <elliott> Actually, maybe I'll just use poll.
11:33:38 <elliott> poll doesn't need the set of fds reset each time, right?
11:34:12 <fizzie> You can use a static array of struct pollfd's, yes.
11:34:24 <fizzie> It doesn't even touch the "events" fields, just the "revents".
11:35:09 <fizzie> And a new connection on a listening socket should be a POLLIN(ation).
11:35:51 -!- derrik has quit (Quit: thx for the day, D, L, s, et al).
11:40:36 <elliott> Right.
11:45:12 <CakeProphet> fizzie: help I can't stop looking https://lh4.googleusercontent.com/-3H-b7AFnpE4/TqhDiDPG0KI/AAAAAAAAKJU/QIpbMwzYsn4/s400/boss.gif
11:48:58 <fizzie> "What."
11:49:22 <elliott> fizzie: Hmm, I think I must be using poll wrong. :-(
11:49:42 <elliott> At least, I get the events for new connections, but no read events beyond that.
11:50:41 <elliott> Oh, hmm.
11:50:47 <fizzie> Well, um, well. I'unno. Do you accept() the new connections and add them to your fd-list?
11:50:58 <elliott> bind: Address already in use
11:50:59 <elliott> Ajhgkhrkahkrjghkj
11:51:04 <elliott> How _do_ you fix that?
11:51:15 <fizzie> SO_REUSEADDR can help.
11:51:32 <elliott> Nah, I'd rather not change my code.
11:51:40 <elliott> I just need some kind of all-purpose unlock-port. :p
11:52:45 <elliott> Aha, now it works.
11:53:42 <fizzie> Well, it's a timeout. When the lingering entry in the TCP stack evaporates from CLOSE_WAIT or whatever to gone, it'll be again available.
11:58:11 <elliott> Hmm.
11:58:21 <elliott> It's safe to have a pollfds with a junk fd as long as .events = 0, right?
11:58:28 <elliott> *pollfds entry
12:03:56 <fizzie> Er, it could be safe, but I'm not sure it's necessarily safe.
12:04:34 <fizzie> "The array's members are pollfd structures within which fd specifies an open file descriptor --"
12:05:17 <fizzie> You can have a struct pollfd with .fd = -1, though.
12:05:26 <fizzie> "If the value of fd is less than 0, events shall be ignored, and revents shall be set to 0 in that entry on return from poll()."
12:07:14 <elliott> <fizzie> You can have a struct pollfd with .fd = -1, though.
12:07:16 <elliott> Ah, thanks.
12:07:53 <fizzie> Well, to be exact, POSIX says you can have one. I don't see a mention it in my "man poll", but...
12:09:51 <elliott> Let's just assume it works.
12:10:13 <elliott> Are four send()s after another likely to get mushed together or will they cause ~overhead~? I don't really know network stuff.
12:10:45 <fizzie> Oh, I guess it's also safe-for-some-values-of to have an invalid fd in there; it'll just set POLLNVAL in the .revents member, but you can ignore that.
12:11:25 <fizzie> If you don't specifically request TCP_NODELAY, I suppose they're rather likely to get combined to a single packet.
12:11:40 <elliott> Also also: Are you meant to shutdown() a server fd too, or is it just close() that you're meant to do?
12:12:56 <ais523> elliott: you can request the packets to be sent separately, but by default they'll be queued up a bit
12:13:09 <fizzie> Well, uh... I guess you could shutdown(s, SHUT_RD) the socket immediately when you've read the query, that would (theoretically) let one half of the four-packet shutdown sequence happen during the time you're "computing" and writing the reply.
12:13:28 <elliott> fizzie: Nonono, I mean server fds.
12:13:29 <elliott> As in.
12:13:32 <elliott> What I accept() from.
12:14:40 <fizzie> Oh, that; I'd just close it.
12:15:13 <elliott> Okay.
12:16:53 <elliott> Let's try this.
12:16:55 -!- elliott has quit (Quit: Leaving).
12:17:00 -!- elliott has joined.
12:17:05 <elliott> :/
12:17:08 <fizzie> Oh no. :/
12:17:09 <elliott> It didn't like the response.
12:17:30 <elliott> [elliott@dinky noidentd]$ nc localhost 113
12:17:30 <elliott> 113, 113
12:17:30 <elliott> 113, 113 : USERID : UNIX : elliott
12:17:34 <elliott> That's korrect, no?
12:18:14 <fizzie> It looks good to me.
12:18:22 <elliott> Hmm.
12:18:44 <fizzie> Did you put a CR-LF pair at the end?
12:18:48 <elliott> fizzie: Also, are you sure close() is enough? "bind: Address already in use" still happens for me even with a proper atexit handler.
12:19:50 <fizzie> Yes, close() does an implicit shutdown() for connection-oriented sockets; I don't think shutdown() is even sensible for a listening socket, which after all is not connected to anything.
12:20:05 <elliott> Alright.
12:20:12 -!- elliott has quit (Client Quit).
12:20:17 -!- elliott has joined.
12:20:21 <elliott> :/
12:20:48 <elliott> http://sprunge.us/aMJS ;; I'm actually surprised it came out looking as good as it does; all I have to do now is make it work...
12:22:08 <elliott> [elliott@dinky noidentd]$ echo -n 'a' | nc localhost 113
12:22:08 <elliott> [hang]
12:22:15 <elliott> Hmm, I guess recv doesn't work like read.
12:22:35 <elliott> Or nc doesn't.
12:22:37 <elliott> One of the two.
12:22:50 <elliott> Oh well, hardly matters.
12:23:11 <elliott> Ooh, I can get mine to break.
12:24:20 <elliott> Ah, yes.
12:24:27 <elliott> woo 1
12:24:27 <elliott> woo 2
12:24:27 <elliott> woo 3
12:24:27 <elliott> woo 4
12:24:27 <elliott> woo 5
12:24:27 <elliott> woo 6
12:24:29 <elliott> woo 7
12:24:31 <elliott> woo 8
12:24:33 <elliott> woo 9
12:24:35 <elliott> woo 0
12:24:37 <elliott> Turns out one can't have 0 connections.
12:24:50 -!- ais523 has quit (Ping timeout: 258 seconds).
12:25:15 <elliott> conns = (conns % (MAXCONNS - 1)) + 1;
12:25:15 <elliott> I... think that should fix it.
12:26:08 <fizzie> That thing looks suspicious. Isn't it going to just abandon the (open) sockets when it wraps over?
12:27:00 <elliott> fizzie: Yes, that's the intent. Oh, I should probably close them.
12:27:23 <elliott> fizzie: The intent is that too many connections disconnect older ones, though, yes.
12:28:00 <fizzie> It still sounds strange that it'd abandon/close all MAXCONNS existing connections every MAXCONN'th connection when that counter wraps over.
12:28:15 <elliott> Why would it? It'll just abandon the first. Oh, I see whaty ou mean.
12:28:22 <elliott> I guess I'll just always pass MAXCONNS + 1 to poll.
12:28:24 <elliott> Not like it'll go any slower.
12:28:48 <fizzie> You loop with for (size_t i = 0; i < conns; i++) so when the counter wraps over to 1, it'll only look at the first connection.
12:28:53 <elliott> Yes, indeed.
12:29:19 <elliott> Fixing.
12:31:16 <elliott> fizzie: This should look more reasonable to you: http://sprunge.us/GGWW
12:31:20 <elliott> Oh, modulo me having not yet defined NELEMS.
12:32:34 <elliott> fizzie: It would be kind of nice if it only dropped people if there was more than ten simultaneous connections. But I'd need a bitset then.
12:32:50 <elliott> I suppose it would still be more elegant, as I'd call poll() with a proper count.
12:33:05 -!- elliott has quit (Quit: Leaving).
12:33:10 -!- elliott has joined.
12:33:17 <elliott> Still doesn't actually _work_, though.
12:33:33 * elliott installs Wireshark.
12:34:40 <elliott> fizzie: Anyway, I think that behaviour is semi-sensible.
12:34:52 <elliott> It just cycles through ten slots, closing sockets as it overwrites them.
12:34:54 <fizzie> Also (conns % (MAXCONNS - 1)) + 1 returns values in the [1, MAXCONNS-1] range (since %(MAXCONNS-1) is at most MAXCONNS-2); I think you want just (conns%MAXCONNS)+1 there. Then it'll go 0 (initial) -> 1, 1 -> 2, ..., MAXCONNS-1 -> MAXCONNS, MAXCONNS -> 1, 1 -> 2, ...
12:35:02 <elliott> Oh, right.
12:35:16 <elliott> Anyway, validate my semi-confidence in the behaviour being reasonable.
12:35:25 <fizzie> Yes, it sounds semi-reasonable.
12:35:32 <elliott> Can you remove the semi- qualifier???
12:35:52 <fizzie> Oh, it was a semi-confidence on reasonability, not confidence on semi-reasonability.
12:35:59 <elliott> If I added a bitset of available slots I'd also want something that keeps track of the oldness order of them, so I only kill the oldest socket. But blah blah blah, too much effort.
12:36:49 -!- ais523_ has joined.
12:36:59 -!- elliott has quit (Client Quit).
12:37:04 -!- elliott has joined.
12:37:19 <fizzie> Yes, at that level of simplicity a circular buffer like that is a reasonable choice.
12:37:39 <ais523_> programming needs more pretzel buffers
12:37:56 <fizzie> You could use the clients[] array as the "bitset" (just find the first .fd = -1) but you'd still need some sort of a serial number array to select the oldest when all the slots are full.
12:38:10 <elliott> Does anyone know how to filter wireshark to just show things on a certain port?
12:38:25 <fizzie> I always just tcpdump and then open the dumpfile in wireshark.
12:39:10 <fizzie> tcpdump -i iface -s 0 -w blah.pcap 'port 113' + wait, ^c + wireshark blah.pcap.
12:39:15 -!- Phantom_Hoover has quit (Ping timeout: 240 seconds).
12:39:16 <ais523_> I'd be shocked if wireshark didn't have some way to do that
12:39:18 <fizzie> But I'm sure the built-in capturator can filter too.
12:39:30 <ais523_> the problem is that it has so many options it's hard to find the one you actually want
12:39:37 <ais523_> which is an issue with both GUI and CLI programs
12:39:39 <elliott> fizzie: I'm filtering this one after-the-fact.
12:39:48 <fizzie> Oh. Well, those filters are really messy too.
12:40:19 <fizzie> You can just write an expression in that box, but I don't really know the syntax.
12:40:32 <fizzie> There's that GUI thing for constructing a filter, but it especially has far too many options.
12:40:42 <fizzie> (If you can find the first packet, you can use the "follow the stream" option.)
12:41:05 <elliott> "tcp.port == 113" does it.
12:41:06 <fizzie> I'd check, but they haven't installed such HACKER TOOLS on these work-workstations.
12:41:19 <fizzie> Yes, the syntax is reasonable, I just can't remember it.
12:41:39 -!- Phantom_Hoover has joined.
12:42:34 <elliott> fizzie: "Heh", it actually goes in two packets here.
12:42:41 <elliott> What the client said, and then the rest of the line.
12:42:52 <elliott> A bit... wasteful.
12:43:41 <fizzie> Well, you can use the MSG_MORE flag in the three first send()s.
12:44:02 <fizzie> It's the "wait, wait, I'm not done yet" flag.
12:47:28 <elliott> That's not part of my manpage.
12:47:54 -!- elliott has quit (Quit: Leaving).
12:47:57 <fizzie> It might not be exactly portable.
12:47:59 -!- elliott has joined.
12:48:02 <fizzie> <fizzie> It might not be exactly portable.
12:48:06 <elliott> Annoyed that made a difference.
12:49:24 <fizzie> Sounds like a lazy identd-client-writer; TCP is stream-oriented, the packet boundaries shouldn't really matter.
12:49:29 -!- elliott_ has joined.
12:49:30 <elliott_> <fizzie> <fizzie> It might not be exactly portable.
12:49:32 <elliott_> <elliott> Annoyed that made a difference.
12:49:34 <elliott_> <elliott> [elliott@dinky noidentd]$ curl -F 'sprunge=<-' sprunge.us
12:49:36 <elliott_> <elliott> curl: (6) Could not resolve host: sprunge.us; Unknown error
12:49:38 <elliott_> <elliott> Uh.
12:49:40 <elliott_> <elliott> Neat, my connection is broken.
12:49:42 <elliott_> <elliott> fizzie: Ping.
12:49:44 <elliott_> <elliott> ^echo hi
12:49:48 <elliott_> But yes,
12:49:50 <elliott_> 12:49:24: <fizzie> Sounds like a lazy identd-client-writer; TCP is stream-oriented, the packet boundaries shouldn't really matter.
12:49:51 -!- Jafet has quit (Read error: Connection reset by peer).
12:49:53 <elliott_> fizzie: That's why I was annoyed. :p
12:50:05 <elliott_> fizzie: Although -- send isn't actually guaranteed to send everything at once, is it?
12:50:17 <ais523_> elliott_: it's TCP, it's not even guaranteed to send everything in order
12:50:19 <elliott_> So I'm being lazy, too.
12:50:22 <ais523_> depending on conditions in the Internet
12:50:31 -!- Jafet has joined.
12:50:36 <elliott_> ais523_: I'm sure send(fd, foo, n, 0) can't actually rearrange the bytes in foo.
12:50:38 <ais523_> however, recv will always appear receive it in order, because it reconstructs the packets into the order of the original sends
12:50:49 <elliott_> Well, yes, yes.
12:50:56 <ais523_> elliott_: right, but it can place them in multiple packets, which can be received out of order
12:51:11 -!- elliott has quit (Read error: Operation timed out).
12:51:29 <elliott_> fizzie: Actually I don't think I will bother trying multiple send()s for the response, because (a) it's tiny and (b) if I'm not careful you could put it into an infloop by being a bad client, perhaps.
12:52:04 <fizzie> You can't be non-lazy, since there's no way to guarantee in-one-packet delivery; I guess a single send() with a small amount of data is sort of a best-effort thing, though.
12:52:34 <CakeProphet> dude why has the US not cut its ridiculous military spending.
12:53:03 <CakeProphet> you know, instead of catapulting itself into the debtosphere.
12:53:56 <CakeProphet> I think I've lost faith in democracy. Or, well, whatever the US system is called.
12:54:04 <ais523_> `quote
12:54:06 <ais523_> `quote
12:54:06 <HackEgo> 229) <l4rk> your premise to falsify "false" is false
12:54:06 <ais523_> `quote
12:54:07 <ais523_> `quote
12:54:07 <ais523_> `quote
12:54:12 <HackEgo> 568) <evincar> elliott_: I don't see a difference between a function taking a function as an argument, and some composition of those functions.
12:54:12 <HackEgo> 524) <Taneb> So it's like... Rummy mixed with... breakout?
12:54:23 <HackEgo> 525) <oerjan> i try to be a hermit but it's hard with all these housemates.
12:54:24 <HackEgo> 695) <Phantom_Hoover> Add a full stop in the middle and it becomes philosophy.
12:54:24 <fizzie> CakeProphet: How did you find out the US policy decisions were made on #esoteric?!
12:54:30 <fizzie> I thought it was a best-kept secret.
12:54:30 <elliott_> <fizzie> You can't be non-lazy, since there's no way to guarantee in-one-packet delivery; I guess a single send() with a small amount of data is sort of a best-effort thing, though.
12:54:36 <elliott_> fizzie: I can; I can just assume it worked.
12:54:51 <CakeProphet> fizzie: I've been slowly uncovering the secret #esoteric cabal for years now.
12:54:54 <ais523_> elliott_: hmm, none of those are massively good
12:55:09 <elliott_> `delquote 695
12:55:12 <HackEgo> ​*poof*
12:55:14 <Phantom_Hoover> 568 looks like the weakest to me.
12:55:26 <CakeProphet> Note: elliott, an obvious choice for figurehead of the #esoteric cabal, is actually a mere puppet to a more sinister force.
12:55:35 <elliott_> Phantom_Hoover: The qdb has to act as a shrine to people being really stupid, as well as being entertaining.
12:55:35 <Phantom_Hoover> elliott_, I was about to point out that you added it when I remembered that it was Taneb.
12:55:40 <elliott_> Otherwise we would forget and forgive.
12:55:51 <ais523_> actually, Gregor takes all the decisions unilaterally, but doesn't know what they mean
12:56:02 <elliott_> I hereby decree this a good enough identd: http://sprunge.us/FYDV
12:56:05 <ais523_> and #esoteric effectively shapes them by working out what language they're in
12:56:10 <elliott_> Now to use fizzie's clever idea of using the fd values directly to select a new slot.
12:56:20 <CakeProphet> elliott_: if it's a shrine of stupidity, why am I not quoted more often?
12:56:27 <elliott_> fizzie: (Does that actually let me call poll with a smaller number, though? I guess not.)
12:56:32 <elliott_> CakeProphet: I can hardly add everything you say.
12:56:49 <Phantom_Hoover> CakeProphet, because you're not stupid as much as thick-headed.
12:57:18 <ais523_> !bfjoust cat ,[.,]
12:57:22 <fizzie> elliott_: Not really, no. (Well, I guess you could also keep track of the largest-index non-"-1" entry, but that's not much of a win.)
12:57:25 <EgoBot> ​Score for ais523__cat: 6.8
12:57:33 <ais523_> I wonder why I did that?
12:57:45 <ais523_> !help bfjoust
12:57:46 <EgoBot> ​Sorry, I have no help for bfjoust!
12:58:36 <ais523_> now I have to try to remember what undermine does
12:58:51 <ais523_> oh right, I think I remember
12:59:07 <fizzie> elliott_: Technically something like " 12345 , 12345 \r\n" is still a legal request, but I'm not sure you need to care about that.
12:59:17 <elliott_> fizzie: Yeah, I don't give a damn about that.
13:00:19 <CakeProphet> Phantom_Hoover: according to most online dictionaries thick-headed and stupid are pretty much the same thing. :P
13:00:50 <elliott_> fizzie: Oops, I forgot to drop privileges after listen().
13:00:52 <elliott_> Or is it after bind()?
13:01:12 <Phantom_Hoover> CakeProphet, ah, but your problem is that it takes massive effort to actually get you to learn anything, and because of that everything you do learn rattles around in all the empty space and gets mixed up.
13:01:28 <elliott_> (Also is nobody always UID/GID 99?)
13:01:38 <elliott_> (Or, wait, should I use "daemon" instead? And is that always UID/GID 2?)
13:02:19 <fizzie> I'd suspect after bind() is enough; and the actual numbers (except perhaps 0) are non-standard.
13:02:26 <elliott_> :/
13:02:34 <CakeProphet> Phantom_Hoover: I will choosed to interpret this as a positive thing in one way or another.
13:02:43 <elliott_> fizzie: And no way to get them other than parsing /etc/passwd?
13:02:56 <Phantom_Hoover> CakeProphet, you aren't at risk of joining a cult, I suppose.
13:03:00 <CakeProphet> mixing and combinging of concepts demonstrates true understanding!
13:03:01 <fizzie> Something like getpwnam("nobody")->pw_uid, except maybe with error-checking in-between.
13:03:13 <elliott_> Are you sure it should be nobody and not daemon?
13:03:17 <elliott_> Also, do I need to set the gid...?
13:03:18 <fizzie> No.
13:03:59 <elliott_> Which was that a no to?
13:04:14 <fizzie> The first one. I'm not sure which user account you "should" use.
13:04:42 <ais523_> elliott_: "nobody" is 65534 on this system
13:04:59 <elliott_> So is setting the group necessary?
13:05:14 <CakeProphet> I find normative questions difficult to answer.
13:05:43 <CakeProphet> "Which shirt should I wear?" "life has no inherent meaning."
13:06:21 <elliott_> http://sprunge.us/IYgT ;; OK, this is slightly better, now to implement the age thing.
13:09:25 <CakeProphet> Fallibilism (from medieval Latin fallibilis, "liable to err") is the philosophical principle that human beings could be wrong about their beliefs, expectations, or their understanding of the world.
13:09:29 <CakeProphet> good ism.
13:10:24 <elliott_> http://sprunge.us/KCQe
13:10:36 <elliott_> This MIGHT even do the oldest-connection thing; I'll let fizzie figure it out. :p
13:10:43 <CakeProphet> though the Catholic Church seems to disagree, what with the Pope and all.
13:10:59 <CakeProphet> if I ever become Pope.
13:11:12 <CakeProphet> I will just spew logical contradictions all day.
13:11:31 <elliott_> Hmmmm.
13:11:32 <ais523_> !bfjoust undermine2 (+)*9>(+)*9(>[++++[-[-[-[--[-[-[-[>(>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1]]]]]]]](>+++++++[-])*29])*-1
13:11:33 <elliott_> Seems maybe not.
13:11:35 <EgoBot> ​Score for ais523__undermine2: 0.0
13:11:42 <elliott_> ais523_: wow
13:11:48 <ais523_> hmm, I was expecting to do better than that
13:11:53 <elliott_> looks like a bug
13:11:54 <ais523_> elliott_: I'm guessing unmatched paren somewhere
13:11:59 <elliott_> heh
13:12:49 <ais523_> !bfjoust undermine2 (+)*9>(+)*9(>[++++[-[-[-[--[-[-[-[((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1]]]]]]]](>+++++++[-])*29])*-1
13:12:52 <EgoBot> ​Score for ais523__undermine2: 27.3
13:13:16 <elliott_> gah
13:13:19 <elliott_> it does the exact wrong thing
13:13:26 <elliott_> kills the _newest_ client
13:13:29 <elliott_> i.e. the one that just connected :)
13:14:10 <ais523_> !bfjoust undermine2 (+)*9>(+)*9(>[>++++[-[-[-[--[-[-[-[((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1]]]]]]]](>+++++++[-])*29])*-1
13:14:13 <EgoBot> ​Score for ais523__undermine2: 28.3
13:14:19 <elliott_> oh hmm
13:14:20 <elliott_> duh
13:14:22 <ais523_> heh, hardly any change
13:15:37 -!- boily has joined.
13:16:11 <ais523_> !bfjoust undermine2 (+)*9>(+)*9(>[>++++[-[-[-[--[-[-[-[((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1]]]]]]]]([>]>+++++++[-])*29])*-1
13:16:14 <EgoBot> ​Score for ais523__undermine2: 28.1
13:16:27 <ais523_> !bfjoust undermine2 (+)*9>(+)*9(>[[>]++++[-[-[-[--[-[-[-[((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1]]]]]]]]([>]>+++++++[-])*29])*-1
13:16:31 <EgoBot> ​Score for ais523__undermine2: 20.4
13:16:37 <ais523_> yep, thought that would happen
13:16:45 <fizzie> elliott_: I suppose tracking the ago-order like that is possible. Personally I'd probably have gone with the slightly disoptimal but possibly simpler int serial = 0; int serials[MAXCONNS]; /* on inserting a new conn */ serials[conn-1] = serial++; /* and then when slots are full, select argmin_i serials[i] */
13:16:50 <fizzie> s/ago/age/
13:16:59 <fizzie> Awaysh for a couple of hours now.
13:17:04 <elliott_> fizzie: Oh, yes. Duh.
13:17:07 <elliott_> That's almost certainly cheaper.
13:17:09 <elliott_> Thanks.
13:17:16 <elliott_> (argmin_i?)
13:17:27 <ais523_> !bfjoust undermine2 <
13:17:30 <EgoBot> ​Score for ais523__undermine2: 0.0
13:17:51 <fizzie> Well, you know, C is a bit verbose for selecting the index with the minimum value; I went with the mathy comment. :p
13:17:54 <fizzie> (Okay, gone.)
13:18:03 <elliott_> fizzie: Butbutbut wait.
13:18:08 <elliott_> serial eventually overflows like that.
13:18:11 <elliott_> Oh, wait, no.
13:18:16 <elliott_> Or, hmm, yes.
13:18:29 <ais523_> !bfjoust oddrush (>)*8(>>[-])*10
13:18:32 <EgoBot> ​Score for ais523__oddrush: 3.1
13:18:37 <ais523_> about what I expected
13:19:08 <fizzie> elliott_: Well, yes, it does. It'll behave poorly during the wraparound, that's true.
13:19:22 <elliott_> fizzie: Is there any way to somehow keep serial low?
13:19:26 <ais523_> !bfjoust oddrush (>)*8(>>[+++++[-]])*10
13:19:30 <EgoBot> ​Score for ais523__oddrush: 1.8
13:19:34 <elliott_> fizzie: I could... loop through the array again, subtracting the slot picked?
13:19:39 <elliott_> Since it's the minimum and all.
13:20:01 <elliott_> That would work, I think.
13:20:03 <fizzie> elliott_: Yeah, I guess you could do that. And then set 'serial' to max+1.
13:20:13 <elliott_> fizzie: Right.
13:20:23 <fizzie> Now really. ->
13:20:55 <elliott_> serial = 0;
13:20:55 <elliott_> for (size_t i = 0; i < NELEMS(serials); i++) {
13:20:55 <elliott_> serials[i] -= slot;
13:20:55 <elliott_> if (serials[i] > serial)
13:20:55 <elliott_> serial = serials[i];
13:20:56 <elliott_> }
13:20:57 <elliott_> serial++;
13:20:59 <elliott_> Ugly. :(
13:21:20 <elliott_> ais523_: Here, you prettify that.
13:21:21 <elliott_> :p
13:22:31 <fizzie> I think you want to slotserial = serials[slot]; ... serials[i] -= slotserial; ... assuming slot is the index here, I'unno. If it's the smallest serial, then that's a different thing, of course.
13:22:34 <fizzie> Really really. -> ->
13:23:24 <ais523_> !bfjoust oddsyncrush (>)*7(>>[-[++[+++[-]]](>[-[++[+++[-]]]])*20])*11
13:23:27 <EgoBot> ​Score for ais523__oddsyncrush: 18.1
13:23:36 <ais523_> the strategy is going somewhere!
13:24:54 <elliott_> Jesus christ, it's doing the same again
13:25:00 <elliott_> fizzie: Oh, right, thanks
13:25:14 <ais523_> !bfjoust oddsyncrush (+)*9>(+)*6>(>)*5(>>[-[++[+++[-]]](>[-[++[+++[-]]]])*20])*11
13:25:17 <EgoBot> ​Score for ais523__oddsyncrush: 22.5
13:26:08 <elliott_> size_t minserial = 0;
13:26:08 <elliott_> for (size_t i = 0; i < NELEMS(serials); i++) {
13:26:08 <elliott_> if (!ok || serials[i] < minserial) {
13:26:08 <elliott_> ok = true;
13:26:09 <elliott_> slot = i;
13:26:11 <elliott_> minserial = serials[i];
13:26:13 <elliott_> }
13:26:15 <elliott_> }
13:26:17 <elliott_> size_t maxserial = 0;
13:26:19 <elliott_> for (size_t i = 0; i < NELEMS(serials); i++) {
13:26:21 <elliott_> serials[i] -= minserial;
13:26:23 <elliott_> if (serials[i] > maxserial)
13:26:25 <elliott_> maxserial = serials[i];
13:26:27 <elliott_> }
13:26:29 <elliott_> serial = maxserial + 1;
13:26:31 <elliott_> drop(&clients[slot]);
13:26:33 <elliott_> fizzie: PERFECT
13:26:35 <elliott_> It is funny because it pulls fizzie back.
13:26:57 <elliott_> AND IT DOES THE SAME
13:26:58 <elliott_> HOW
13:27:13 <ais523_> !bfjoust oddsyncrush (+)*9>(+)*6>(>)*5(>>[>[-[++[+++[-]]]](>[-[++[+++[-]]]])*20])*11
13:27:16 <EgoBot> ​Score for ais523__oddsyncrush: 22.3
13:27:40 <ais523_> !bfjoust oddsyncrush (+)*9>(+)*6>(>)*5(>>[>[-[++[+++[-]]](>[-[++[+++[-]]]])*20]])*11
13:27:43 <EgoBot> ​Score for ais523__oddsyncrush: 20.6
13:27:49 <ais523_> hmm
13:28:30 <elliott_> Yesss, it works.
13:29:18 <ais523_> !bfjoust (+)*9>(+)*6>(>)*5(>>[(>[-[++[+++[-]]](>[-[++[+++[-]]]])*20])*20])*11
13:29:19 <EgoBot> ​Use: !bfjoust <program name> <program> . Scoreboard, programs, and a description of score calculation are at http://codu.org/eso/bfjoust/
13:29:24 <ais523_> !bfjoust oddsyncrush (+)*9>(+)*6>(>)*5(>>[(>[-[++[+++[-]]](>[-[++[+++[-]]]])*20])*20])*11
13:29:27 <EgoBot> ​Score for ais523__oddsyncrush: 22.3
13:29:45 <ais523_> that's what I meant, but it doesn't seem to have helped much
13:30:15 <elliott_> http://sprunge.us/fSJR
13:30:20 <elliott_> Tada.
13:30:27 <ais523_> !bfjoust oddsyncrush <
13:30:29 <elliott_> Please feel free to tell me how hideously broken it is.
13:30:30 <EgoBot> ​Score for ais523__oddsyncrush: 0.0
13:30:51 -!- elliott_ has quit (Quit: Leaving).
13:30:55 -!- elliott_ has joined.
13:31:10 <ais523_> !bfjoust collision (>>>>[>+++++[-]])*7
13:31:13 <EgoBot> ​Score for ais523__collision: 0.7
13:31:24 <ais523_> !bfjoust collision (>>>>[(>+++++[-]])*20)*7
13:31:27 <EgoBot> ​Score for ais523__collision: 0.0
13:31:34 <ais523_> !bfjoust collision (>>>>[(>+++++[-])*20])*7
13:31:37 <EgoBot> ​Score for ais523__collision: 8.3
13:31:45 <ais523_> !bfjoust collision (>>>[(>+++++[-])*20])*7
13:31:48 <EgoBot> ​Score for ais523__collision: 11.4
13:32:30 <ais523_> haha, it beats most of my programs
13:32:32 <ais523_> but not a lot of others
13:32:46 <ais523_> presumably you can figure out who's written a program just from its decoy setup pattern
13:33:05 <ais523_> !bfjoust collision (>>>[(>[+++++[-]])*20])*7
13:33:08 <EgoBot> ​Score for ais523__collision: 12.2
13:33:29 <ais523_> Gregor_ill_bet_you_have_four_decoys.bfjoust vs ais523__collision.bfjoust ><<><<><<><<><<<<>>>> ><<><<><<><<><<<<>>>> 6
13:33:36 <ais523_> now, /that's/ a bizarre patter nof wins and losses
13:33:38 <ais523_> *pattern
13:34:03 <ais523_> !bfjoust collision (>>>[(>[+++++[-]])*20])*9
13:34:06 <EgoBot> ​Score for ais523__collision: 16.2
13:34:15 <ais523_> can't believe I got /that/ wrong...
13:34:33 <ais523_> !bfjoust collision (>>>[(>[+++++[-]])*20])*9(>[+++++[-]])*2
13:34:36 <EgoBot> ​Score for ais523__collision: 16.3
13:35:05 <ais523_> !bfjoust collision >>>>>>(>>>[(>[+++++[-]])*20])*7(>[+++++[-]])*2
13:35:08 <EgoBot> ​Score for ais523__collision: 13.0
13:35:19 <ais523_> !bfjoust collision >++>>>>>(>>>[(>[+++++[-]])*20])*7(>[+++++[-]])*2
13:35:22 <EgoBot> ​Score for ais523__collision: 13.4
13:35:34 <ais523_> !bfjoust collision >..>>>>>(>>>[(>[+++++[-]])*20])*7(>[+++++[-]])*2
13:35:37 <EgoBot> ​Score for ais523__collision: 15.0
13:35:43 <ais523_> oh right
13:35:50 <ais523_> !bfjoust collision >.>>(>>>[(>[+++++[-]])*20])*8(>[+++++[-]])*2
13:35:53 <EgoBot> ​Score for ais523__collision: 16.3
13:36:00 <ais523_> !bfjoust collision >->>(>>>[(>[+++++[-]])*20])*8(>[+++++[-]])*2
13:36:03 <EgoBot> ​Score for ais523__collision: 15.2
13:36:09 <ais523_> !bfjoust collision >>->(>>>[(>[+++++[-]])*20])*8(>[+++++[-]])*2
13:36:12 <EgoBot> ​Score for ais523__collision: 15.6
13:36:19 <ais523_> !bfjoust collision >>>-(>>>[(>[+++++[-]])*20])*8(>[+++++[-]])*2
13:36:22 <EgoBot> ​Score for ais523__collision: 16.7
13:36:25 <ais523_> decoys hurting is never a good sign
13:36:29 <ais523_> !bfjoust collision >>>--(>>>[(>[+++++[-]])*20])*8(>[+++++[-]])*2
13:36:32 <EgoBot> ​Score for ais523__collision: 16.3
13:36:36 <ais523_> but in this case, seems I just have to put them a long way from the flag
13:36:42 <ais523_> for reasons I don't fully understand
13:36:48 <ais523_> !bfjoust collision >>>(->>>[(>[+++++[-]])*20])*8(>[+++++[-]])*2
13:36:51 <EgoBot> ​Score for ais523__collision: 18.8
13:36:58 <ais523_> whoo, trails help!
13:37:02 <ais523_> !bfjoust collision >>>(->>+>[(>[+++++[-]])*20])*8(>[+++++[-]])*2
13:37:05 <EgoBot> ​Score for ais523__collision: 20.3
13:37:23 <ais523_> !bfjoust collision >>>(->>++>[(>[+++++[-]])*20])*8(>[+++++[-]])*2
13:37:25 <EgoBot> ​Score for ais523__collision: 21.9
13:37:31 <ais523_> !bfjoust collision >>>(-->>++>[(>[+++++[-]])*20])*8(>[+++++[-]])*2
13:37:34 <EgoBot> ​Score for ais523__collision: 22.5
13:37:43 <ais523_> !bfjoust collision >>>(-->+>++>[(>[+++++[-]])*20])*8(>[+++++[-]])*2
13:37:46 <EgoBot> ​Score for ais523__collision: 24.4
13:37:55 <ais523_> I'm expecting that to hurt
13:37:57 <ais523_> but it didn't
13:38:09 <ais523_> !bfjoust collision >>>(-->+>++>[(>[+++++[-]])*20]-----)*8(>[+++++[-]])*2
13:38:12 <EgoBot> ​Score for ais523__collision: 22.3
13:38:17 <ais523_> !bfjoust collision >>>(-->+>++>[(>[+++++[-]])*20]--)*8(>[+++++[-]])*2
13:38:20 <EgoBot> ​Score for ais523__collision: 23.3
13:38:25 <ais523_> !bfjoust collision >>>(>+>++>[(>[+++++[-]])*20]--)*8(>[+++++[-]])*2
13:38:28 <EgoBot> ​Score for ais523__collision: 23.7
13:38:38 <ais523_> !bfjoust collision >>>(-->+>+++>[(>[+++++[-]])*20])*8(>[+++++[-]])*2
13:38:41 <EgoBot> ​Score for ais523__collision: 25.3
13:38:49 <ais523_> !bfjoust collision >>>(-->+>++++>[(>[+++++[-]])*20])*8(>[+++++[-]])*2
13:38:52 <EgoBot> ​Score for ais523__collision: 23.9
13:38:56 <ais523_> !bfjoust collision >>>(-->>++++>[(>[+++++[-]])*20])*8(>[+++++[-]])*2
13:38:59 <EgoBot> ​Score for ais523__collision: 21.3
13:39:04 <ais523_> ?
13:39:10 <ais523_> !bfjoust collision >>>(->->++++>[(>[+++++[-]])*20])*8(>[+++++[-]])*2
13:39:13 <EgoBot> ​Score for ais523__collision: 23.3
13:39:20 <ais523_> !bfjoust collision >>>(-->+>+++>[(>[+++++[-]])*20])*8(>[+++++[-]])*2
13:39:23 <EgoBot> ​Score for ais523__collision: 25.3
13:39:36 <ais523_> oh right, putting too many +s there just speeds up enemy offset clears on one polarity
13:41:52 <ais523_> !bfjoust collision >>>(-->+>+++>[(>[+++++[-]])*20])*7(>[+++++[-]])*5
13:41:55 <EgoBot> ​Score for ais523__collision: 24.9
13:42:11 <ais523_> !bfjoust collision >>>(-->+>+++>[(>[+++++[-]])*20])*6(>[+++++[-]])*8
13:42:14 <EgoBot> ​Score for ais523__collision: 24.4
13:42:47 <CakeProphet> Says a lot about how retarded WE (at least some of us ) in the U.S. are when a people that still has Kings and Queens
13:42:50 <CakeProphet> believes in and practices evolution.
13:42:53 <CakeProphet> --comment on NPR article
13:43:03 * CakeProphet refuses to participate in evolution.
13:43:03 <ais523_> !bfjoust collision >>>(-->+>+++>[(>[+++++[-]])*20])*6(<<(+)*40)*6(>)*18(>[+++++[-]])*8
13:43:06 <EgoBot> ​Score for ais523__collision: 19.8
13:43:16 <ais523_> !bfjoust collision >>>(-->+>+++>[(>[+++++[-]])*20])*6(<(-)*40<(+)*40)*6(>)*18(>[+++++[-]])*8
13:43:19 <EgoBot> ​Score for ais523__collision: 19.8
13:43:47 <ais523_> !bfjoust collision >>>(-->+>+++>[(>[+++++[-]])*20])*6(<)*12((-)*100<(+)*100)*3(>)*18(>[+++++[-]])*8
13:43:50 <EgoBot> ​Score for ais523__collision: 24.2
13:44:29 <ais523_> !bfjoust collision >>>(-->+>+++>[(>[+++++[-]])*20])*5(<)*9((-)*100<(+)*100)*3(>)*15(>[+++++[-]])*8
13:44:32 <EgoBot> ​Score for ais523__collision: 20.5
13:44:37 <ais523_> !bfjoust collision >>>(-->+>+++>[(>[+++++[-]])*20])*6(<)*12((-)*100<(+)*100)*3(>)*18(>[+++++[-]])*8
13:44:40 <EgoBot> ​Score for ais523__collision: 24.2
13:44:48 <ais523_> !bfjoust collision >>>(-->+>+++>[(>[+++++[-]])*20])*7(<)*12((-)*100<(+)*100)*3(>)*18(>[+++++[-]])*5
13:44:51 <EgoBot> ​Score for ais523__collision: 25.3
13:45:35 <ais523_> I suspect the next improvement is a better clear loop
13:45:54 <ais523_> !bfjoust collision >>>(-->+>+++>[(>[-[++++++[-]]])*20])*7(<)*12((-)*100<(+)*100)*3(>)*18(>[+++++[-]])*5
13:45:58 <EgoBot> ​Score for ais523__collision: 20.7
13:46:09 <ais523_> !bfjoust collision >>>(-->+>+++>[(>[-[++++[-]]])*20])*7(<)*12((-)*100<(+)*100)*3(>)*18(>[+++++[-]])*5
13:46:12 <EgoBot> ​Score for ais523__collision: 18.1
13:46:17 <ais523_> !bfjoust collision >>>(-->+>+++>[(>[+++++[-]])*20])*7(<)*12((-)*100<(+)*100)*3(>)*18(>[+++++[-]])*5
13:46:20 <EgoBot> ​Score for ais523__collision: 25.3
13:46:27 <ais523_> but I need to see what sort of clear is needed
13:48:28 -!- Ngevd has joined.
13:48:55 <Ngevd> Ah, I'm alive
13:49:18 <Ngevd> <ais523> Ngevd: is it actually written in Piet? <-- going to be. I've only barely started, still learning the protocol
13:49:31 <Ngevd> ais523_ ^^^
13:50:04 <ais523_> !bfjoust collision >>>(>>>[(>[+++++[-]])*20])*7(>[+++++[-]])*5
13:50:07 <EgoBot> ​Score for ais523__collision: 13.6
13:50:15 <ais523_> !bfjoust collision >>>(-->+>+++>[(>[+++++[-]])*20])*7(<)*12((-)*100<(+)*100)*3(>)*18(>[+++++[-]])*5
13:50:18 <EgoBot> ​Score for ais523__collision: 25.3
13:50:32 <ais523_> !bfjoust collision >>>(+>+++>[(>[+++++[-]])*20])*10(<)*13((-)*100<(+)*100)*3(>)*18(>[+++++[-]])*5
13:50:35 <EgoBot> ​Score for ais523__collision: 29.5
13:50:56 <ais523_> !bfjoust collision >>>(+>+++>[(>[+++++[-]])*20])*10(<)*11((-)*100<(+)*100)*3(>)*17(>[+++++[-]])*6
13:50:59 <EgoBot> ​Score for ais523__collision: 29.8
13:51:47 <ais523_> !bfjoust collision >>>(->+++>[(>[+++++[-]])*20])*10(<)*11((-)*100<(+)*100)*3(>)*17(>[+++++[-]])*6
13:51:50 <EgoBot> ​Score for ais523__collision: 29.6
13:51:56 <ais523_> !bfjoust collision >>>(--+>++>[(>[+++++[-]])*20])*10(<)*11((-)*100<(+)*100)*3(>)*17(>[+++++[-]])*6
13:51:59 <EgoBot> ​Score for ais523__collision: 29.5
13:52:05 <ais523_> !bfjoust collision >>>(-->++>[(>[+++++[-]])*20])*10(<)*11((-)*100<(+)*100)*3(>)*17(>[+++++[-]])*6
13:52:08 <EgoBot> ​Score for ais523__collision: 30.0
13:52:19 <ais523_> my guess is that 2 is the sweet spot for trails
13:53:14 <ais523_> !bfjoust collision >>>(-->++>[(>[+++++[-]])*20])*10(<)*9(<<(-)*100)*3(>(+)*100>)*3(>)*9(>[+++++[-]])*6
13:53:17 <EgoBot> ​Score for ais523__collision: 29.5
13:53:24 <ais523_> !bfjoust collision >>>(-->++>[(>[+++++[-]])*20])*10(<)*9(<<(+)*100)*3(>(-)*100>)*3(>)*9(>[+++++[-]])*6
13:53:27 <EgoBot> ​Score for ais523__collision: 29.5
13:53:36 <ais523_> !bfjoust collision >>>(-->++>[(>[+++++[-]])*20])*10(<)*9(<<(+)*100)*4(>(-)*100>)*4(>)*9(>[+++++[-]])*6
13:53:39 <EgoBot> ​Score for ais523__collision: 29.1
13:53:55 <ais523_> !bfjoust collision >>>(-->++>[(>[+++++[-]])*20])*10(<)*9(<(+)*100<)*3((-)*100>>)*3(>)*9(>[+++++[-]])*6
13:53:59 <EgoBot> ​Score for ais523__collision: 29.5
13:54:31 <ais523_> !bfjoust collision >>>(-->++>[(>[+++++[-]])*20])*11(<)*9(<(+)*100<)*3((-)*100>>)*3(>)*9(>[+++++[-]])*4
13:54:34 <EgoBot> ​Score for ais523__collision: 29.9
13:54:42 <ais523_> !bfjoust collision >>>(-->++>[(>[+++++[-]])*20])*12(<)*9(<(+)*100<)*3((-)*100>>)*3(>)*9(>[+++++[-]])*2
13:54:45 <EgoBot> ​Score for ais523__collision: 30.4
13:54:53 <ais523_> !bfjoust collision >>>(-->++>[(>[+++++[-]])*20])*13
13:54:56 <EgoBot> ​Score for ais523__collision: 30.4
13:55:08 <ais523_> !bfjoust collision >>>(-->++>[(>[+++++[-]])*20])*12(>[+++++[-]])*2
13:55:11 <EgoBot> ​Score for ais523__collision: 30.4
13:55:21 <ais523_> heh, I guess that case never really comes up
13:56:00 <Ngevd> What does a channel message look like to a client?
13:56:26 <ais523_> Ngevd: privmsg to channel?
13:56:29 <ais523_> like the ones I'm sending now
13:57:02 <Ngevd> I'm not sure
13:57:22 <ais523_> !bfjoust collision >>>(-)*20<(-)*40<(+)*60<(-)*80>>>(-->++>[(>[+++++[-]])*20])*12(>[+++++[-]])*2
13:57:25 <EgoBot> ​Score for ais523__collision: 34.8
13:57:30 <ais523_> let's try a slower version of the same idea
13:57:36 <Ngevd> Nice one
13:57:41 <ais523_> !bfjoust collision >>>(-)*20<(-)*40<(+)*60<(-)*80>>>(-->++>++>[(>[+++++[-]])*20])*8(>[+++++[-]])*2
13:57:44 <Ngevd> hang on, is a high score good?
13:57:45 <EgoBot> ​Score for ais523__collision: 37.3
13:57:49 <ais523_> yes, higher is better
13:58:04 <ais523_> !bfjoust collision >+>+>(-)*20<(-)*40<(+)*60<(-)*80>>>(-->++>++>[(>[+++++[-]])*20])*8(>[+++++[-]])*2
13:58:07 <EgoBot> ​Score for ais523__collision: 34.6
13:58:18 <ais523_> !bfjoust collision >>>>+<(-)*20<(-)*40<(+)*60<(-)*80>>>(-->++>++>[(>[+++++[-]])*20])*8(>[+++++[-]])*2
13:58:21 <EgoBot> ​Score for ais523__collision: 32.7
13:58:29 <ais523_> !bfjoust collision >>>(-)*20<(-)*40<(+)*60<(-)*80>>>(-->++>++>[(>[+++++[-]])*20])*8(>[+++++[-]])*2
13:58:32 <EgoBot> ​Score for ais523__collision: 37.3
13:58:41 <ais523_> !bfjoust collision >>>(-)*20<(-)*40<(+)*40<(-)*40>>>(-->++>++>[(>[+++++[-]])*20])*8(>[+++++[-]])*2
13:58:44 <EgoBot> ​Score for ais523__collision: 37.4
13:58:57 <ais523_> !bfjoust collision >>>(-)*20<(-)*40<(+)*40<(-)*20>>>(-->++>++>[(>[+++++[-]])*20])*8(>[+++++[-]])*2
13:59:00 <EgoBot> ​Score for ais523__collision: 37.0
13:59:07 <ais523_> !bfjoust collision >>>(-)*30<(-)*40<(+)*40<(-)*20>>>(-->++>++>[(>[+++++[-]])*20])*8(>[+++++[-]])*2
13:59:10 <EgoBot> ​Score for ais523__collision: 37.7
13:59:11 -!- derdon has joined.
13:59:21 <ais523_> !bfjoust collision >>>(-)*30<(-)*30<(+)*30<(-)*30>>>(-->++>++>[(>[+++++[-]])*20])*8(>[+++++[-]])*2
13:59:25 <EgoBot> ​Score for ais523__collision: 38.5
13:59:40 <ais523_> !bfjoust collision >>>(-)*30<(-)*30<(+)*30<(-)*30>>>(-->++>++>++>[(>[+++++[-]])*20])*6(>[+++++[-]])*2
13:59:43 <EgoBot> ​Score for ais523__collision: 33.2
13:59:58 <ais523_> !bfjoust collision >>>(-)*30<(-)*30<(+)*30<(-)*30>>>>(-->++>++>++>[(>[+++++[-]])*20])*6(>[+++++[-]])*2
14:00:01 <EgoBot> ​Score for ais523__collision: 36.1
14:00:16 <ais523_> !bfjoust collision >>>(-)*30<(-)*30<(+)*30<(-)*30>>>>>(-->++>++>[(>[+++++[-]])*20])*8(>[+++++[-]])*2
14:00:19 <EgoBot> ​Score for ais523__collision: 38.4
14:00:25 <ais523_> !bfjoust collision >>>(-)*30<(-)*30<(+)*30<(-)*30>>>>>(>>>[(>[+++++[-]])*20])*8(>[+++++[-]])*2
14:00:28 <EgoBot> ​Score for ais523__collision: 39.0
14:00:40 <ais523_> this strategy is looking promising
14:00:49 <ais523_> and it's still with a hastily thrown-together clear loop
14:02:20 <elliott_> Haha, projects cannot ship source tarballs with their Arch PKGBUILD file, I think
14:03:18 <elliott_> Because PKGBUILDs contain checksums of the tarballs
14:03:56 <ais523_> !bfjoust collision >>>(-)*30<(-)*30<(+)*30<(-)*30>>>>>(>>>[(>[+[+[+[----[-[-[(-)*100(-)]]]]]]])*20])*8(>[+++++[-]])*2
14:03:59 <EgoBot> ​Score for ais523__collision: 10.8
14:04:08 <ais523_> haha, reverse offset clear does /that/ badly?
14:04:14 <ais523_> !bfjoust collision >>>(-)*30<(-)*30<(+)*30<(-)*30>>>>>(>>>[(>[+++++[-]])*20])*8(>[+++++[-]])*2
14:04:17 <EgoBot> ​Score for ais523__collision: 39.0
14:04:34 <ais523_> !bfjoust collision >>>(-)*30<(-)*30<(+)*30<(-)*30>>>>>(>>>[(>[++++++[-]])*20])*8(>[++++++[-]])*2
14:04:37 <EgoBot> ​Score for ais523__collision: 39.5
14:04:37 <ais523_> I suppose that makes sense
14:04:53 <ais523_> !bfjoust collision >>>(-)*30<(-)*30<(+)*30<(-)*30>>>>>(>>>[(>[(+)*7[-]])*20])*8(>[(+)*7[-]])*2
14:04:56 <EgoBot> ​Score for ais523__collision: 39.4
14:05:02 <ais523_> !bfjoust collision >>>(-)*30<(-)*30<(+)*30<(-)*30>>>>>(>>>[(>[(+)*10[-]])*20])*8(>[(+)*10[-]])*2
14:05:05 <EgoBot> ​Score for ais523__collision: 43.5
14:05:09 <elliott_> Actually, hmm
14:05:12 <elliott_> I'm not sure how to handle this at all
14:05:17 <ais523_> !bfjoust collision >>>(-)*30<(-)*30<(+)*30<(-)*30>>>>>(>>>[(>[(+)*12[-]])*20])*8(>[(+)*12[-]])*2
14:05:20 <EgoBot> ​Score for ais523__collision: 40.0
14:05:25 <ais523_> !bfjoust collision >>>(-)*30<(-)*30<(+)*30<(-)*30>>>>>(>>>[(>[(+)*15[-]])*20])*8(>[(+)*15[-]])*2
14:05:28 <EgoBot> ​Score for ais523__collision: 42.3
14:05:41 <ais523_> !bfjoust collision >>>(-)*30<(-)*30<(+)*30<(-)*30>>>>>(>>>[(>[(+)*18[-]])*20])*8(>[(+)*18[-]])*2
14:05:44 <EgoBot> ​Score for ais523__collision: 40.7
14:05:51 <ais523_> !bfjoust collision >>>(-)*30<(-)*30<(+)*30<(-)*30>>>>>(>>>[(>[(+)*10[-]])*20])*8(>[(+)*10[-]])*2
14:05:54 <EgoBot> ​Score for ais523__collision: 43.5
14:06:32 <ais523_> wow, it's eighth now
14:06:34 <ais523_> just above undermine
14:06:49 <ais523_> I seem to have a habit of inventing new strategies and running them up to the bottom of the top ten
14:07:04 <Ngevd> Explain how this works
14:07:28 <ais523_> how what works? the BF Joust program?
14:07:31 <Ngevd> Yes
14:08:01 <ais523_> set up decoys, adjust flag, then check every third cell for the opponent's decoys, when you find it move forward one cell and start a clear loop
14:08:15 <ais523_> the idea is that it's going to skip, "randomly" based on the tape length, 0, 1, or 2 decoys
14:08:22 <ais523_> which gives it an advantage over an opponent who doesn't skip any
14:08:35 <ais523_> !bfjoust collision >>>(-)*30<(-)*30<(+)*30<(-)*30>>>>>>(>>>[(>[(+)*10[-]])*20])*8(>[(+)*10[-]])*1
14:08:38 <EgoBot> ​Score for ais523__collision: 44.2
14:08:47 <ais523_> also, I just noticed an off-by-one, even better
14:08:59 <ais523_> !bfjoust collision >>>(-)*30<(-)*30<(+)*30<(-)*30>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*10[-]])*4
14:09:02 <EgoBot> ​Score for ais523__collision: 44.2
14:09:19 <ais523_> !bfjoust collision >>>(-)*30<(-)*30<(+)*30<(-)*30>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4
14:09:22 <EgoBot> ​Score for ais523__collision: 44.2
14:09:23 <CakeProphet> ais523_: how does that not suicide on some playing fields?
14:09:32 <CakeProphet> if you check every third cell.
14:09:37 <ais523_> CakeProphet: most programs set decoys near their flags
14:09:44 <ais523_> it suicides if the opponent sets fewer than two decoys
14:09:47 <ais523_> but how many programs do that?
14:09:59 <Ngevd> My one, I think
14:10:09 <ais523_> so the basic idea of BF Joust, is that anything that opponents do consistently, you can take advantage of
14:10:15 <ais523_> a program that sets no decoys typically won't do well
14:10:16 <CakeProphet> most of my bfjoust programs are some kind of rush clear-everything program.
14:10:23 <ais523_> thus, you may as well assume that opposing programs tend to set decoys
14:10:56 <ais523_> !bfjoust collision >>>(-)*30<(-)*30<(+)*30<(-)*30>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>)*99
14:10:59 <EgoBot> ​Score for ais523__collision: 44.2
14:11:04 <Ngevd> Aww, my one isn't on the scoreboard any more
14:11:07 <ais523_> yep, I /thought/ that last bit made no difference
14:11:12 <CakeProphet> ais523_: the real question is: would this beat space elevator?
14:11:18 <ais523_> !bfjoust collision >>>(-)*30<(-)*30<(+)*30<(-)*30>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4
14:11:21 <EgoBot> ​Score for ais523__collision: 44.2
14:11:47 <ais523_> ais523__collision.bfjoust vs quintopia_space_elevator.bfjoust <><<>>>><<<<<<><>>><> <><<>>>><>><<<><>>><> -2 ais523__collision.bfjoust wins.
14:11:57 <ais523_> CakeProphet: it does beat space_elevator, /just/
14:12:25 <CakeProphet> admirable work.
14:12:52 <CakeProphet> surely you could also suicide on some decoy patterns.
14:13:11 <ais523_> whoops, I just remembered why I don't open space_elevator in egojsout
14:13:16 <ais523_> CakeProphet: yes, but nobody uses them
14:13:18 <ais523_> perhaps they should
14:13:54 <CakeProphet> ais523_: space_elevator is the most beautiful jouster in terms of code elegance.
14:14:02 <ais523_> you think so?
14:14:06 <CakeProphet> definitely.
14:14:13 <ais523_> although I have a tendency to make huge ridiculous jousters
14:14:16 <CakeProphet> it even provides comments!
14:14:21 <ais523_> I have a soft spot for the short ones
14:14:26 <ais523_> and my long ones tend to be commented too
14:15:01 <CakeProphet> I'm guessing [ and ] jumps don't count as turns right?
14:15:24 <CakeProphet> if they did the complex logic of large jousters would be at a disadvantage to dumb rushers.
14:15:30 <ais523_> each of [ and ] takes one step
14:15:32 <ais523_> that's really fundamental
14:15:36 <CakeProphet> ...oh
14:15:38 <ais523_> otherwise there's no reason not to put [ and ] everywhere
14:15:55 <ais523_> they aren't at a disadvantage to dumb rushers, because dumb rushers are easily tricked
14:16:09 <ais523_> due to being dumb
14:16:41 <CakeProphet> seems like they'd be moving too fast for you to do anything about them if your code has 20 nested loops.
14:16:53 <ais523_> aha, that's the issue
14:17:02 <ais523_> a dumb rusher has issues determining if it's found the flag
14:17:12 <ais523_> doing something like [-] can hold you up for 510 cycles, worst-case
14:17:23 <ais523_> precisely because of the time penalty of doing ]
14:17:42 <CakeProphet> ah right
14:17:52 <CakeProphet> and there'd be no difference between the different kinds of clears otherwise
14:17:58 <CakeProphet> aside from the nops
14:18:15 <ais523_> !bfjoust collision >>>(-)*30<(-)*20<(+)*20<(-)*30>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4
14:18:18 <EgoBot> ​Score for ais523__collision: 40.7
14:18:28 <ais523_> !bfjoust collision >>>(-)*30<(-)*30<(+)*40<(-)*30>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4
14:18:31 <EgoBot> ​Score for ais523__collision: 41.4
14:18:43 <ais523_> !bfjoust collision >>>(-)*33<(-)*33<(+)*33<(-)*33>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4
14:18:46 <EgoBot> ​Score for ais523__collision: 43.7
14:18:47 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
14:18:57 <ais523_> !bfjoust collision >>>(-)*33<(-)*35<(+)*35<(-)*22>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4
14:19:00 <EgoBot> ​Score for ais523__collision: 41.6
14:19:05 <ais523_> just experimenting a bit
14:19:14 <ais523_> !bfjoust collision >>>(-)*31<(-)*31<(+)*31<(-)*31>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4
14:19:18 <EgoBot> ​Score for ais523__collision: 44.4
14:19:28 <Ngevd> What should Pietbot do...
14:19:28 <ais523_> !bfjoust collision >>>(-)*32<(-)*32<(+)*32<(-)*32>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4
14:19:32 <EgoBot> ​Score for ais523__collision: 43.7
14:19:37 <ais523_> implement an esolang of your choice
14:19:42 <ais523_> !bfjoust collision >>>(-)*32<(-)*32<(+)*32<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4
14:19:45 <EgoBot> ​Score for ais523__collision: 44.4
14:19:57 <ais523_> !bfjoust collision >>>(-)*33<(-)*33<(+)*33<(-)*22>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4
14:20:00 <EgoBot> ​Score for ais523__collision: 42.3
14:20:11 <CakeProphet> Ngevd: run Piet programs via IRC command lines.
14:20:11 <ais523_> !bfjoust collision >>>(-)*34<(-)*34<(+)*34<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4
14:20:14 <EgoBot> ​Score for ais523__collision: 43.4
14:20:24 <ais523_> !bfjoust collision >>>(-)*32<(-)*32<(+)*32<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4
14:20:27 <EgoBot> ​Score for ais523__collision: 44.4
14:20:34 <ais523_> let's stick with that version for the decoy setup
14:20:59 <ais523_> !bfjoust collision >>>>(-)*32<(-)*32<(+)*32<(-)*32<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4
14:21:02 <EgoBot> ​Score for ais523__collision: 38.8
14:21:08 <CakeProphet> I'm assuming by using the same name over and over you're overwriting the old ones and therefore not jousting the 20 million old iterations of your program?
14:21:21 <ais523_> oh right, that loses to ill_bet_you_have_four_decoys
14:21:22 <ais523_> by having four decoys
14:21:25 <ais523_> CakeProphet: that's it
14:21:27 <ais523_> !bfjoust collision >>>(-)*32<(-)*32<(+)*32<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4
14:21:31 <EgoBot> ​Score for ais523__collision: 44.4
14:22:02 <ais523_> !bfjoust collision >>>>>>(-)*32<<(-)*32<<(+)*32<<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4
14:22:05 <EgoBot> ​Score for ais523__collision: 35.5
14:22:11 <ais523_> I was just curious
14:22:17 <ais523_> !bfjoust collision >>>>>>(-)*32<-<(-)*32<-<(+)*32<-<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4
14:22:20 <EgoBot> ​Score for ais523__collision: 35.9
14:22:24 <ais523_> !bfjoust collision >>>(-)*32<(-)*32<(+)*32<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4
14:22:28 <EgoBot> ​Score for ais523__collision: 44.4
14:22:35 <ais523_> I just have no idea why
14:22:35 <ais523_> seems like that is indeed the perfect decoy setup
14:23:40 <CakeProphet> tried using different cell skip intervals?
14:23:49 <CakeProphet> perhaps a non-constant interval?
14:24:36 <ais523_> no, but given the current competitors on the hill it's unlikely to make much difference
14:24:51 <ais523_> pretty much everyone checks for small decoys behind large ones nowadays
14:25:18 <CakeProphet> er I was referring to your offense.
14:25:24 <ais523_> oh, right
14:25:36 <ais523_> I've tried different intervals, but not a varying one
14:25:49 <ais523_> I don't see why a varying one would help, though, given the tape length randomization
14:25:53 -!- Darth_Cliche has joined.
14:25:58 -!- derrik has joined.
14:26:49 <ais523_> I don't think I can get collision to the top of the hill, anyway; its strategy is fundamentally beaten by slowpoke's
14:27:12 <CakeProphet> ais523_: I don't see how it would hurt though. basically the smaller tape lengths cut off your cell skip function.
14:27:16 <ais523_> and FFSPG for much the same reason (they're similar programs, even if they were invented independently)
14:27:21 <ais523_> CakeProphet: I don't think it'd hurt either
14:27:27 <ais523_> except that you're using a suboptimal interval
14:27:38 <ais523_> I suppose, on longer tapes, the opponent will have had more time to set up decoys…
14:28:06 <CakeProphet> yes that's what I mean. the interval can change once it gets into longer tape lengths.
14:28:11 <ais523_> !bfjoust collision >>>(-)*32<(-)*32<(+)*32<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*3(>>>>[(>[(+)*10[-]])*20])*3(>[(+)*100[+]])*4
14:28:14 <EgoBot> ​Score for ais523__collision: 38.6
14:28:15 <ais523_> let's try it
14:28:18 -!- Darth_Cliche has quit (Client Quit).
14:28:25 <ais523_> it didn't really seem to help…
14:28:45 <CakeProphet> you only tried one. :P
14:28:55 <ais523_> !bfjoust collision >>>(-)*32<(-)*32<(+)*32<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*3(>>>>[([(+)*10[-]])*20])*3(>[(+)*100[+]])*4
14:28:56 <CakeProphet> WHAT KIND OF BFJOUST SCIENCE IS THAT.
14:28:58 <EgoBot> ​Score for ais523__collision: 29.3
14:29:03 <ais523_> whoops
14:29:06 <ais523_> !bfjoust collision >>>(-)*32<(-)*32<(+)*32<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*3(>>>>[([(+)*10[-]]>)*20])*3(>[(+)*100[+]])*4
14:29:09 <EgoBot> ​Score for ais523__collision: 40.7
14:29:27 <ais523_> I think it's just falling off the tape too much
14:29:36 <ais523_> the vast majority of programs don't set more decoys on longer tapes
14:29:40 <CakeProphet> ah.
14:29:56 <ais523_> !bfjoust collision >>>(-)*32<(-)*32<(+)*32<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4
14:29:59 <EgoBot> ​Score for ais523__collision: 44.4
14:30:23 <ais523_> now I'll try something a bit different, it'll probably hurt but might help
14:30:59 <ais523_> !bfjoust collision >>>(-)*32<(-)*32<(+)*32<(-)*28>>>>>>(>>>[-[-[+++[+[(>[(+)*10[-]])*20]]]]])*7(>[(+)*100[+]])*4
14:31:02 <EgoBot> ​Score for ais523__collision: 36.7
14:31:08 <ais523_> yep, just loses too much speed
14:31:12 -!- augur has quit (Remote host closed the connection).
14:31:25 <ais523_> !bfjoust collision >>>(-)*32<(-)*32<(+)*32<(-)*28>>>>>>(>>>[-[-[+++[+[(>[(+)*10[-]])*20]]]]<<])*7(>[(+)*100[+]])*4
14:31:28 <EgoBot> ​Score for ais523__collision: 36.9
14:31:46 <ais523_> !bfjoust collision >>>(-)*32<(-)*32<(+)*32<(-)*28>>>>>>(>>>[-[-[+++[+[(>[(+)*10[-]])*20]]]]>])*7(>[(+)*100[+]])*4
14:31:50 <EgoBot> ​Score for ais523__collision: 41.7
14:32:02 <ais523_> it's not a bad tactic, just not as good as doing it the normal way
14:32:10 <ais523_> !bfjoust collision >>>(-)*32<(-)*32<(+)*32<(-)*28>>>>>>(>>>[-[-[+++[+[([(+)*10[-]])*20]]]]>])*7(>[(+)*100[+]])*4
14:32:11 <CakeProphet> ais523_: on a longer tape the optimal thing to do would be to skip a large number of cells early, but on a short tape this is a bad idea.
14:32:13 <EgoBot> ​Score for ais523__collision: 30.0
14:32:21 <ais523_> !bfjoust collision >>>(-)*32<(-)*32<(+)*32<(-)*28>>>>>>(>>>[-[-[+++[+[([(+)*10[-]]>)*20]]]]>])*7(>[(+)*100[+]])*4
14:32:24 <EgoBot> ​Score for ais523__collision: 42.3
14:32:24 <CakeProphet> so... yeah. varying skip distance probably can't work for all tape lengths.
14:32:27 <ais523_> CakeProphet: right
14:33:22 <ais523_> !bfjoust collision >>>(-)*32<(-)*32<(+)*32<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4
14:33:25 <EgoBot> ​Score for ais523__collision: 44.4
14:33:36 <ais523_> it's beginning to reach the point where I'll have to start targeting specific programs to do better
14:34:03 <CakeProphet> slowpoke is a good start.
14:34:22 <ais523_> slowpoke's unbeatable with this strategy
14:34:41 <ais523_> it lays a large trail, which nullifies the advantage of skipping forwards
14:34:49 <ais523_> and detecting it would /also/ nullify the advantage of skipping forwards
14:35:24 <CakeProphet> ais523_: skip at distances that are a reverse of a fibonacci subsequence
14:35:26 <CakeProphet> ...and, uh,
14:35:27 <CakeProphet> well
14:35:31 <CakeProphet> that's the extent of my idea
14:35:40 <CakeProphet> I haven't thought anything through. :P
14:36:30 <ais523_> !bfjoust collision >>>>>>(+)*32<(-)*32<(-)*32<(-)*32<(-)*32<(+)*32<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4
14:36:33 <EgoBot> ​Score for ais523__collision: 40.3
14:36:45 <ais523_> !bfjoust collision >>>>>>(+)*32<(+)*32<(-)*32<(-)*32<(-)*32<(+)*32<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4
14:36:48 <EgoBot> ​Score for ais523__collision: 41.6
14:36:56 <ais523_> !bfjoust collision >>>>+>+>(+)*32<(+)*32<(-)*32<(-)*32<(-)*32<(+)*32<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4
14:36:59 <EgoBot> ​Score for ais523__collision: 42.8
14:37:07 <ais523_> I'm trying a really heavy decoy setup
14:37:21 <CakeProphet> ais523_: try a fiboacci sequence decoy setup
14:37:23 <ais523_> !bfjoust collision >>>>+>+>->(-)*32<(+)*32<(+)*32<(-)*32<(-)*32<(-)*32<(+)*32<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4
14:37:26 <EgoBot> ​Score for ais523__collision: 42.9
14:37:28 <CakeProphet> everything is better when it's a fibonacci sequence.
14:37:34 <ais523_> !bfjoust collision >>>>+>+>->(-)*12<(+)*32<(+)*32<(-)*32<(-)*32<(-)*32<(+)*32<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4
14:37:37 <EgoBot> ​Score for ais523__collision: 42.0
14:38:07 <ais523_> !bfjoust collision >>>>+>+>->(-)*32<(+)*32<(+)*32<(-)*60<(-)*60<(-)*60<(+)*60<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4
14:38:10 <EgoBot> ​Score for ais523__collision: 40.4
14:38:27 <CakeProphet> les 32 32 32 more 1 1 2 3 5 8 13
14:38:27 <ais523_> !bfjoust collision >>>>+>+>->(-)*32<(+)*32<(+)*32<<<<<(-)*28>>>>(-)*60<(-)*60<(-)*60<(+)*60>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4
14:38:31 <EgoBot> ​Score for ais523__collision: 41.3
14:38:34 <CakeProphet> less
14:39:16 <ais523_> !bfjoust collision >>>>>>(+)*5<(+)*8<(-)*13<(-)*21<(-)*34<(+)*45<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4
14:39:19 <EgoBot> ​Score for ais523__collision: 37.8
14:39:22 <CakeProphet> heh
14:39:23 <ais523_> happy? (the 28 is on the flag)
14:39:26 <CakeProphet> NO REVERSE IT.
14:39:37 <ais523_> err, that's really stupid the way decoy setups work, but OK
14:39:43 -!- copumpkin has joined.
14:39:53 <Ngevd> brb
14:39:54 <ais523_> !bfjoust collision >>>>>>(+)*45<(+)*34<(-)*21<(-)*13<(-)*8<(+)*5<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4
14:39:54 <CakeProphet> ais523_: oh, yes it is.
14:39:55 -!- Ngevd has left ("Leaving").
14:39:57 <EgoBot> ​Score for ais523__collision: 34.4
14:40:10 <ais523_> !bfjoust collision >>>(-)*32<(-)*32<(+)*32<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4
14:40:12 <EgoBot> ​Score for ais523__collision: 44.4
14:40:23 <ais523_> there's no reason for the decoys to differ in size at all, that I can see
14:41:03 <CakeProphet> perhaps to spend fewer steps setting them up
14:41:36 <ais523_> !bfjoust collision >>>(-)*5>>>[<<<(-)*27<(-)*32<(+)*32<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4](-)*32<(-)*32<(+)*32<(-)*27<(-)*32<(+)*32<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4
14:41:38 <CakeProphet> also some jousters handle large/small decoys differently, or something.
14:41:39 <EgoBot> ​Score for ais523__collision: 42.9
14:42:02 <ais523_> !bfjoust collision >>>(-)*5>+>+>[<<<(-)*27<(-)*32<(+)*32<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4](-)*32<(-)*32<(+)*32<(-)*27<(-)*32<(+)*32<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4
14:42:05 <EgoBot> ​Score for ais523__collision: 42.6
14:42:29 <ais523_> !bfjoust collision >>>(-)*5>+>->[<<<(-)*27<(-)*32<(+)*32<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4](-)*32<(-)*31<(+)*31<(-)*27<(-)*32<(+)*32<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4
14:42:32 <EgoBot> ​Score for ais523__collision: 43.2
14:42:34 -!- Taneb has joined.
14:42:54 <Taneb> Pietbot is now registered
14:43:26 <ais523_> !bfjoust collision (-)*5>>>>>>[<<<(-)*27<(-)*32<(+)*32<(-)*23>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4](-)*6<(-)*32<(+)*32<(-)*32<(-)*32<(+)*32<(-)*23>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4
14:43:29 <EgoBot> ​Score for ais523__collision: 40.1
14:43:57 <ais523_> !bfjoust collision (-)*5>>>>>>[<<<(-)*27<(-)*32<(+)*32<(-)*23>>>>>>(>>[(>[(+)*10[-]])*20])*10(>[(+)*100[+]])*5](-)*6<(-)*32<(+)*32<(-)*32<(-)*32<(+)*32<(-)*23>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4
14:44:00 <EgoBot> ​Score for ais523__collision: 42.2
14:44:18 <ais523_> !bfjoust collision (-)*5>>>>>>[<<<(-)*27<(-)*32<(+)*32<(-)*23>>>>>>(>>[(>[(+)*10[-]])*20])*10(>[(+)*100[+]])*5](-)*6<(-)*32<(+)*32<(-)*32<(-)*32<(+)*32<(-)*23>>>>>>>>>(>>>[(>[(+)*10[-]])*20])*6(>[(+)*100[+]])*4
14:44:21 <EgoBot> ​Score for ais523__collision: 36.5
14:44:34 <ais523_> !bfjoust collision (-)*5>>>>>>[<<<(-)*27<(-)*32<(+)*32<(-)*23>>>>>>(>>[(>[(+)*10[-]])*20])*10(>[(+)*100[+]])*5](-)*6<(-)*32<(+)*32<(-)*32<(-)*32<(+)*32<(-)*23>>>>>>>(>>>>[(>[(+)*10[-]])*20])*5(>[(+)*100[+]])*4
14:44:37 <EgoBot> ​Score for ais523__collision: 35.5
14:44:45 <ais523_> yep, that isn't really going to work all that well, I think
14:44:53 <ais523_> !bfjoust collision >>>(-)*32<(-)*32<(+)*32<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4
14:44:56 <EgoBot> ​Score for ais523__collision: 44.4
14:45:01 <CakeProphet> probably not enough fibonacci
14:45:23 <ais523_> stop it!
14:45:29 <ais523_> !bfjoust collision >>>(-)*50<(-)*50<(+)*50<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4
14:45:32 <EgoBot> ​Score for ais523__collision: 40.1
14:45:49 <ais523_> !bfjoust collision >>>(-)*32<(-)*100<(+)*100<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4
14:45:52 <EgoBot> ​Score for ais523__collision: 38.7
14:46:13 <CakeProphet> try n!/2
14:46:29 <ais523_> !bfjoust collision >>>(-)*32<(-)*32<(+)*32<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4
14:46:32 <EgoBot> ​Score for ais523__collision: 44.4
14:46:35 <ais523_> I'll just leave it like that until I have any other amazing ideas
14:46:37 -!- derrik has left.
14:46:47 <CakeProphet> > let fac n = product [1..n] in map fac [1..]
14:46:48 <lambdabot> [1,2,6,24,120,720,5040,40320,362880,3628800,39916800,479001600,6227020800,8...
14:47:12 <CakeProphet> > let fac n = product [1..n] in map (div 2 . fac) [1..]
14:47:14 <lambdabot> [2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,...
14:47:22 <CakeProphet> > let fac n = product [1..n] in map (flip div 2 . fac) [1..]
14:47:24 <lambdabot> [0,1,3,12,60,360,2520,20160,181440,1814400,19958400,239500800,3113510400,43...
14:47:31 <CakeProphet> yep. best decoy setup.
14:47:41 -!- ive has joined.
14:47:50 -!- elliott_ has quit (Remote host closed the connection).
14:47:54 <ais523_> no, it isn't; 360 is an utterly mindblowingly stupid size for a decoy
14:48:00 <ais523_> and 2520 is even worse
14:48:09 <ais523_> (making them more than 256 only makes sense as part of a lock algorithm)
14:48:21 <ais523_> (and even then, is generally suboptimal)
14:48:23 <Deewiant> > let fac n = product [1..n] in map (flip mod 256 . flip div 2 . fac) [1..]
14:48:25 <lambdabot> [0,1,3,12,60,104,216,192,192,128,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,...
14:48:43 <ais523_> in fact, outside lock algos, making them more than 128's a bit silly
14:48:49 -!- elliott has joined.
14:48:52 <elliott> It works!
14:48:55 <Deewiant> > let fac n = product [1..n] in map (flip mod 128 . flip div 2 . fac) [1..]
14:48:57 <lambdabot> [0,1,3,12,60,104,88,64,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0...
14:48:58 <elliott> No it doesn't!
14:48:58 <ais523_> It = ?
14:49:17 <CakeProphet> > let fac n = product [1..n] in map (\x -> fac x - fac (x-1)) [1..]
14:49:18 <lambdabot> [0,1,4,18,96,600,4320,35280,322560,3265920,36288000,439084800,5748019200,80...
14:49:45 <Taneb> Hurrah!
14:49:52 <Taneb> Oh no!
14:49:56 <ais523_> that isn't a good decoy setup either
14:49:57 <ais523_> elliott: ?
14:50:05 <CakeProphet> > let fac n = product [1..n] in map (\x -> (fac x - fac (x-1))/2) [1..]
14:50:06 <lambdabot> [0.0,0.5,2.0,9.0,48.0,300.0,2160.0,17640.0,161280.0,1632960.0,1.8144e7,2.19...
14:50:11 <Deewiant> > let fac n = product [1..n] in map (flip mod 128 . liftM2 (-) fac (fac . pred)) [1..]
14:50:13 <lambdabot> [0,1,4,18,96,88,96,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0...
14:50:22 <elliott> [elliott@dinky ~]$ ls -lh /etc/rc.d/noidentd
14:50:22 <elliott> -rwxr-xr-x 1 root root 890 Oct 28 15:46 /etc/rc.d/noidentd
14:50:22 <elliott> [elliott@dinky ~]$ cat /etc/rc.d/noinetd
14:50:22 <elliott> cat: /etc/rc.d/noinetd: No such file or directory
14:50:24 <elliott> what the /fuck/?
14:50:25 <CakeProphet> > let fac n = product [1..n] in map (\x -> (fac x - fac (x-1)) `div` 2) [1..]
14:50:27 <lambdabot> [0,0,2,9,48,300,2160,17640,161280,1632960,18144000,219542400,2874009600,404...
14:50:38 <Deewiant> elliott: noidentd != noinetd
14:50:44 <elliott> Ah
14:50:47 <elliott> Quite so
14:51:00 -!- elliott has quit (Client Quit).
14:51:04 -!- elliott has joined.
14:51:10 <CakeProphet> > let fac n = sum [1..n] in map fac [1..]
14:51:11 <lambdabot> [1,3,6,10,15,21,28,36,45,55,66,78,91,105,120,136,153,171,190,210,231,253,27...
14:51:14 <ais523_> aha, no ~
14:51:25 -!- elliott has quit (Remote host closed the connection).
14:51:27 <ais523_> but given that you're cloaked, the identd doesn't make a whole lot of sense
14:51:42 <CakeProphet> ais523_: I was under the impression that have to use interesting mathematical sequences to win at bfjoust
14:51:45 <Deewiant> > let fac n = sum [1..n] in map (flip mod 128 . fac) [1..]
14:51:47 <CakeProphet> I guess I misunderstand the game.
14:51:47 <lambdabot> [1,3,6,10,15,21,28,36,45,55,66,78,91,105,120,8,25,43,62,82,103,125,20,44,69...
14:52:28 -!- elliott has joined.
14:52:32 <elliott> Perfect.
14:52:44 <ais523_> it was right last time too
14:52:52 <elliott> Yes, but it didn't start on boot.
14:53:30 <ais523_> that was a fast reboot
14:53:32 <CakeProphet> ais523_: that's a reasonable decoy sequence no?
14:53:36 <elliott> ais523_: Yes, it was :)
14:53:40 <CakeProphet> 1 might be too small
14:53:56 <ais523_> 1 is sometimes OK for a first decoy
14:54:01 <ais523_> the problem there is you're going to lose on short tapes
14:55:51 <CakeProphet> wouldn't a decoy of 1 take more time to set up than it (in the best case scenario) affords?
14:56:55 <ais523_> no; it sends the opponent into either a small decoy detection loop or their offset clear
14:57:20 <ais523_> it'll typically gain 10-20 cycles if they offset clear, and around 3-10 for a small decoy detection loop (depending on if they get the polarity right first try or not)
14:59:43 <CakeProphet> if bfjoust programs were sentient
14:59:51 <Taneb> What bot prefix symbol should I use?
14:59:58 <Taneb> ""?
15:00:04 <ais523_> I don't think $ is in use here
15:00:12 <elliott> Deewiant: You should try my package it will give you endless money, riches, and ident.
15:00:19 <elliott> Especially money and riches.
15:00:21 <CakeProphet> you could win by creating a program that generates beautiful treatises on various topics of relevance to sentient computer culture.
15:00:21 <ais523_> or you could always use zero-width-space
15:00:39 <ais523_> or if you're feeling especially evil, right-to-left-override
15:00:41 <CakeProphet> and the enemies would hastily try to take notes.
15:00:46 <CakeProphet> or sit in awe.
15:01:28 <CakeProphet> The stan rune is the best character for anything.
15:02:26 <CakeProphet> $ or # would be good for an actual command prefix
15:02:43 <CakeProphet> but ( would be good in that it would be hilariously ugly.
15:02:47 <ais523_> # often gets pasted in here
15:02:55 <ais523_> as part of shell commands
15:03:00 <ais523_> (and lines often start with an opening paren)
15:03:10 <ais523_> ) could work, I guess
15:03:36 <elliott> https://aur.archlinux.org/packages.php?ID=53492 AW MAN LOOK AT THAT I'M LIKE SOME KIND OF MAGICIAN
15:03:37 <CakeProphet> doesn't $ start shell prompts?
15:03:46 <CakeProphet> or end them rather.
15:03:50 <elliott> INSTALL OR DIE
15:03:53 <ais523_> err, right
15:03:58 <ais523_> I've been using too much OCaml recently
15:04:02 <ais523_> which has a # as its prompt
15:04:17 <Deewiant> elliott: Why ident
15:04:18 -!- augur has joined.
15:04:19 <CakeProphet> # would be fine then, unless people start pasting a lot of CPP directives.
15:04:37 <elliott> Deewiant: You know how freenode and other IRC servers pause for a couple of seconds whenever you connect??
15:04:41 <Deewiant> elliott: No
15:04:46 <elliott> WELL THEY DO
15:04:50 <elliott> An identd COMPLETELY ELIMINATES THAT WOOO
15:04:58 <elliott> ALSO, the ~ before your username disappears on freenode.
15:05:02 <elliott> That means you're special.
15:05:09 <elliott> But seriously, reconnections are instant now, this is so much less annoying.
15:05:10 <Deewiant> In other words, no good reason
15:05:22 <Deewiant> GOT IT THANKS
15:05:34 <elliott> What's one yaourt and a vi /etc/conf.d/noidentd and an rc.d start noidentd!!!!
15:05:43 <elliott> That's nothing!!!!! That's LESS THAN NOTHING!!!!!!!!!!
15:06:47 <CakeProphet> : would be a good command prefix, but could possibly conflict with :t
15:08:35 <CakeProphet> elliott: but NOTHING is less than NOTHING!!!!!
15:08:39 <elliott> CakeProphet: Surely YOU know the call of idents fine fellow????
15:08:52 <elliott> LET ME INTEREST YOU IN NOIDENTD, THE SMALLEST SELF-CONTAINED FAKE IDENTD ANYWHERE _OR YOU MONEY BACK!!!!!!_
15:08:53 <CakeProphet> uh, I do now?
15:09:19 <CakeProphet> instant login does sound nice.
15:09:31 <ais523_> but that's not what an identd does, is it?
15:09:34 <CakeProphet> s/login/connect/
15:10:22 <elliott> ais523_: yes, it does
15:10:30 <elliott> freenode wastes like two to three seconds trying to connect to your identd
15:10:34 <elliott> if it succeeds, it goes through instantly
15:10:39 <elliott> hit reconnect and watch the server log
15:10:42 <ais523_> ouch
15:10:44 <elliott> it pauses after can't resolve hostname
15:10:48 <elliott> that's the identd connection
15:10:55 <ais523_> why doesn't it do that for nickserv identifies, where it'd actually be useful?
15:10:59 <elliott> one installation of noidentd and CONNECTIONS ARE INSTANT FOREVER!!!!!!
15:11:11 <ais523_> also, all ports are firewalled or NATted inbound on all connections i use
15:11:13 <ais523_> typically both
15:11:15 <elliott> ais523_: because irc is stupid
15:11:17 <elliott> also
15:11:18 <elliott> YOU COULD
15:11:18 <elliott> ER
15:11:21 <elliott> DAMMIT!!!!!
15:11:22 <ais523_> so noidentd wouldn't be particularly useful
15:11:25 <elliott> CakeProphet FINE FELLOW!!!!
15:11:35 <CakeProphet> going to sleep...
15:11:40 <CakeProphet> MAYBE LATER GENTLEPERSON.
15:11:50 <elliott> GOOOD DAAAAAMN IIIIIT
15:12:02 <CakeProphet> yes it is a very good damn it.
15:12:08 <elliott> THE BEST
15:12:14 <elliott> Deewiant SLIGHTLY LESS FINE FELLOW!
15:12:18 <elliott> You all suck.
15:12:37 <Deewiant> I'm running splint on your code
15:12:44 <CakeProphet> noidentd is some kind of botnet virus isn't it?
15:13:45 <elliott> Deewiant: splint complains about everything, but it's pretty unobjectionable code :P
15:15:05 <Deewiant> Finished checking --- 28 code warnings
15:15:05 <Deewiant> 34 internal bugs reported
15:15:09 <elliott> X-D
15:15:11 <elliott> Gimme the report
15:15:12 <Deewiant> It doesn't like /usr/include/bits/confname.h
15:15:18 <elliott> But ais523_ can attest to splint's uselessness :P
15:15:46 <Deewiant> elliott: These line numbers won't match, I had to un-C99 your variable declarations
15:15:48 <ais523_> elliott: it would be very useful if it weren't so buggy
15:15:52 <elliott> Deewiant: lol
15:16:13 -!- elliott has quit (Quit: Leaving).
15:16:18 <ais523_> I like the way that splint detected more bugs in itself than in elliott's code
15:16:19 -!- elliott has joined.
15:16:24 <ais523_> <ais523_> I like the way that splint detected more bugs in itself than in elliott's code
15:16:25 -!- elliott has quit (Read error: Connection reset by peer).
15:16:32 -!- elliott_ has joined.
15:16:36 <elliott_> LOOK AT MY SPEEEEDY RECONNECTS
15:16:38 <elliott_> Oops
15:17:23 -!- elliott_ has changed nick to elliott.
15:17:25 -!- elliott has quit (Changing host).
15:17:25 -!- elliott has joined.
15:17:48 <Vorpal> ais523_, at what reporting level?
15:17:53 -!- zzo38 has joined.
15:18:02 <elliott> Vorpal!!! Tell me you're on an Arch machine.
15:18:04 <Vorpal> ais523_, also was that per line of code or in total?
15:18:06 <Deewiant> elliott: Report: http://sprunge.us/Uied Modified code: http://sprunge.us/GaDZ
15:18:23 <Vorpal> elliott, nope, I'm on ubuntu on my laptop and windows 7 on my desktop atm. Playing ARMA 2
15:18:23 <Deewiant> (Command line: $ splint +posixlib -systemdirs /usr/include -systemdirerrors +trytorecover noidentd.c)
15:18:25 <elliott> Deewiant: Hahaha jesus
15:18:41 <elliott> Deewiant: It compiles with clang -std=c99 -pedantic -Wall -Wextra, that's good enough for me :P
15:18:47 <elliott> Erm, as in, without warning
15:18:51 <Deewiant> (Without the +trytorecover it just dies on the first internal bug)
15:18:58 <elliott> Nice
15:19:02 <Vorpal> elliott, why did you want me to be on an arch machine?
15:19:13 <ais523_> Not in global scope as expected: Un-unparseable context: 10
15:19:16 <elliott> Vorpal: NOIDENTD!!!! It's the best identd since sliced identd!!! But it's not an identd!!
15:19:27 <Vorpal> elliott, what?
15:20:18 <Deewiant> elliott: Okay it's running but I'm not going to reconnect
15:20:31 <elliott> Deewiant: Just connect with another client :P
15:20:53 <Deewiant> Oh and also it's not going to help at all, heh
15:20:59 <elliott> Firewall?
15:21:14 <Vorpal> elliott, you made no sense
15:21:19 <Deewiant> This machine != the machine my keyboard is attached to
15:21:23 <elliott> Deewiant: lol
15:21:43 <elliott> Vorpal: I made total sense, sorry
15:22:06 <Deewiant> elliott: Make a Solaris 10 package kthx
15:22:26 <elliott> Deewiant: Observe the Makefile that installs a grand total of one file to the system :P
15:22:40 <Deewiant> elliott: But I need service configuration!!
15:22:42 <Vorpal> elliott, why are you not using tup?!
15:22:50 <elliott> Deewiant: True!!!!!!
15:22:58 <elliott> Vorpal: Couldn't be fucked to install it!!!!!!!!!!!!
15:23:15 <elliott> https://aur.archlinux.org/packages.php?ID=35320
15:23:18 <elliott> Also it's orphaned??/
15:23:19 <Vorpal> elliott, it is like cp tup ~/bin after building it
15:23:26 <Vorpal> oh never used aur for tup
15:23:38 <elliott> No I do not install anything outside the package manager now.
15:23:40 <elliott> It is so blissful.
15:23:43 <Vorpal> I just built it in my home dir and copied to ~/bin
15:23:55 <elliott> All language-specific packaging tools are DEAD to me. DEAD.
15:23:59 -!- FireFly has quit (Quit: ZNC - http://znc.in).
15:24:03 <Vorpal> elliott, I use package manager for everything outside $HOME, with a few /opt exceptions such as nwn
15:24:13 <elliott> https://aur.archlinux.org/ Hahaha I wonder if anyone's seen my package
15:24:20 <elliott> I wonder if I can track download counts
15:24:23 <Vorpal> elliott, you are on arch linux?
15:24:27 <elliott> No
15:24:30 <elliott> Gentoo.
15:24:40 <Vorpal> elliott, I don't believe that
15:24:40 <elliott> Also Debian.
15:24:42 <elliott> It's Gentoo/Debian.
15:24:48 <elliott> With Solaris userland.
15:24:52 -!- FireFly has joined.
15:24:52 <Vorpal> hah
15:24:54 <elliott> And DragonflyBSD kernel.
15:25:10 <Vorpal> elliott, which part is from debian then?
15:25:27 <elliott> Vorpal: /etc/debian_version
15:25:35 <Vorpal> elliott, and the bit from gentoo?
15:25:50 <elliott> /dev/tty4
15:25:55 <Vorpal> :P
15:26:39 <elliott> OH YEAH I was going to ask
15:26:42 <FireFly> Neat, hostname tilde begone
15:26:50 <elliott> FireFly: omg bffs 4eva <3
15:27:08 <elliott> As I was saying,
15:27:22 <elliott> Vorpal: What do I have to get you to do to click the thing on AUR so that I can update the C-INTERCAL package :)
15:27:37 <elliott> (Have I mentioned I'm not installing anything outside the package manager any more?)
15:27:57 <elliott> FireFly: P.S. You just installed the most secretest rootkit ever.
15:28:00 <Vorpal> elliott, c-intercal updated? I was unaware, I will deal with it tomorrow. Won't be on arch until then.
15:28:03 <elliott> (It's so secret it doesn't even exist.)
15:28:16 <elliott> Vorpal: It updated months ago, you are an irresponsible maintainer!
15:28:43 <elliott> Vorpal: Also your package doesn't use package() but I dunno if that's new or not.
15:28:45 <Vorpal> elliott, I wasn't notified. I do check the usenet channel every week or so
15:29:00 <Vorpal> elliott, package() is quite new I think yeah.
15:29:02 <ais523_> "usenet channel"?
15:29:13 <elliott> http://groups.google.com/group/alt.lang.intercal/browse_thread/thread/3c17bc59ad7e44a7#
15:29:20 <elliott> You were notified in April
15:29:23 <Vorpal> ais523_, alt.lang.intercal
15:29:28 <ais523_> Vorpal: "channel"? seriously?
15:29:40 <Vorpal> ais523_, err, too tired
15:29:45 <ais523_> "newsgroup" is the correct term; "group" is acceptable
15:29:51 <Vorpal> elliott, oh right, my desktop broke around then. Probably why I missed it.
15:29:55 <ais523_> "forum" is not really acceptable but people have been seen using it on occasion
15:29:58 <fizzie> ais523_: This is the best IRC group on esoteric languages there is.
15:29:59 <ais523_> but "channel" is just bizarre
15:30:09 <elliott> Vorpal: Also, you're using a suboptimal download mechanism in the package
15:30:13 <Vorpal> ais523_, I'm just tired. Don't try to read anything into it
15:30:15 <Vorpal> elliott, ?
15:30:28 <elliott> Vorpal: HTTP
15:30:47 <elliott> The state-of-the-art C-INTERCAL distribution mechanism is gopher/IPv6.
15:30:49 <Vorpal> elliott, you didn't mark c-intercal out of date anyway. You could have done that.
15:30:53 <elliott> Over UDP I guess.
15:31:06 <elliott> Vorpal: I only noticed today going to install c-intercal as an innocent, delicate flower.
15:31:09 <elliott> Alas I am now withered.
15:31:10 <Deewiant> ?pl \c -> (c:) <$> optional (char c)
15:31:10 <lambdabot> liftM2 (<$>) (:) (optional . char)
15:31:11 <Vorpal> elliott, the issue is that makepkg only does http and ftp to my knowledge
15:31:20 <elliott> Vorpal: Patch makepkg
15:31:26 <elliott> It is the only way
15:31:41 <ais523_> elliott: try drinking some water
15:31:42 <Vorpal> elliott, you do it and submit it to upstream, I'm not going to care.
15:31:52 <ais523_> I've been known to revive flowers from apparently fatal wilting before like that
15:31:55 <elliott> Vorpal: But you might care in the past?
15:32:01 <elliott> Also the present?
15:32:02 <Vorpal> elliott, ...
15:32:04 <Vorpal> elliott, no
15:32:10 <elliott> I weep.
15:32:14 <ais523_> wait, I thought I was upstream
15:32:21 <ais523_> or is there another stream between?
15:32:31 <Vorpal> ais523_, upstream for the packaging utilities
15:32:40 <Vorpal> ais523_, if elliott wants it to support gopher/ipv6
15:32:47 <Vorpal> them*
15:32:58 <ais523_> Vorpal: err, the distribution isn't /only/ on gopher over IPv6
15:33:06 <ais523_> it's just that when it first came out, I needed somewhere to put it
15:33:17 <ais523_> and someone happened to have an IPv6 gopher server and asked if they could host it there
15:33:23 <Vorpal> ais523_, I know. It was elliott who said I should use gopher/ipv6 because http was "suboptimal"
15:33:27 <ais523_> and it seemed a pretty appropriate set of protocols
15:33:32 <Vorpal> ais523_, he is just messing around.
15:35:05 <elliott> ais523_: I don't know why you support deprecated protocols like HTTP.
15:35:10 <elliott> IPv4 has all run out.
15:35:55 <Vorpal> ipv4/ipv6 is a completely unrelated issue to gopher/http
15:36:36 <ais523_> elliott: I doubt you'll be able to convince many computer-literate people that HTTP is deprecated in favour of gopher
15:37:02 <elliott> Hmm, someone needs to implement git-over-gopher
15:37:05 <elliott> Preferably push-capable
15:37:10 <elliott> No wait
15:37:13 <elliott> tla-over-gopher
15:37:23 <elliott> ais523_: Move C-INTERCAL over to tla-over-gopher version control
15:37:46 <ais523_> no
15:38:04 <ais523_> clearly, we need to get sg implemented as the new standard, here
15:38:10 <elliott> sg/gopher
15:38:32 <elliott> sg is really boring, it doesn't even have its own sync protocol :'(
15:39:03 <elliott> Or hmm
15:39:09 <elliott> I think it started to have one, actually
15:40:36 <zzo38> What is tla-over-gopher anyways?
15:40:47 <ais523_> zzo38: tla is a version control system
15:41:03 <ais523_> and putting it over gopher means using gopher to transmit the information needed for pulls and pushes
15:45:24 <zzo38> Gopher is particularly suitable for serving files; it is not very suitable to do the other way around, however, but there are a few exceptions.
15:48:55 <Deewiant> @ty (concat .) . zipWith (\a b -> [a,b])
15:48:56 <lambdabot> forall b. [b] -> [b] -> [b]
15:49:09 <Deewiant> elliott: Does that^ still not exist anywhere
15:49:27 <elliott> Hmmm
15:49:43 <elliott> Not to my knowledge, but I can't help but feel there must be a nicer way
15:49:55 <elliott> :t zipWith (\a b xs -> a:b:xs)
15:49:57 <lambdabot> forall b. [b] -> [b] -> [[b] -> [b]]
15:50:07 <Deewiant> The practical way is to write it with manual recursion :-P
15:50:11 <elliott> :t \xs ys -> foldr ($) [] $ zipWith (\a b xs -> a:b:xs) xs ys
15:50:12 <lambdabot> forall a. [a] -> [a] -> [a]
15:50:25 <elliott> :t ala Endo concatMap .: zipWith (\a b xs -> a:b:xs) xs ys
15:50:27 <lambdabot> Not in scope: `xs'
15:50:27 <lambdabot> Not in scope: `ys'
15:50:27 <elliott> :t ala Endo concatMap .: zipWith (\a b xs -> a:b:xs)
15:50:28 <lambdabot> Couldn't match expected type `Endo a' against inferred type `[b]'
15:50:28 <lambdabot> Expected type: (a -> a) -> Endo a
15:50:28 <lambdabot> Inferred type: (a -> a) -> [b]
15:50:32 <Deewiant> Also it probably shouldn't use zip as it could take the remainder when one list runs out
15:50:37 <elliott> :t ala EndoconcatMap
15:50:38 <lambdabot> Not in scope: data constructor `EndoconcatMap'
15:50:41 <elliott> :t ala Endo concatMap
15:50:42 <lambdabot> Couldn't match expected type `Endo a' against inferred type `[b]'
15:50:43 <lambdabot> Expected type: (a -> a) -> Endo a
15:50:43 <lambdabot> Inferred type: (a -> a) -> [b]
15:50:45 <elliott> :t ala Endo foldMap .: zipWith (\a b xs -> a:b:xs)
15:50:46 <lambdabot> Not in scope: `foldMap'
15:50:48 <elliott> >_<
15:50:52 <Deewiant> @ty ala
15:50:53 <lambdabot> forall o n b n' o'. (Newtype n o, Newtype n' o') => (o -> n) -> ((o -> n) -> b -> n') -> b -> o'
15:50:54 <elliott> :t ala Endo Data.Foldable.foldMap .: zipWith (\a b xs -> a:b:xs)
15:50:55 <lambdabot> forall b. [b] -> [b] -> [b] -> [b]
15:51:00 <elliott> Deewiant: Perf... wait, what
15:51:03 <Deewiant> :-D
15:51:06 <elliott> Oh
15:51:14 <elliott> :t ($ []) . ala Endo foldMap .: zipWith (\a b xs -> a:b:xs)
15:51:16 <lambdabot> Not in scope: `foldMap'
15:51:21 <elliott> :t ($ []) . ala Endo Data.Foldable.foldMap .: zipWith (\a b xs -> a:b:xs)
15:51:22 <lambdabot> forall b. [b] -> [b] -> [b]
15:51:27 <elliott> Deewiant: Perfect
15:52:23 <Deewiant> > (($ []) . ala Endo Data.Foldable.foldMap .: zipWith (\a b xs -> a:b:xs)) "abc" "123"
15:52:24 <lambdabot> "123"
15:52:26 <Deewiant> elliott: Try again
15:52:38 <elliott> :t ($ []) .: ala Endo foldMap .: zipWith (\a b xs -> a:b:xs)
15:52:39 <lambdabot> Not in scope: `foldMap'
15:52:42 <elliott> dfjk
15:52:42 <elliott> gho
15:52:43 <elliott> em,l;
15:52:48 <elliott> :t ($ []) .: ala Endo Data.Foldable.foldMap .: zipWith (\a b xs -> a:b:xs)
15:52:49 <lambdabot> forall b. [b] -> [b] -> [b]
15:52:55 <Deewiant> @hoogle (/\/)
15:52:55 <lambdabot> No results found
15:53:07 <elliott> Try hayoo
15:54:18 <Deewiant> No luck
16:00:47 <Taneb> May I test Pietbot?
16:01:00 <ais523_> I'm not sure who you're asking for permission
16:01:02 <Deewiant> I don't think you need to ask
16:01:06 <ais523_> but I'll stand by ready to kick it if it goes berserk
16:01:07 <Taneb> Channel in general
16:01:10 <ais523_> if you think it's necessary
16:01:45 <elliott> Geh, aurget is just too fragile for me
16:01:48 <elliott> I'm trying yaorut
16:01:49 <elliott> yaourt
16:01:51 <elliott> Fuck that name
16:01:57 <Deewiant> yaourt --sucre
16:02:01 <elliott> Fuck that option
16:02:22 <Deewiant> It's a bad option :-/
16:02:32 <elliott> Deewiant: Start counting the days until I write my own libalpm/AUR thing
16:02:38 <elliott> They are numbered
16:02:53 <ais523_> what is AUR anyway?
16:02:54 <Deewiant> If it had just -y instead of -fyy it'd be better
16:03:03 <elliott> ais523_: Arachnids Understanding Rodents
16:03:10 <elliott> Deewiant: -fyy?
16:03:14 <Deewiant> elliott: -fyy
16:03:18 <elliott> What
16:03:26 <Deewiant> ais523_: Arch User Repository
16:03:44 <Deewiant> elliott: It's equivalent to -Sfyyua --devel
16:03:54 <Deewiant> elliott: Notice "fyy"
16:03:55 <elliott> Deewiant: Have I mentioned I don't like yaourt
16:04:01 <elliott> I take it -fyy is like force yes yes
16:04:04 <elliott> Or something
16:04:04 <Deewiant> It's just a joke
16:04:07 <Deewiant> -f is force
16:04:16 <Deewiant> -y is the normal pacman -y
16:04:18 <elliott> What is sucre actually meant to be, even as a joke
16:04:21 <Deewiant> And I think -yy also is, I think
16:04:32 <Deewiant> Or maybe not
16:04:34 <elliott> Also, why does everybody mindlessly copy pacman's basic command structure
16:04:36 <elliott> It's kind of shit
16:04:45 <Deewiant> Anyway, -yy is "force update of package databases"
16:04:54 <Deewiant> I.e. overwrite them even if they appear to be up to date
16:04:55 <elliott> Oh,r ight
16:04:58 <elliott> s/r / r/
16:05:09 <Deewiant> elliott: Because having them be more or less drop-in replacements of each other is handy :-P
16:05:38 <elliott> Deewiant: Yeah, but they offer like two things, AUR building, and an improved UI
16:05:39 <Deewiant> elliott: http://translate.google.com/#fr|en|yaourt%20sucre
16:05:41 <elliott> If you're doing the latter...
16:05:49 <elliott> And yes
16:05:51 <elliott> I realise it is French :P
16:05:58 <elliott> I just don't get the joke of the option itself
16:06:00 <elliott> i.e., why it does that
16:06:17 <Deewiant> It's like syntactic sugar except it's pactactic sugar
16:06:18 <Deewiant> I don't know
16:07:05 <elliott> [elliott@dinky yaourt]$ makepkg -s
16:07:05 <elliott> ==> Making package: yaourt 0.10.2-1 (Fri Oct 28 17:06:24 BST 2011)
16:07:06 <elliott> ==> Checking runtime dependencies...
16:07:06 <elliott> ==> Installing missing dependencies...
16:07:06 <elliott> error: target not found: package-query>=0.7
16:07:06 <elliott> ==> ERROR: 'pacman' failed to install missing dependencies.
16:07:18 <elliott> Dependencies on other AUR packages
16:07:19 <elliott> So great
16:07:22 <elliott> So simple
16:08:03 <Deewiant> I think a couple of the helpers use that
16:08:10 <Deewiant> Not sure though
16:08:37 <elliott> The idea of writing my own on top of libalpm As God Intended is annoyingly prominent at this point :P
16:09:27 <elliott> "man libalpm" is uh
16:09:31 <elliott> It references a bunch of section manpagse
16:09:33 <elliott> That don't exist
16:13:40 <elliott> Deewiant: I like how yaourt has bash_completion support but it's so slow that it actually just makes you regret having a tab key
16:13:49 <elliott> I wish that was my typical hyperbole
16:14:44 <Deewiant> I don't use bash nor yaourt's completion :-P
16:15:50 <ais523_> elliott: perldoc does that too
16:15:59 <ais523_> although hitting control-C at a judiciously timed moment
16:16:00 <ais523_> helps
16:16:43 <Taneb> Damn
16:16:57 <Taneb> How do I get my bot to use netcat?
16:17:12 <elliott> noidentd-git is now onto pkgrev=5 :P
16:17:28 <elliott> FireFly: If you upgrade, you'll get an EXCITING NEW NOTHING.
16:17:38 <Taneb> I want some sort of two way pipe?
16:17:41 <FireFly> Omgz
16:17:46 <elliott> Taneb: nc -e
16:17:53 <Deewiant> elliott: Why is bash a dep
16:17:55 <elliott> Taneb: nc -e 'piet mybot' irc.freenode.net 6667
16:18:02 <ais523_> Taneb: that's one possibility (use mkfifo to make a fifo, then you can make a pipe go round in a circle); but elliott's suggestion is better
16:18:04 <elliott> Deewiant: install -D -m755 noidentd.rc.d "$pkgdir/etc/rc.d/noidentd"
16:18:15 <ais523_> unless you're using a version of nc whose author things -e is a massive security bug
16:18:18 <elliott> ais523_: Well, it's not that better; if FIFOs weren't gross they'd be better
16:18:20 <ais523_> because it can easily be used to make a reverse shell
16:18:30 <elliott> e.g. if tie was installed on the system :-)
16:18:35 <Deewiant> elliott: So it's a makedep?
16:18:45 <elliott> Deewiant: No? /etc/rc.d/noidentd is a bash script
16:18:50 <elliott> It runs at startup/etc.
16:18:59 <elliott> So it's a runtime dependency
16:19:07 <Deewiant> Hmm
16:19:19 <Taneb> nc: invalid option -- 'e'
16:19:19 <Taneb> This is nc from the netcat-openbsd package. An alternative nc is available
16:19:19 <Taneb> in the netcat-traditional package.
16:19:24 <elliott> Deewiant: BTW, the official package-bug-checker-thing told me to put it there
16:19:40 <Deewiant> elliott: Yeah but it's not always right
16:19:48 <elliott> Taneb: install netcat-traditional, echo '#!/bin/sh' >mybot; echo 'piet mybot.piet' >>mybot; chmod +x mybot
16:19:53 <elliott> nc -e 'piet mybot' irc.freenode.net 6667
16:19:55 <elliott> Deewiant: How's it wrong here
16:20:04 <elliott> Deewiant: An rc.d script is just as much a runtime thing as a /usr/bin executable
16:20:10 <Deewiant> elliott: I know, I'm just thinking
16:20:25 <elliott> I would prefer it just depend on any shell rather than bash but all the other rc.d scripts do it like this too :)
16:20:37 * elliott checks everything still works.
16:20:40 -!- elliott has quit (Quit: Leaving).
16:20:45 -!- elliott has joined.
16:20:46 <Deewiant> elliott: Most rc.d scripts of mine don't seem to depend on bash or sh
16:20:59 <elliott> Deewiant: See shebang
16:21:14 <Deewiant> elliott: I just mean the packages themselves
16:21:18 <elliott> Well
16:21:22 <elliott> That sounds like a bug to me
16:21:32 <elliott> They don't run without bash
16:21:37 <elliott> OK, sure, you can just not use the rc.d script
16:21:42 <elliott> But you could just "not use" something in /usr/bin too
16:21:46 <elliott> It's still a missing dependency
16:21:48 <zzo38> Have you answered the telephone by: "I'm sorry, you must have a wrong number. I don't have a telephone."
16:21:52 <Deewiant> elliott: You depend on /etc/rc.d/functions but not initscripts
16:21:57 <ais523_> if it's Debian, then scripts are allowed to assume that "essential" packages are installed, and I think that includes dash
16:22:02 <Deewiant> elliott: (As, presumably, do all/most of these packages)
16:22:09 <elliott> Deewiant: Oh, that's another bug
16:22:10 <ais523_> zzo38: I don't think so; however, it might even be correct if you answered a payphone like that
16:22:14 <ais523_> or someone else's telephone
16:22:14 <Deewiant> elliott: Fair enough :-)
16:23:21 <elliott> noidentd-git W: Dependency bash included but already satisfied
16:23:22 <elliott> noidentd-git W: Dependency included and not needed ('initscripts')
16:23:28 -!- ive has quit (Ping timeout: 240 seconds).
16:23:34 <elliott> Hmmmmmmm
16:23:42 <elliott> Deewiant: I wonder why it's complaining about that, it should see the filename if it sees bash
16:23:51 <elliott> Unless it just uses special-case hacks
16:23:51 <Deewiant> elliott: I told you it's not always right
16:24:50 <ais523_> enigma includes different floors !
16:24:51 <elliott> Deewiant: https://aur.archlinux.org/packages.php?ID=53492
16:24:51 <elliott> There we go
16:24:55 <elliott> ais523_: :D
16:25:14 -!- elliott has quit (Client Quit).
16:25:18 -!- elliott has joined.
16:25:21 <zzo38> ais523_: I suppose so. In which places could I find a payphone?
16:26:03 <ais523_> zzo38: in the UK, they still exist, but are quite rare nowadays; they are mostly found on busy roads with a lot of pedestrians
16:27:07 <elliott> Deewiant: Tell me I'll regret writing my own libalpm ditty
16:27:12 <elliott> I need it :(
16:27:15 <Deewiant> elliott: You'll regret it
16:27:18 <elliott> Deewiant: Why
16:27:29 <Deewiant> I dunno, you told me to say that
16:27:38 <elliott> oh
16:27:40 <elliott> Unconvincing
16:27:49 <elliott> I can't believe python is actually python3 on Arch
16:31:43 <Deewiant> elliott: Give me DS9K values for INT_MIN, INT_MAX, UINT_MAX, LONG_MIN, LONG_MAX, ULONG_MAX, LLONG_MIN, LLONG_MAX, and ULLONG_MAX; thanks in advance
16:32:11 <elliott> Deewiant: You're not going to decide values for them dynamically based on static analysis?
16:32:40 <Deewiant> ... no.
16:33:05 <Deewiant> Feel free to file a feature request if this ever gets that close to being finished
16:33:19 <ais523_> Deewiant: how many bits is a char?
16:33:38 <Deewiant> ais523_: Undecided
16:33:45 <ais523_> also, is this a C89 or C99 version? you should definitely make it use one's-complement with trap representation, for all the types that let you do that
16:33:49 <Deewiant> C1X
16:33:58 <elliott> Deewiant: You're not going to get anywhere interesting just by picking weird rangse
16:33:59 <elliott> ranges
16:34:02 <ais523_> almost 100 years old? boring
16:34:28 <ais523_> I'd say plain int should be equivalent to short, and between 17 and 31 bits wide
16:34:38 <ais523_> as that's going to catch more programs than making it unusually large
16:34:46 <Deewiant> elliott: Where did I say that this is the only DS9K thing I'll do
16:34:48 <ais523_> probably sizeof(int) == 3 is the value to go for
16:34:50 <elliott> char should be as big as a short, int as small as a short
16:34:56 <elliott> Deewiant: Well, fair enough
16:35:00 <Deewiant> sizeof has no relation to the min/max values
16:35:16 <elliott> I'd go for 17-bit chars, shorts ant ints
16:35:16 <ais523_> Deewiant: it does for the unsigned types, doesn't it?
16:35:19 <elliott> s/ant/and/
16:35:22 <Deewiant> ais523_: Does it?
16:35:26 <elliott> And then 129-bit longs
16:35:32 <ais523_> this is from memory, and I'm far from 100% confident
16:35:39 <Deewiant> shorts being equal to ints seems a bit forgiving
16:35:41 <elliott> All of them one's-complement-with-trap
16:35:42 <elliott> If you can do that
16:36:00 <Deewiant> I just need these values so that I can give types to integer literals :-P
16:36:03 <fizzie> All even bits are padding.
16:36:12 <ais523_> hmm, what about sizeof(short)==2, sizeof(int)==3, sizeof(long)==something that isn't representable in an int?
16:36:26 <Deewiant> sizeof is not a matter of interest to me right now
16:36:35 <Deewiant> Unless sizeof and the min/max truly are dependent
16:36:37 <ais523_> Deewiant: well, it determines the bounds that are possible on the integers
16:36:49 <ais523_> you can't have a max-min more than 2 to the power of sizeof * CHAR_BIT
16:36:59 <fizzie> You can have less, though.
16:37:07 <ais523_> yes, but not in all cases
16:37:15 <ais523_> unsigned char you definitely have to use every bit
16:37:15 <Deewiant> Can't I freely pad the sizeof
16:37:18 <ais523_> I'm not sure about unsigned int
16:37:19 <Deewiant> Except for chars
16:37:31 <ais523_> nor about signed char
16:38:10 <elliott> Sigh, AUR Haskell packages do shared objects but not profiling
16:38:16 <fizzie> "For unsigned integer types other than unsigned char, the bits of the object representation shall be divided into two groups: value bits and padding bits (there need not be any of the latter)."
16:38:25 <fizzie> For signed integer types without exception.
16:38:38 <fizzie> (And also there is a sign bit.)
16:39:44 <Deewiant> Right, there are N value bits thus giving the possible values 0 through 2^N - 1
16:40:17 <Deewiant> But with padding the sizeof can be anything bigger
16:40:28 <fizzie> Sadly, at least in C99, you have to in fact use all the value bits to represent a binary number, and only the "second zero" (for one's-complement, or sign-and-magnitude) can be a trap representation.
16:41:03 <Deewiant> fizzie: "Some combinations of padding bits might generate trap representations"
16:41:26 <Deewiant> Some combinations of padding bits might generate trap representations, for example, if one padding bit is a parity bit. Regardless, no arithmetic operation on valid values can generate a trap representation other than as part of an exceptional condition such as an overflow, and this cannot occur with unsigned types. All other combinations of padding bits are alternative object representations of the value specified by the value bits.
16:41:29 <fizzie> Oh, right. But you can't have a value range of, say, [-22222, 33333].
16:41:43 <Deewiant> No, I can't.
16:42:44 <Deewiant> (That footnote is duplicated at least in this C1X draft, amusingly.)
16:43:02 <fizzie> Prime powers of two for the elegance, maybe.
16:46:51 <Deewiant> Do unsigned numbers have to be able to represent up to 2^(N+1)-1 where 2^N-1 is the max of the corresponding signed type?
16:47:39 <Deewiant> "if there are M value bits in the signed type and N in the unsigned type, then M <= N"
16:48:22 <Deewiant> Could have signeds represent [-n,n] and unsigneds represent [0,n], then.
16:51:55 <Deewiant> 11-bit chars, 17-bit shorts, 19-bit ints, 37-bit longs, and 67-bit long longs
16:54:22 <Taneb> Right, I've got a hat on
16:54:37 <Taneb> If I act like Gregor, maybe I'll get some of Gregor's skills
16:55:58 <Deewiant> ?hoogle Ord a => (a,a) -> a -> Bool
16:55:58 <lambdabot> Data.Ix inRange :: Ix a => (a, a) -> a -> Bool
16:55:59 <lambdabot> Text.Regex.Base.RegexLike extract :: Extract source => (Int, Int) -> source -> source
16:55:59 <lambdabot> Data.Graph.Inductive.Graph gelem :: Graph gr => Node -> gr a b -> Bool
16:59:23 -!- Taneb has quit (Ping timeout: 248 seconds).
17:00:09 -!- Ngevd has joined.
17:06:41 -!- Ngevd has quit (Ping timeout: 245 seconds).
17:08:23 -!- ive has joined.
17:10:17 -!- monqy has joined.
17:13:13 -!- Ngevd has joined.
17:14:14 <zzo38> Another Arabic Part (possibly used with equatorial coordinates too) could be: Midheaven - Sun + 0Libra (no flip) I should make Astroplot capable of user defining generalized Arabic Parts, which can be whatever you want, instead of only the 177 parts that Astrolog supports. You can write your own suggestions too. From Wikipedia it is clear that astrology and astronomy program are both inadequate; that is why I have my own idea. Swiss Ephemeri
17:15:18 <zzo38> Astrolog also seems to have errors in its documentation, as well as some bugs I have found in the program.
17:16:41 -!- clog has quit (Remote host closed the connection).
17:17:23 <zzo38> The document says to use -s (sidereal zodiac) when using -sr (equatorial right ascension) but actually that not only has no effect on that mode, but right ascensions are relative to the vernal equinox anyways.
17:18:06 <zzo38> So it would be wrong to use sidereal zodiac mode with it if you wanted the standard right ascensions values.
17:21:08 <fizzie> Deewiant: I have a feeling someone in real life has actually done the [-n, n] signed, [0, n] unsiged thing, on a system where all arithmetic is signed. It might be more unexpected to have, say, values of [-n/4+1, n/4-1] for signed and [0, n-1] for unsigned, for n = 2^k.
17:21:40 -!- ive has quit (Ping timeout: 240 seconds).
17:22:03 <fizzie> Deewiant: What was this all about, incidentally? Were you writing a DS9K simulator?
17:22:49 <Deewiant> fizzie: I'm glacially writing a DS9K implementation of C, in Haskell
17:25:16 <fizzie> Ah.
17:25:21 <zzo38> What is a DS9K?
17:25:49 <fizzie> "The DeathStation 9000 (often abbreviated DS9K) is a hypothetical computer architecture often used as part of a discussion about the portability of computer code (often C code). It is imagined to be as obstructive and unhelpful as possible, whilst still conforming to any relevant standards, deliberately acting unexpectedly whenever possible."
17:26:06 <zzo38> OK.
17:28:13 -!- ive has joined.
17:30:58 <pikhq_> Hmm. *Clearly* the DS9K should have each pointer type with distinct representation.
17:31:30 <elliott> yeah yeah been there donr that
17:31:31 -!- Ngevd has quit (Ping timeout: 258 seconds).
17:34:51 <zzo38> pikhq_: I suppose it should
17:37:45 -!- ais523_ has quit (Ping timeout: 265 seconds).
17:50:11 -!- azaq23 has joined.
17:53:41 <elliott> <elliott> Sigh, AUR Haskell packages do shared objects but not profiling
17:53:43 <elliott> I retract this
17:55:47 -!- Ngevd has joined.
17:58:14 <Vorpal> elliott, so why are you using arch linux?
17:58:31 <Vorpal> elliott, I mean you don't really seem to be the type to enjoy arch linux
17:58:46 <elliott> Vorpal: It's way better than Gentoo/Debian/Solaris/DragonflyBSD
17:59:03 <Vorpal> elliott, and I'm considering switching to nixos in the future, once it gets more mature. Currently it is somewhat buggy and incomplete from my experience.
18:00:13 <elliott> Vorpal: But honestly, the real reason is that it has a newer ghc than Debian
18:00:28 <Vorpal> elliott, please don't tell me you are using this on the vps!?
18:00:50 <elliott> No. That's Debian stable as always.
18:01:01 <Vorpal> elliott, speaking of which, how did you solve the haskell issue on there?
18:01:04 <Vorpal> or ghc issue rather
18:01:10 <elliott> I didn't
18:01:15 -!- ais523 has joined.
18:01:19 <Vorpal> so what did you do instead?
18:01:55 <elliott> Used a cron plugin for bukkit
18:01:58 <Vorpal> ouch
18:02:04 <elliott> It's ok, it uses cron4j
18:02:12 <elliott> which is a feature-for-feature reimplementation :P
18:02:32 <Vorpal> this is like the only place I can think of where that is useful
18:04:16 <elliott> :P
18:04:30 <elliott> i think the advantage is, it can call java code
18:04:32 <elliott> rather than executables
18:04:46 <Vorpal> elliott, I mean, there are far better interfaces for scheduling systems to embed in your application than a crontab file
18:04:59 <elliott> Meh, they're flexible
18:05:03 <Vorpal> well yeah
18:05:04 <elliott> It has a programmatic API too
18:05:25 <Vorpal> makes sense
18:06:18 <Vorpal> elliott, have fun with arch. #archlinux is, while not friendly, acceptable.
18:06:31 <elliott> I don't use distro irc
18:06:40 <Vorpal> good choice
18:06:46 <elliott> it is an automated faq dispensal mechanism
18:06:50 <elliott> but with more yelling
18:06:54 <Vorpal> quite
18:06:54 <elliott> for all it
18:07:05 <fizzie> Maybe I should join #ubuntu, I assume it's the best place.
18:07:10 <Vorpal> elliott, the arch linux wiki tends to be surprisingly good
18:07:14 <elliott> anyway, the large selection of haskell packages in aur has me happy
18:07:21 <elliott> the wiki is nice
18:07:31 <elliott> rc.d/rc.conf/inittab/etc. is acceptable
18:07:34 <elliott> so eh
18:07:36 <elliott> i'm happy
18:07:44 <Vorpal> fizzie, iirc #ubuntu is the largest channel around the time of new releases, otherwise it tends to be the second largest after #gentoo. Might have changed, haven't been in either for ages
18:08:25 <Vorpal> elliott, rc.d... Well I have a minor issue with that, I get confused when switching between ubuntu and arch, I mix up the tab complete for init.d and rc.d.
18:08:26 <fizzie> $ aptitude search '^libghc.*-dev$' | wc -l
18:08:26 <fizzie> 232
18:08:26 <fizzie> (Sadly they're all from the third century BCE.)
18:09:10 <Vorpal> elliott, anyway arch linux init system has a major fault in my opinion. That fault is that the ordering is up to you in the DAEMONS array. It doesn't do deps between services.
18:09:25 <elliott> fizzie: of -uptodate- packages
18:09:40 <elliott> Vorpal: (a) I have a proper issue with it: It's not a service management system.
18:09:47 <Vorpal> elliott, there is that too
18:09:52 <elliott> (b) Meh, I don't have enough daemons for that to matter much, but it's imperfect.
18:10:00 <elliott> DAEMONS=(syslog-ng @network @alsa @noidentd crond)
18:10:03 <fizzie> http://p.zem.fi/zpkb <- freenode top5 when I /list'd, but this was quite a long while ago.
18:10:18 <elliott> fizzie: /list is not impressive, you know.
18:10:28 <Vorpal> elliott, it also prevents fully concurrent starting. You can basically do run in background or blocking start. So you can do some concurrency and ordering. But you can't do deps between those starting in the bg
18:10:31 <elliott> #haskell is up there nowadays, at least top 20
18:10:53 <fizzie> The 8th in that listing.
18:11:29 <elliott> Vorpal: I have a decent init/service manager time, just haven't been bothered to implement it :)
18:11:36 <elliott> Ditto for package manager.
18:11:58 <Vorpal> elliott, anything wrong with nixos package manager?
18:12:09 <elliott> Yes
18:12:12 <elliott> For one, it's C++
18:12:18 <Vorpal> oh okay, apart from that?
18:12:49 <Vorpal> oh that is another issue with nixos, while /bin/sh is there, stuff like /bin/bash or /usr/bin/env bash or /usr/bin/python are quite common in #! too
18:12:50 <elliott> I don't think it implements my higher-order package model
18:13:13 <Vorpal> elliott, higer-order packages? How does that work?
18:13:26 <elliott> Simple, packages take all their configuration as parameters
18:13:39 <Vorpal> elliott, like compilation flags?
18:13:39 <elliott> Configuration includes, e.g. what specific packages to use to satisfy a generic dependency
18:13:49 <Vorpal> hm
18:13:50 <elliott> Vorpal: Sure, and package-specific stuff
18:13:55 <elliott> build-profiling-libs, etc.
18:14:13 <Vorpal> elliott, so that includes stuff like the entire httpd config? Or would that not be in that?
18:15:11 <elliott> Vorpal: Well, the httpd package would only take "package global" config
18:15:17 <elliott> i.e., roughly "compile-time" stuff
18:15:20 <Vorpal> right
18:15:24 <elliott> But my system also subsumes configuration management
18:15:30 <Vorpal> mhm
18:15:31 <elliott> So yes and no
18:16:02 <Vorpal> elliott, okay, what are the benefits of this system then? Does it allow multiple versions of a package or something interesting like that?
18:16:53 <Vorpal> I mean, I can see it is kind of neat to have this info, but I'm not currently seeing what the huge benefit would be
18:17:01 <elliott> The benefits are vastly increased package configurability without breaking dependencies (because packages can depend on certain parameters to others), full multiarch emerges from the rest of the system, sure, multiple versions of a package...
18:17:09 <elliott> And it also underlies the configuration management.
18:17:48 <Vorpal> elliott, hm, this is kind of like the USE-flags of gentoo but more advanced. A package can depend on another package having a specific USE-flag enabled iirc.
18:18:08 <elliott> Yes, it's similar, but typed, not just a constant list of values
18:18:12 <Vorpal> yeah
18:18:21 <elliott> Configuration management eaxmple: e.g. Say foo has a configuration option that can be a cc, any cc
18:18:30 <Vorpal> yeah
18:18:35 <elliott> You might have a "package" foo.cc :: cc -> pkg
18:18:42 <elliott> So you'd install (foo.cc gcc)
18:18:45 <elliott> Or (foo.cc clang)
18:18:45 <elliott> etc.
18:18:47 <Vorpal> yay type signatures
18:19:11 <Vorpal> elliott, kind of nice.
18:19:19 <elliott> Vorpal: ...my secret wish is that packages will turn out to generalise into /services/ as well
18:19:25 <elliott> there's the same dependency management
18:19:30 <elliott> "installation" is starting
18:19:37 <elliott> "uninstallation" is stopping
18:19:38 <elliott> etc.
18:19:46 <Vorpal> elliott, not sure that would fit for stuff like httpd config though. They tend to be very complex. Stuff like rewrite rules, virtual hosts, fcgi setup and what not.
18:19:58 <elliott> httpd recommends httpd.service
18:20:04 <elliott> httpd.service depends on httpd
18:20:07 <elliott> and, i dunno, dbus.service
18:20:09 <elliott> etc.
18:20:09 <Vorpal> hm
18:20:23 <elliott> bootup = installing the configured "system.service" or w/e
18:20:53 <elliott> Vorpal: and yeah, there's modelling involved: in the worst case you just do what nixos does to solve the same problem
18:20:56 <Vorpal> (I somehow doubt an httpd needs dbus, but whatever, not relevant to the discussion really, just thought I ought to point that out)
18:20:59 <elliott> take an extra-config string
18:21:07 <elliott> and yeah i was just trying to think of a daemon
18:21:37 -!- derdon has quit (Remote host closed the connection).
18:22:25 <Vorpal> elliott, anyway you want to have some nice syntax for extra-config strings. So you don't need to escape the newlines or something silly like that. Or escape embedded quotation marks
18:22:38 <elliott> sure
18:22:41 <Vorpal> something like the heredoc stuff in bash would actually be nice there
18:22:42 <elliott> could source it from a file, even
18:22:46 <Vorpal> or that
18:22:48 <Vorpal> probably cleaner
18:22:57 <elliott> esp. for syntax highlighting
18:23:01 <Vorpal> snap
18:23:05 <Vorpal> was about to say that XD
18:23:12 <elliott> Vorpal: oh, and this model also does binary packages really well
18:23:18 <Vorpal> oh?
18:23:29 <elliott> since a package specifies a /precise/ configuration, a binary package can be substituted iff it has the exact same configuration
18:23:46 <elliott> because rebuilding would literally give you the same bits (modulo compilers not being deterministic etc.)
18:23:47 <Vorpal> elliott, exact same down to CFLAGS?
18:24:01 <elliott> Vorpal: sure -- if you specified different CFLAGS, you want them to be used...
18:24:34 <elliott> basically "pkg install foo" would almost certainly use a binary package but e.g. "pkg install foo --without-foo --extra-cflags=-fmagic" would build from source
18:24:44 <elliott> and maybe "pkg install foo --some-popular-option" would use a binary package too
18:24:49 <Vorpal> elliott, could I do something like "I accept these generic CFLAGS but for anything I compile myself for some other reason than CFLAGS I want these instead"
18:24:53 <Vorpal> that would be kind of neat
18:24:57 <elliott> it also means that self-depending packages can be bootstrapped
18:25:02 <elliott> you just force one level of source building
18:25:09 <elliott> and the next level goes to the binary to satisfy the dependencies
18:25:10 <Vorpal> like accepting -mtune=generic but doing -march=core2 or whatever if you compile it /anyway/
18:25:25 <Vorpal> in a config I mean
18:25:25 <elliott> Vorpal: sure, that's basically a frontend issue
18:25:30 <Vorpal> right
18:26:00 <elliott> Vorpal: you could also demand everything be built with -fmagic, in case half the packages in the repo aren't for some reason
18:26:09 <elliott> and that'll use the binary packages if they have -fmagic
18:26:21 <Vorpal> elliott, what with the new AVX stuff I think there are starting to be enough differences on x86-64 to investigate which, if any, packages would benefit from using AVX instead of plain SSE.
18:26:37 <elliott> ...basically the end result of this is that it's ten times more flexible than Gentoo: you can say "i want this libc, this coreutils, this blah" and it all works out...
18:26:40 <Vorpal> hm the base-line on x86-64 is actually SSE2 I think?
18:26:44 <elliott> but in the common case it still uses all-binaries etc.
18:27:22 <elliott> and ofc the same benefits nix gives you
18:27:32 <Vorpal> elliott, "I want this libc", and it all works out? Sure, if you go for glibc or eglibc. Not likely if you go for uclibc or some such :P
18:27:35 <elliott> i.e. purely functional -> rollback support, mostly-centralised configuration management
18:27:46 <elliott> Vorpal: well, it all works out if you pick the right packages
18:27:50 <elliott> Vorpal: once musl gets C++ support...
18:27:50 <Vorpal> heh
18:27:59 <elliott> musl is glibc-compatible to a T
18:28:04 <Vorpal> hm
18:28:17 <elliott> well by support I mean "works with libc++"
18:28:54 <Vorpal> elliott, what about binary blobs that depend on certain stuff. Say, df, nwn, or even the amd or nvidia drivers?
18:29:09 <elliott> What of them? They don't take cflags options :-)
18:29:30 <elliott> There'd be no built-in options, everything would be specified by "sensible default" builders like autotools, etc.
18:29:34 <Vorpal> well the drivers do, they use a glue file between the blob and the kernel. Because of how modules wokr
18:29:37 <Vorpal> work*
18:29:43 <elliott> Well, right
18:30:07 <elliott> Vorpal: Oh, and multiarch basically works perfectly like this
18:30:13 <Vorpal> hm
18:30:21 <elliott> Assuming a Nix-style store layout, I haven't quite decided how it's reflected to the FS yet
18:30:35 <elliott> But basically they just install normally and you overly them onto the right /usr/lib/<foo> directory
18:30:39 <elliott> s/overly/overlay/
18:30:46 <Vorpal> elliott, you need quite a lot of testing to ensure that stuff works. I mean, you need to test every package against every libc you support to be able to specify correct deps.
18:30:47 <elliott> (This thing basically depends on a good union-fs, I think)
18:30:57 <elliott> Vorpal: If you customise shit, shit might break
18:31:01 <Vorpal> ah...
18:31:06 <elliott> Vorpal: Not every combination of USE flags will work with a Gentoo package
18:31:10 <elliott> I mean, it should be fine
18:31:26 <Vorpal> elliott, I'm quite amazed at that nix actually works.
18:31:26 <elliott> But if you use a different libc, shrug
18:31:43 <Vorpal> it is quite complicated to make such a system work as well as it does
18:31:47 <pikhq_> Vorpal: Actually, Nix's design should make things break *less*.
18:32:04 -!- clog has joined.
18:32:15 <Vorpal> pikhq_, yes. But getting stuff like the boot-loader config version selection and what not to work is quite impressive.
18:32:16 <elliott> Vorpal: Well, the nice thing about this design is that it's so generic there's barely anything to it :)
18:32:18 <pikhq_> There's absolutely no way for you to have a breaking ABI change actually break packages.
18:32:40 <Vorpal> brb phone
18:32:43 <pikhq_> Unlike the usual scheme, where it can *and does* happen, unless you pay a lot of attention.
18:32:53 <elliott> Vorpal: I think the actual package manager comes down to a simple functional programming language, a constraint solver, exec(), and a huge standard library
18:33:04 <elliott> Well, fsvo huge
18:33:22 <elliott> But it looks like a language and an stdlib, which is far preferable to Debian
18:33:36 <elliott> Which is like the copy-and-paste coding of the package specification world
18:34:10 <elliott> Vorpal: Anyway, when you start tweaking with things like the libc, you blur the line between distro and LFS tool
18:34:13 <elliott> I think that's OK
18:34:40 <elliott> One thing that really annoys me about NixOS: Totally tied to upstart. No real way around it. With my system the upstart integration would be separate to the main packagse.
18:34:41 <elliott> packages.
18:34:52 <elliott> So you could load up a systemd repo on top of it, or whatever.
18:34:58 <elliott> And have that integrate with the packages.
18:35:33 <elliott> The defining mark of whether something is still truly Blah OS at the end of the day is, I think, whether anyone will bother giving you support :)
18:36:43 <zzo38> How do I make a list of all possible (non partial) functions from one type to another type if I have lists of all values of those types?
18:37:18 <elliott> zzo38: Get all lists of pairs of (A,B); use "lookup" appropriately
18:37:34 <elliott> Vorpal: Oh yeah, I think a killer feature that arises out of this model can be described in one line:
18:37:51 <elliott> Vorpal: cabal :: cabal-package-description -> pkg
18:38:18 <elliott> You can define systematic translations of other types into packages; another packaging format is just another type.
18:38:46 <Vorpal> back
18:39:10 <Vorpal> <pikhq_> There's absolutely no way for you to have a breaking ABI change actually break packages. <-- what about breaking API?
18:39:37 -!- Jafet has quit (Quit: Leaving.).
18:39:47 <Vorpal> <elliott> Which is like the copy-and-paste coding of the package specification world <-- hah, perfect description
18:40:13 <zzo38> elliott: And how do I do that?
18:40:35 <Vorpal> <elliott> So you could load up a systemd repo on top of it, or whatever. <-- while systemd seems nicer than upstart, it uses .ini style syntax iirc. I'm not too fond of that syntax.
18:40:44 <elliott> zzo38: Well... you can't. You can do all finite ones.
18:40:47 <elliott> Vorpal: Yeah, it was an example.
18:40:49 <Vorpal> while upstart has a really nice syntax
18:40:59 <zzo38> elliott: That is OK; I only need finite ones.
18:41:05 <Vorpal> upstart's syntax + systemd would be perfect
18:41:12 <elliott> zzo38: Well, a binary tree should do it
18:41:46 -!- copumpkin has changed nick to trololololo.
18:41:55 <elliott> zzo38: You have ValuesOf a => ValuesOf [a], right? For finite lists
18:42:06 <elliott> And (ValuesOf a, ValuesOf b) => ValuesOf [(a,b)]
18:42:11 <Vorpal> <elliott> You can define systematic translations of other types into packages; another packaging format is just another type. <-- hm, as long as you don't try to do this for debian packages. Those work in weird ways.
18:42:12 <elliott> So just get the values of [(a,b)] and use
18:42:13 <zzo38> elliott: Yes, I have those
18:42:14 <elliott> :t lookup
18:42:14 <lambdabot> forall a b. (Eq a) => a -> [(a, b)] -> Maybe b
18:42:31 <Vorpal> actually just the source packages
18:42:33 <elliott> (Nothing corresponds to an unhandled pattern)
18:42:47 <zzo38> Actually, I do not have ValuesOf a => ValuesOf [a] yet but I will put it on
18:42:48 <elliott> (you could use a cartesian product or something if you don't want those i guess...)
18:42:53 <elliott> Vorpal: Well, yes :)
18:43:03 <elliott> Vorpal: But the point is that you don't need to deal with any external package managers.
18:43:13 <elliott> You can just write an interpreter for them one and for all.
18:43:20 <Vorpal> elliott, automated translation of debian source packages would be.... interesting, but probably impossible
18:43:24 <elliott> Like cabal2arch and so on, but properly-typed, with real infrastructure.
18:43:38 <elliott> Vorpal: Well, you could do it, it just wouldn't integrate with any of the configuration or building
18:43:45 <Vorpal> obviously
18:43:47 <elliott> Vorpal: Remember, it can look like a compiler /or/ an interpreter :)
18:44:01 <Vorpal> elliott, the benefit would however be that you would get a HUGE package repo for free.
18:44:14 <elliott> Yeah. I don't think it's worth it for Debian packages though.
18:44:17 <elliott> Just too much cruft.
18:44:26 <elliott> If you used enough of them all the advantages of the system would disappear.
18:44:56 <elliott> Vorpal: One really desirable property about the system is, your package selections are basically a package themselves
18:45:06 -!- trololololo has changed nick to copumpkin.
18:45:09 <Vorpal> elliott, maybe doing it with a less... diverse package format would be worth it. PKGBUILDs tend to be quite straight-forward. And very few patches. So do .ebuilds to some degree, but with more patches.
18:45:14 <elliott> You just tell the system what packages you want, and that corresponds to the dependency specification of your system package
18:45:26 <elliott> And it just keeps that package installed
18:45:29 <elliott> Vorpal: Yes, indeed.
18:45:44 <elliott> Vorpal: Still, with the abstraction this system can offer, hand-writing packages shouldn't be too painful.
18:45:50 <Vorpal> hm
18:46:19 <elliott> Vorpal: Modulo package-specific configuration options that the distro provides (i.e. value-add type stuff), you could define a package in five lines under the assumption that it's "GNU-like"
18:46:34 <elliott> Because you can just implement handling for GNU-style packages once and reuse that elsewhere
18:46:44 <Vorpal> elliott, true, but it still takes work. This would offer quite a large selection of software during an early stage. That could be useful. Because even if it is simple it takes time to do stuff like finding out the url and the way to build the package and to test it.
18:46:54 <elliott> Yeah.
18:47:03 <elliott> I'd almost feel more like integrating inst(1) support, though :-)
18:47:17 <Vorpal> elliott, I'm not familiar with what inst(1) is
18:47:40 <elliott> My fun Python script that takes a URL to a source distribution and installs it into /opt/pkgname.
18:47:46 <elliott> It was /incredibly/ surprisingly successful.
18:47:52 <Vorpal> heh
18:47:59 <Vorpal> elliott, link?
18:47:59 <elliott> It could handle bash, perl, perl modules, C-INTERCAL, emacs, ...
18:48:13 <elliott> Although I had to fix the version parsing just for c-intercal
18:48:20 <Vorpal> of course
18:48:29 <Vorpal> elliott, what about clc-intercal?
18:48:30 <ais523> elliott: could it handle itself?
18:48:38 <elliott> Vorpal: Didn't try that, valued sanity a bit too much :P
18:48:43 <elliott> ais523: It was a Python script, so... no :-)
18:48:43 <Vorpal> hah
18:48:51 <Vorpal> elliott, well, got a link to it?
18:48:53 <elliott> Vorpal: http://sprunge.us/WCXI?python
18:48:54 <ais523> elliott: CLC-INTERCAL's build system is reasonably sane atm, I think
18:48:55 <elliott> Just found it
18:48:55 <Vorpal> thanks
18:49:02 <ais523> its version numbering isn't, ofc
18:49:06 <Vorpal> elliott, that is all!?
18:49:19 <elliott> Vorpal: It's not even close to complete, but it handles just about any orthodox package, plus quite a few that aren't
18:49:28 <ais523> does it still work on C-INTERCAL, btw?
18:49:36 <elliott> Vorpal: Try it on something (you can replace /opt with something else)
18:49:36 <Vorpal> elliott, what about nethack
18:49:40 <elliott> Hmmm
18:49:42 <elliott> Give it a shot
18:49:45 <elliott> I wouldn't count on it
18:49:56 <ais523> elliott: it won't work on vanilla NetHack, that requires manual configuration
18:49:59 <Vorpal> elliott, I very much doubt it, don't you need to manually copy a makefile to the root dir or something?
18:49:59 <ais523> it may well work on AceHack, though
18:50:02 <elliott> Darn
18:50:03 <Vorpal> and then edit a config.h
18:50:04 <elliott> ais523: Link to AceHack tarball
18:50:05 <Vorpal> or something
18:50:12 <ais523> elliott: err, I don't think there is one
18:50:19 <elliott> ais523: How do I obtain AceHack
18:50:23 <ais523> from the repo
18:50:25 <elliott> ais523: Link
18:50:35 <elliott> :P
18:50:35 <ais523> darcs get http://patch-tag.com/r/ais523/acehack
18:50:54 <ais523> I didn't have the link off-hand, so I said that to buy myself time to find it in my browser history
18:50:56 <Vorpal> elliott, hm, it depends on make install being well behaved. I seen make install install stuff outside /opt, like menu entires.
18:51:06 -!- nooga has joined.
18:51:10 <elliott> Vorpal: Yeah, chrooting or FUSE and the like would have followed
18:51:14 <ais523> the build system there comes from SLASH'EM and I haven't looked at it much
18:51:15 <nooga> that does it
18:51:17 <nooga> i died again
18:51:19 <elliott> [elliott@dinky inst]$ darcs get http://patch-tag.com/r/ais523/acehack
18:51:19 <elliott> bash: darcs: command not found
18:51:20 <elliott> Whoops
18:51:22 <Vorpal> elliott, you should start working on it again
18:51:24 <elliott> monqy: Oh hey
18:51:42 <elliott> Vorpal: I might, if it doesn't work on AceHack :)
18:52:08 * elliott installs darcs
18:52:09 <Vorpal> elliott, well, I meant chrooting or fusing it or whatever. Not sure fuse would have worked though, unless you fused / somehow
18:52:19 <Vorpal> elliott, install darcs with inst
18:52:29 <elliott> That would definitely not work.
18:52:35 <Vorpal> elliott, why not?
18:52:52 <elliott> Haskell build system is totally different... although darcs may be old enough to have makefiles
18:52:57 <Vorpal> heh
18:52:59 -!- Ngevd has quit (Quit: Leaving).
18:53:13 <elliott> ais523: Is it a big repo?
18:53:21 <ais523> not as large as some
18:53:28 <ais523> let me see if I can df it
18:53:30 <elliott> Would --lazy or --partial or w/e help
18:53:31 <ais523> umm, du it
18:53:39 <ais523> and probably
18:53:49 <Vorpal> 72 # I hate ais523
18:53:50 <Vorpal> what?
18:53:53 <Vorpal> elliott, ^
18:54:02 <elliott> Vorpal: that's the C-INTERCAL Version Number Memorial Version Number Parsing Function
18:54:06 <Vorpal> oh
18:54:10 <elliott> which I had to completely restructure because of its negative components
18:54:12 <nooga> I play Brogue
18:54:18 <ais523> elliott: 47MiB, apparently
18:54:23 <nooga> it's soooooo anoying
18:54:39 <Vorpal> that should only take a few minutes if the server can max out the bw
18:54:54 <ais523> I don't even know if 47MiB is big or small nowadays
18:54:58 <ais523> I'm a little out of touch with file sizes
18:55:14 <Vorpal> heh
18:55:23 <elliott> [elliott@dinky inst]$ rm -r acehack/_darcs
18:55:23 <elliott> [elliott@dinky inst]$ tar czf acehack.tar.gz acehack
18:55:23 <elliott> [elliott@dinky inst]$ ls -lh acehack.tar.gz
18:55:23 <elliott> -rw-r--r-- 1 elliott users 3.5M Oct 28 19:54 acehack.tar.gz
18:55:28 <elliott> time to upload thi so inst can download it
18:55:30 <elliott> s/thi/this/
18:55:33 <Vorpal> heh
18:55:41 <Vorpal> elliott, you need a local-testing thingy
18:55:42 <elliott> fuck it, I'll just patch inst to do files
18:55:53 <Vorpal> 99 if configure == 'Makefile.PL':
18:55:53 <Vorpal> 100 # I hate Perl programmers.
18:55:53 <Vorpal> 101 return []
18:55:54 <Vorpal> err
18:56:03 <ais523> elliott: do you have a webserver running on the system?
18:56:07 <ais523> you could just download from localhost
18:56:15 <elliott> oh good, curl supports file:///
18:56:22 <elliott> Vorpal: perl shit breaks with -j iirc
18:56:30 <Vorpal> elliott, ouch.
18:56:52 <Vorpal> elliott, you need to add some code to handle that erlang won't build with -j either. Broke recursive make I'm afraid.
18:56:54 <ais523> elliott: AceHack probably also breaks with -j, because I haven't redone the build system yet
18:56:58 <Vorpal> Broken*
18:57:03 <ais523> just used someone else's
18:57:04 <elliott> ais523: ugh, ok, I'll hack it out
18:57:09 <ais523> and I don't trust it to handle parallel make correctly
18:57:17 <Vorpal> ais523, switch to tup
18:57:32 <elliott> File "./inst", line 85
18:57:32 <elliott> print 'Perl program; no configuration available. Sorry!'
18:57:33 <elliott> ^
18:57:33 <elliott> SyntaxError: invalid syntax
18:57:33 <elliott> what.
18:57:43 <Vorpal> elliott, python 3?
18:57:46 <elliott> oh
18:57:49 <elliott> arch
18:57:52 <Vorpal> yes
18:57:54 <elliott> most fucking ridiculous decision
18:58:01 <ais523> should be print('…')?
18:58:02 <Vorpal> elliott, switch to python2 in the shebang
18:58:04 <elliott> yeah
18:58:10 <elliott> actually fuck it
18:58:12 <Vorpal> 124 if not path.startswith('http://') and not path.startswith('ftp://'):
18:58:13 <Vorpal> 125 print >>sys.stderr, 'Unsupported protocol.'
18:58:13 <Vorpal> 126 sys.exit(1)
18:58:13 <elliott> i'll just switch to print()
18:58:20 <elliott> how do you print to a file in python3 :P
18:58:21 <Vorpal> elliott, YOU FAIL AT GOPHER! :P
18:58:25 <elliott> Vorpal: oh snap so i do
18:58:27 <elliott> WILLFIX
18:58:28 <Vorpal> elliott, buggered if I know.
18:58:44 <elliott> oh, print(foo, file=blah)
18:58:58 <Vorpal> elliott, I doubt curl handles gopher btw, doing a system() on lynx might be your best bet
18:59:10 <ais523> elliott: wow that syntax looks ugly to me
18:59:19 <Vorpal> ais523, I think it is a named parameter
18:59:28 <ais523> even though it's one character off the conventional Perl for the same thing
18:59:30 <zzo38> Yes, there are other URI schemes than just http:// and ftp://
18:59:30 <ais523> print(foo, file => blah)
18:59:38 <ais523> actually, that looks somewhat ugly too
18:59:42 <zzo38> You should include gopher://
18:59:52 <zzo38> And if you want to access local files, file:///
18:59:56 <elliott> half way through I realise that 2to3 is at hing that exists
19:00:13 <Vorpal> elliott, 2to3 works surprisingly way in my experience
19:00:14 <zzo38> And possibly you might want to support https://
19:00:29 <Vorpal> and sftp://? And rsync://?
19:00:54 <Vorpal> and smb://, afp://, nfs:// (does that exist?)
19:00:55 <ais523> elliott: wouldn't 4to6 be more useful?
19:01:00 <zzo38> If you are using those
19:01:01 <elliott> ais523: give me a version number for acehack
19:01:07 <ais523> elliott: 3.6.0alpha
19:01:08 <zzo38> I don't know what all those things are
19:01:12 <Vorpal> ais523, ... stop it, you are not oerjan
19:01:25 <elliott> [elliott@dinky inst]$ ./inst file:///home/elliott/inst/acehack-3.6.0alpha.tar.gz
19:01:26 <elliott> * Downloading acehack 3.6.0alpha...
19:01:26 <elliott> ######################################################################## 100.0%
19:01:26 <elliott> that was quick
19:01:31 <ais523> reasonably sane numbering scheme?
19:01:40 <elliott> ais523: SIGH @ darcs doesn't get permissions
19:01:50 <pikhq_> Path to inst?
19:01:55 <ais523> elliott: indeed
19:01:58 <elliott> pikhq_: ?
19:02:05 <elliott> ais523: does sh ./perl-program work? i.e., does sh do shebangs?
19:02:07 <pikhq_> elliott: Hand me a URL for inst.
19:02:19 <elliott> pikhq_: http://sprunge.us/WCXI?python
19:02:19 <ais523> elliott: sh doesn't parse shebangs; perl does, though
19:02:28 <ais523> as in, perl ./x.sh will pass it to the shell if x starts #!/bin/sh
19:02:31 <elliott> ais523: ah, i'll just run perl then
19:02:37 <elliott> if configure == 'Makefile.PL':
19:02:37 <elliott> print('Perl program; no configuration available. Sorry!')
19:02:37 <elliott> else:
19:02:37 <elliott> run('perl', './' + configure, '--help')
19:02:41 <elliott> best thing i've ever written
19:02:42 <Vorpal> elliott, what if perl is not installed?
19:02:46 <ais523> that feature was apparently invented for just that situation
19:03:17 <ais523> If the #! line does not contain the word "perl", the program named after the #! is executed instead of the Perl interpreter. This is slightly bizarre, but it helps people on machines that don't do #!, because they can tell a program that their SHELL is /usr/bin/perl, and Perl will then dispatch the program to the correct interpreter for them.
19:03:27 <elliott> ais523: Vorpal: OK, here goes nothing
19:03:31 <elliott> [elliott@dinky inst]$ ./inst file:///home/elliott/inst/acehack-3.6.0alpha.tar.gz
19:03:31 <elliott> * Downloading acehack 3.6.0alpha...
19:03:31 <elliott> ######################################################################## 100.0%
19:03:31 <elliott> * Configuring acehack 3.6.0alpha...
19:03:31 <elliott> [elliott@dinky inst]$
19:03:37 <elliott> I guess it just... decided that was enough?
19:03:39 <Vorpal> elliott, what about... building?
19:03:43 <ais523> that was surprisingly fast
19:03:52 <ais523> it does need to be compiled, and is unlikely to compile that instantaneously
19:03:52 <Vorpal> elliott, or did you forget what the syntax were?
19:04:00 <elliott> Vorpal: no, something is wrong :P
19:04:06 <Vorpal> brb
19:04:08 <elliott> print >>sys.stderr, '* Building %s...' % (package,)
19:04:10 <elliott> 2to3
19:04:11 <elliott> i'm upset
19:04:28 -!- Phantom_Hoover has quit (Ping timeout: 240 seconds).
19:04:48 <elliott> here goes
19:05:01 <zzo38> I think now I made the function of equality of functions.
19:05:12 <zzo38> f == g = and $ uncurry (==) <$> zip (f <$> allValues) (g <$> allValues);
19:05:26 <elliott> ais523: oh, it, er, still quits after configuring
19:05:30 <elliott> I hope this isn't Python 3's fault
19:05:37 <ais523> try it on GNU hello just to check
19:05:42 <elliott> got a link?
19:06:20 <zzo38> f == g = (f <$> allValues) == (g <$> allValues);
19:06:30 <ais523> ftp://ftp.gnu.org/gnu/hello/hello-2.7.tar.gz
19:06:50 <ais523> hello exists to be the exemplary example of packaging practices
19:07:01 <ais523> and also, the exemplary example of things to practice packaging /on/
19:07:18 <Vorpal> what exactly is the point of a separate exec bit in the permissions on *nix
19:07:39 <ais523> Vorpal: to determine what files can and can't be executed?
19:07:39 <Vorpal> the only case I can think of where it makes sense would be for a suid -r+x
19:07:44 <elliott> flood time:
19:07:46 <elliott> [elliott@dinky inst]$ time ./inst ftp://ftp.gnu.org/gnu/hello/hello-2.7.tar.gz
19:07:46 <elliott> * Downloading hello 2.7...
19:07:46 <elliott> ######################################################################## 100.0%
19:07:46 <elliott> ######################################################################## 100.0%* Configuring hello 2.7...
19:07:46 <elliott> * Building hello 2.7...
19:07:47 <elliott> * Installing hello 2.7...
19:07:49 <elliott> Password:
19:07:51 <elliott> * Installed hello 2.7.
19:07:53 <Vorpal> ais523, yes but why not just tie it into +r
19:07:53 <elliott> real0m25.532s
19:07:55 <elliott> user0m7.696s
19:07:56 <ais523> Vorpal: +r-x?
19:07:57 <elliott> sys0m4.226s
19:07:59 <elliott> [elliott@dinky inst]$ ls opt/hello-2.7
19:08:00 <ais523> that's a really plausible combination
19:08:01 <elliott> bin share
19:08:03 <elliott> [elliott@dinky inst]$ opt/hello-2.7/bin/hello
19:08:05 <elliott> Hello, world!
19:08:07 <elliott> curl output got a bit messed upt here
19:08:10 <Vorpal> ais523, and why does it matter that it is executable
19:08:12 <Vorpal> really
19:08:16 <elliott> ais523: ok, acehack is messing something up :)
19:08:20 <ais523> Vorpal: tab-completion on things to execute?
19:08:22 <ais523> elliott: it doesn't surprise me
19:08:31 <ais523> redoing the build system isn't a high priority, but is on the mental list
19:08:31 <elliott> ais523: it shouldn't be able to crash inst silently
19:08:35 -!- Phantom_Hoover has joined.
19:08:35 <elliott> that's a bug in inst
19:08:38 <Vorpal> ais523, but why would something other than a bin directory be in PATH?
19:08:50 <ais523> Vorpal: doesn't need to be at the start of the line
19:08:57 <ais523> if I type ./tab tab
19:09:05 <ais523> then I want a list of all the executables in the current directory
19:09:06 <elliott> checking whether to enable xlogfile... yes (file xlogfile)
19:09:06 <elliott> checking whether to enable wizmode... yes (user wizard)
19:09:06 <elliott> checking for owner of installed files... configure: error: in `/tmp/inst-work-c6g7hf/tree/acehack':
19:09:06 <elliott> configure: error: test for user games failed
19:09:06 <elliott> See `config.log' for more details.
19:09:09 <elliott> ais523: help
19:09:11 <Vorpal> ais523, hm true
19:09:23 <ais523> elliott: it seems that it defaults the user who owns the scorefile to "games"
19:09:28 <ais523> and that that user doesn't exist on the system
19:09:38 <elliott> if status > 0:
19:09:38 <elliott> if verbose:
19:09:38 <elliott> sys.stderr.write(open(work + '/build.log').read())
19:09:38 <elliott> print('\nThis log has been written to %s/build.log.'
19:09:38 <elliott> % (work,), file=sys.stderr)
19:09:39 <elliott> sys.exit(1)
19:09:43 <elliott> wait, why would I only print errors when verbose?
19:09:44 * elliott fixes
19:10:00 <elliott> oh, hmm
19:10:01 <elliott> I see
19:10:20 <zzo38> How can you have a beautiful ending without making beautiful mistakes?
19:10:24 <ais523> I'm not sure if that's a bad default, or a case where automatic installation isn't possible
19:10:32 <elliott> ais523: it's ok: inst takes configure options
19:10:39 <elliott> ais523: inst pretends to be the package configure, in fact
19:10:42 <elliott> you can pass it --help
19:10:48 <ais523> elliott: --with-user=anything --with-group=anything
19:10:52 <elliott> thanks
19:10:55 <ais523> where anything should be appropriate
19:10:57 <Vorpal> elliott, does it cache the downloaded package or does it re-download it every time?
19:11:06 <ais523> umm, --with-owner
19:11:09 <ais523> not --with-user
19:11:10 <elliott> Vorpal: re-download for now :) but this is from file:///
19:11:15 <Vorpal> right
19:11:38 <elliott> OK, let's try this again.
19:11:52 <elliott> [elliott@dinky inst]$ time ./inst file:///home/elliott/inst/acehack-3.6.0alpha.tar.gz
19:11:52 <elliott> * Downloading acehack 3.6.0alpha...
19:11:52 <elliott> ######################################################################## 100.0%
19:11:52 <elliott> * Configuring acehack 3.6.0alpha...
19:11:52 <elliott> Command failed with status 1. A log has been written to /tmp/inst-work-jrdpdx/build.log.
19:11:54 <elliott> real0m5.194s
19:11:55 <elliott> user0m3.256s
19:11:57 <elliott> sys0m1.010s
19:11:59 <elliott> that's more reasonable
19:12:05 <ais523> yep
19:12:06 <Vorpal> elliott, btw, wrt your future distro above, maintaining a distro is a lot of work. Keeping track of hundreds of mailing lists and what not to get notified when new versions of packages are released
19:12:09 <ais523> what was the error?
19:12:16 <elliott> Vorpal: oh, I know full well
19:12:25 <ais523> Vorpal: Debian uses daemons to watch that, rather than humans
19:12:27 <elliott> ais523: the one i pasted above
19:12:39 <ais523> elliott: I mean, in /tmp/inst-work-jrdpdx/build.log
19:12:40 <elliott> Vorpal: do you think it's coincidental that almost every package will be only a dozen or so lines long with this system? :-)
19:12:42 <Vorpal> ais523, that might be hard for some packages.
19:12:49 <Vorpal> elliott, XD
19:12:49 <elliott> ais523: it's just configure's output
19:12:53 <ais523> elliott: well, yes
19:12:54 <elliott> checking whether to enable wizmode... yes (user wizard)
19:12:54 <elliott> checking for owner of installed files... configure: error: in `/tmp/inst-work-jr
19:12:54 <elliott> dpdx/tree/acehack':
19:12:54 <elliott> configure: error: test for user games failed
19:12:54 <elliott> See `config.log' for more details.
19:12:55 <Vorpal> elliott, what about the kernel? I bet that will be more
19:13:02 <ais523> elliott: OK, that's bizarre
19:13:06 <elliott> ais523: howso?
19:13:10 <elliott> that's what you saw before
19:13:15 <elliott> you didn't react to it oddly then...
19:13:18 <elliott> ok, let's try this with the options ais523 gave
19:13:22 <Vorpal> heh
19:13:24 <ais523> ah, I thought you'd done it with the options
19:13:29 <ais523> and was wondering why it was ignoring them
19:14:02 <elliott> failed again with same error
19:14:05 <ais523> $ ./config.status --config
19:14:05 <elliott> [elliott@dinky inst]$ time ./inst file:///home/elliott/inst/acehack-3.6.0alpha.tar.gz --with-owner=anything --with-group=anything
19:14:06 <ais523> '--enable-wizmode=ais523' '--with-owner=ais523' '--with-group=ais523' '--prefix=/home/ais523/acehack/build'
19:14:15 <ais523> elliott: well, "anything" probably isn't a valid owner either
19:14:17 <Vorpal> elliott, you need to fill in relevant values for anything
19:14:18 <elliott> ais523: oh
19:14:19 <elliott> dur :P
19:14:23 <elliott> i thought that was a wildcard
19:14:26 <Vorpal> elliott, now hit any key
19:14:30 <elliott> [any key]
19:14:32 <zzo38> I still don't know how to make the list of all functions.
19:14:32 <ais523> not that one!
19:14:38 <Vorpal> XD
19:14:53 <elliott> ais523: same even with --with-owner=elliott --with-group=elliott
19:14:59 <ais523> hmm, bizarre
19:15:02 <ais523> I guess it's an Ace bug
19:15:03 <Vorpal> zzo38, nm path-to-ELF-file-that-isnt-stripped.o ?
19:15:06 <ais523> but this possibly isn't a good time to look into it
19:15:17 <elliott> oh, wait
19:15:19 <zzo38> Vorpal: Not what I meant
19:15:21 <elliott> ais523: does perl pass along command line args?
19:15:24 <elliott> perl ./configure foo bar
19:15:26 <elliott> to shell scripts
19:15:31 <ais523> elliott: I don't know, but it should be easy enough to check
19:15:37 <zzo38> I meant in Haskell, like [a -> b]
19:15:44 <ais523> elliott: yes, it does
19:15:46 <elliott> hmm, yes
19:15:47 <elliott> darn
19:15:52 <elliott> that's not the problem then
19:15:58 <elliott> oh
19:15:59 <elliott> DURRR
19:16:02 <Vorpal> what?
19:16:07 <elliott> def run_configure(*args, **kwargs):
19:16:07 <elliott> global configure
19:16:07 <elliott> prefix = kwargs['prefix']
19:16:07 <elliott> if configure == 'Makefile.PL':
19:16:07 <elliott> run_silent('perl', configure, 'INSTALL_BASE=' + prefix)
19:16:07 <elliott> else:
19:16:09 <elliott> run_silent('perl', './' + configure, '--prefix=' + prefix)
19:16:13 <elliott> noticable lack of ACTUALLY USING THE ARGUMENTS
19:16:15 <ais523> yep
19:16:18 <Vorpal> yeah
19:16:23 <elliott> how did that slip past m
19:16:23 <elliott> e
19:16:35 <ais523> zzo38: just enumerate all possible files, in length-then-asciibetical order
19:16:43 <ais523> and discard the ones that don't describe exactly one function
19:16:46 <ais523> then remove duplicates
19:16:52 <elliott> configure: error: test for group elliott failed
19:16:52 <elliott> lol
19:16:56 <elliott> ok elliott:users it is
19:17:08 <elliott> [elliott@dinky inst]$ time ./inst file:///home/elliott/inst/acehack-3.6.0alpha.tar.gz --with-owner=elliott --with-group=users
19:17:09 <elliott> * Downloading acehack 3.6.0alpha...
19:17:09 <elliott> ######################################################################## 100.0%
19:17:09 <elliott> * Configuring acehack 3.6.0alpha...
19:17:09 <elliott> * Building acehack 3.6.0alpha...
19:17:10 <Vorpal> elliott, I bet it will install to /var too
19:17:10 <elliott> woo!
19:17:17 <elliott> Vorpal: ugh
19:17:22 <elliott> ais523: does it go outside --prefix
19:17:24 <Vorpal> elliott, normal nethack would
19:17:26 <zzo38> ais523: Files? It isn't files.
19:17:34 <ais523> --localstatedir=DIR modifiable single-machine data [PREFIX/var]
19:17:39 <elliott> phew
19:17:39 <ais523> elliott: not unless it's buggy
19:17:39 <Vorpal> ais523, ah nice
19:18:01 <ais523> zzo38: but a file can describe a function; and it's easier to enumerate files, then to enumerate functions
19:18:19 <Vorpal> elliott, btw I would switch cfunge to tup if only where was a nice configuring system that fit seamlessly with tup
19:18:24 <Vorpal> and no not kconfig
19:18:36 <ais523> elliott: I'm reasonably sure it doesn't go outside the prefix, as I've installed it as non-root before
19:18:38 <Vorpal> most of it is auto detection, and it isn't all that many options to warrant kconfig
19:18:41 -!- tiffany has joined.
19:18:42 <ais523> to inside my home dir
19:18:49 <elliott> Vorpal: yeah well i've considered working on something like that
19:18:53 <elliott> Vorpal: but it should still be kconfig-based
19:18:54 <elliott> as in the format
19:19:09 <elliott> [elliott@dinky inst-work-1_vxz8]$ ls
19:19:09 <elliott> acehack-3.6.0alpha.tar build.log tree
19:19:09 <elliott> [elliott@dinky inst-work-1_vxz8]$ ls tree
19:19:09 <elliott> acehack
19:19:09 <elliott> this is what it looks like in the work dirs, btw
19:19:12 <elliott> ais523: yay, it failed
19:19:20 <elliott> make[1]: *** No rule to make target `rumors.c', needed by `rumors.o'. Stop.
19:19:34 <zzo38> ais523: I have [x] which list all possible value of [x], [y] which list all possible value of [y], I should make [x -> y] list all possible value of (x -> y) is what I meant. (Ignoring all undefined values)
19:19:39 <Vorpal> elliott, sure, but what I need is basically stuff like "detect if we have that header" or "I want to know if we have this function, and it might be in libc or in librt, because fuck freebsd"
19:19:52 <ais523> elliott: I wonder why /that/ one? it's not the first to be compiled
19:19:52 <Vorpal> or fuck linux, the point is, it differs
19:19:54 <elliott> Vorpal: autoconf actually works for this with tup :p
19:20:10 <ais523> zzo38: it's probably a bad idea
19:20:17 <Vorpal> elliott, but I haven't seen any guide to how to make autoconf fit with tup
19:20:21 <ais523> there are an infinite number of possibilities
19:20:24 <elliott> Vorpal: pikhq_ did it
19:20:30 <elliott> ais523: http://sprunge.us/DcHH
19:20:33 <elliott> (short)
19:20:37 <zzo38> ais523: I am using only finite types, though.
19:20:38 <Vorpal> pikhq_, got a link to details on how to fit autoconf with tup?
19:20:40 <ais523> Vorpal: don't see autoconf as a magic black box; learn how it works
19:20:48 <Vorpal> ais523, that sounds like a lot of work
19:20:51 <ais523> zzo38: oh, in that case, it's finite, just incredibly large
19:20:51 <zzo38> And only functions that halt.
19:20:56 <ais523> Vorpal: but it's the only way to use it correctly
19:21:13 <ais523> elliott: it's as if there's a file missing from the tarball
19:21:20 <ais523> let me make sure it's in the repo
19:21:22 <Vorpal> ais523, well then, I need a simpler system. I'm just not going to invest the time into learning m4 and so on
19:21:23 <elliott> ais523: possible, darcs was a bit funny about it
19:21:25 <zzo38> Yes, I think for (x -> y) it will be $y^x$ so yes it will be large
19:21:28 <elliott> I'll re-check out
19:21:49 <ais523> yep, it's in the repo all right
19:22:35 <tswett> elliott: fhpxref!
19:22:43 <ais523> perhaps something autocorrected "rumors.c" to "rumours.c"?
19:23:01 <elliott> ais523: ok, it's going again
19:23:06 <tswett> elliott: so, uh, wasn't there some sort of Homestuck IRC channel?
19:23:12 <elliott> ah, my acehack tarball is bigger now
19:23:15 <elliott> that's reassuring
19:23:35 <elliott> tswett: I would put the probability of that at somewhere around p=9.
19:23:37 <elliott> Out of 1.
19:24:18 <tswett> elliott: so you'd gladly agree to give me a dollar if there is such a channel, and a million dollars if there is no such channel.
19:24:41 <elliott> tswett: Yes. What's your PayPal.
19:24:51 <ais523> elliott: read the bet again
19:24:54 <tswett> Since your net gain is (-1)*9 + (-1000000)*(-8) = 7999991, if I calculate correctly.
19:25:00 <elliott> ais523: I know what the bet says.
19:25:02 <ais523> oh, right
19:25:16 -!- sllide has joined.
19:25:23 <elliott> [elliott@dinky inst]$ time ./inst file:///home/elliott/inst/acehack-3.6.0alpha.tar.gz --with-owner=elliott --with-group=users
19:25:23 <elliott> * Downloading acehack 3.6.0alpha...
19:25:23 <elliott> ######################################################################## 100.0%
19:25:23 <elliott> * Configuring acehack 3.6.0alpha...
19:25:23 <elliott> * Building acehack 3.6.0alpha...
19:25:23 <ais523> what a bizarre way for probabilities to work
19:25:24 <elliott> * Installing acehack 3.6.0alpha...
19:25:26 <elliott> Password:
19:25:28 <elliott> * Installed acehack 3.6.0alpha.
19:25:30 <elliott> real2m23.732s
19:25:31 <ais523> yay
19:25:32 <elliott> user2m7.545s
19:25:34 <elliott> sys0m7.546s
19:25:36 <elliott> [elliott@dinky inst]$ ls opt/acehack-3.6.0alpha
19:25:38 <ais523> 2 minutes for a full rebuild isn't bad
19:25:38 <elliott> acehackdir bin
19:25:42 <elliott> ais523: so the answer is "yep, inst does acehack, given a system with the right groups"
19:25:42 <tswett> Well, 9 is a bizarre probability.
19:25:50 <elliott> ais523: hold on, we haven't made sure it works yet
19:25:55 <elliott> ais523: also, wtf kind of dirname is acehackdir?
19:26:00 <elliott> that doesn't fit in any filesystem standard
19:26:04 <ais523> also, "acehack's configure file creates a new directory directly under /usr"
19:26:16 <elliott> ais523: yes, that's a good bug title
19:26:17 * ais523 mentally yells at the SLASH'EM devs
19:26:47 <ais523> the directory can't be placed anywhere under the FHS, incidentally; some of it belongs in /usr, some in /var, some even in /var/run
19:26:54 <ais523> I need to do proper moving of files to the right place
19:26:55 <elliott> you mean /run
19:26:55 <tswett> elliott: do you happen to remember the server this channel was on?
19:27:02 <tswett> What am I kidding. I can find it as long as it was mentioned in here.
19:27:04 <tswett> Ever.
19:27:05 <ais523> elliott: there is no /run
19:27:09 <elliott> ais523: you are wrong
19:27:14 <ais523> really?
19:27:22 <elliott> ais523: recently accepted addition, replacing /var/run
19:27:26 <ais523> $ ls /run
19:27:27 <elliott> as well as some other parts of /var I think
19:27:27 <ais523> ls: cannot access /run: No such file or directory
19:27:29 <ais523> ah, interesting
19:27:32 <elliott> ais523: it's in latest ubuntu
19:27:34 <elliott> and debian
19:27:35 <elliott> and arch
19:27:37 <elliott> and everything
19:27:37 <Vorpal> <ais523> also, "acehack's configure file creates a new directory directly under /usr" <--- .... what?
19:27:42 <ais523> so I'd need to have a fallback
19:27:43 <Vorpal> ais523, ever heard of /etc?
19:27:44 <ais523> Vorpal: it's a bug, OK?
19:27:51 <ais523> and no, /etc is not the right place to put it either
19:27:52 <Vorpal> ais523, ah
19:28:08 <elliott> ais523: Vorpal: http://i.imgur.com/qguK0.png
19:28:23 <ais523> that's what it's meant to look like, at least
19:28:25 <Vorpal> <elliott> ais523: recently accepted addition, replacing /var/run <-- well, that is new. is it FHS?
19:28:29 <elliott> Vorpal: yes
19:28:34 <elliott> well
19:28:36 <elliott> to be published
19:28:39 <Vorpal> elliott, when did that happen. None of my systems have it
19:28:47 <elliott> Vorpal: recently
19:28:53 <elliott> this year
19:29:10 <elliott> ais523: cool, it's a full moon
19:29:14 <Vorpal> elliott, anyway if arch have it I need to clean up that mess. Because of how my partitions are set up it doesn't make sense.
19:29:18 <elliott> thanks acehack
19:29:24 <elliott> Vorpal: no, it does make sense
19:29:34 <Vorpal> elliott, yes but not wrt my partitions
19:29:34 <elliott> Vorpal: what doesn't make sense is /var containing both volatile and non-volatile data
19:29:34 <ais523> elliott: lucky!
19:29:47 <elliott> Vorpal: see http://wiki.debian.org/ReleaseGoals/RunDirectory
19:29:52 <Vorpal> elliott, / is on an SSD, /var is not
19:29:55 <ais523> Vorpal: further evidence is that /var is on a different filesystem to /var/run on this system
19:30:08 <Vorpal> ais523, oh, tmpfs?
19:30:13 <Vorpal> makes sense I guess
19:30:25 <ais523> yep
19:30:25 <Vorpal> since it is mostly pid files and sockets
19:30:26 <elliott> Vorpal: run on /run type tmpfs (rw,nosuid,nodev,relatime,size=10240k,mode=755)
19:30:30 <elliott> /run _is_ a tmpfs
19:30:42 <Vorpal> elliott, right
19:30:46 <Vorpal> that works then
19:31:04 <elliott> ais523: I can confirm that AceHack works
19:31:17 <ais523> yay
19:31:40 <Vorpal> elliott, fully? Does saving and exiting work?
19:31:54 <Vorpal> elliott, does score file work if you die?
19:32:05 <Vorpal> (easier to check than ascending!)
19:32:06 <ais523> Vorpal: it tries to write an insurance lockfile as soon as you start playing
19:32:11 <ais523> and that goes to the same place as save files
19:32:14 <elliott> Vorpal: I'm dying now
19:32:18 <ais523> so it'd be shocking if one worked but not the other
19:32:19 <elliott> I prayed a few times
19:32:24 <Vorpal> elliott, hah
19:32:41 <Vorpal> ais523, well, it is quite possible. Disk full for example
19:32:49 <ais523> Vorpal: and that's inst's fault how?
19:32:52 <Vorpal> ais523, no
19:32:56 <Vorpal> but I meant in general
19:33:16 <elliott> wow, my god sends the shittiest death threats
19:33:24 <Vorpal> oh?
19:33:37 <elliott> well i've currently outrun it for like a hundred turns :P
19:33:47 <ais523> what is it?
19:33:51 <Vorpal> elliott, no disintegration beam?
19:34:00 <elliott> the couatl of amaterasu omikami
19:34:05 <ais523> btw, once you get a negative prayer effect, you'll get nothing but negatives until you atone
19:34:07 <Vorpal> elliott, sam?
19:34:08 * elliott prays again with 1 hp for shits and giggles
19:34:09 <ais523> ah, right
19:34:22 <elliott> oh well, i died
19:34:40 <Vorpal> <ais523> btw, once you get a negative prayer effect, you'll get nothing but negatives until you atone <-- I thought there was a timeout? Or is this behaviour new in acehack?
19:34:52 <Vorpal> elliott, sam?
19:35:02 <elliott> hi
19:35:06 <Vorpal> ...
19:35:10 <Vorpal> elliott, I asked if you played sam
19:35:13 <ais523> Vorpal: no, it's in vanilla too
19:35:18 <Vorpal> ais523, heh
19:35:23 <ais523> the timeout's on positive effects
19:35:23 <elliott> Vorpal: yes, I just accepted the defaults
19:35:28 <Vorpal> ah I see
19:35:31 <ais523> elliott: the defaults are random each time
19:35:34 <Vorpal> elliott, did the score work if you look at it?
19:35:54 <elliott> how do you check scores without playing again?
19:36:03 <Vorpal> good question, I never did
19:36:09 <ais523> elliott: there's a scores option in the main menu
19:36:15 <elliott> ah, thanks
19:36:20 <elliott> yep
19:36:40 <ais523> eventually, I'll make the game return to the main menu after you die or win
19:36:46 <Vorpal> what distros use systemd btw?
19:36:47 <ais523> probably via self-exec()
19:36:47 <elliott> ais523: I think you should probably default to something else if games doesn't exist
19:36:53 <ais523> elliott: so do I, but I'm not sure what
19:37:01 <elliott> ais523: root? user running ./configure?
19:37:01 <ais523> root is a security risk
19:37:04 <Vorpal> ais523, self-exec()... Won't that mess with the sgid?
19:37:08 <ais523> user running configure might make sense
19:37:09 <elliott> (probably latter)
19:37:17 <elliott> Vorpal: fedora
19:37:19 <elliott> and i think suse
19:37:21 <elliott> so, nobody
19:37:30 <Vorpal> elliott, right, so two horrible distros
19:37:35 <ais523> Vorpal: I don't see why not; you can exec an sgid file even if you already have group perms
19:37:37 <elliott> well, linus uses fedora :)
19:37:43 <ais523> and even if you couldn't, you can just drop them first
19:38:11 <ais523> *you could just drop them first
19:38:16 <Vorpal> ais523, won't it mess up the real gid or the egid or whichever one point to the group that was before the sgid took place?
19:38:29 <elliott> incidentally, I think inst could be legitimately useful if it spit out a package rather than doing the installation immediately
19:38:35 <Vorpal> elliott, I thought he switched some time ago? Might misremember
19:38:40 <ais523> Vorpal: real gid, yes; I don't think that's used for anything, though
19:38:41 <elliott> it'd be like checkinstall, except not terrible
19:39:47 <elliott> have i noticed that monqy is here yet
19:39:49 <elliott> because hi monqy
19:39:57 <Vorpal> elliott, I think it is quite useful already. I tend to install stuff I install manually to ~/local/<optional category, only have "games" and "compilers" currently>/package-name/<optional version, if it is useful for the package in question>/
19:40:30 <elliott> well, it's useful :) but it doesn't handle the failure case much
19:40:31 <Vorpal> elliott, you did way above
19:40:41 <elliott> when it works, it works brilliantly
19:40:59 * pikhq_ tends to install things in ~/local/stow/packagename-version/
19:41:13 <Vorpal> pikhq_, what about tup + autoconf. I never saw a reply to my question about that
19:41:20 <pikhq_> Vorpal: What about it?
19:41:24 <elliott> stow: because I want _two_ package managers in my life
19:41:38 <Vorpal> pikhq_, how is it done. I'm no autoconf wizard, not do I feel like becoming one just for that,.
19:41:40 <Vorpal> s/,//
19:41:49 <elliott> Vorpal: hmm, now i'm wondering if the configuration management system could be a build system too :)
19:41:50 <pikhq_> elliott: I'm also currently using shell scripts to build. So, more like 1.
19:41:55 <elliott> there's dependencies, and constraint solving, and configuration...
19:41:57 <Vorpal> elliott, stow being?
19:42:06 <ais523> wow that was blindingly fast
19:42:07 <elliott> Vorpal: gnu stow
19:42:10 <ais523> I just sent around 100 emails in a few seconds
19:42:12 <pikhq_> Vorpal: It's actually really, really simple. You have autoconf replace variables in a Tup file of some sort.
19:42:13 <elliott> as referenced at * pikhq_ tends to install things in ~/local/stow/packagename-version/
19:42:26 <Vorpal> ais523, you started spamming?
19:42:37 <ais523> Vorpal: no, although I think the module I'm using was designed for spambots
19:42:41 <ais523> I'm sending personalised receipts
19:42:46 <pikhq_> elliott: If I had a better package manager for ~/local/, I'd use it. As is, GNU stow is (barely) sufficient for my uses.
19:42:47 <ais523> for submissions
19:42:49 <Vorpal> https://en.wikipedia.org/wiki/GNU_Stow <-- "this page has been deleted", fuck you
19:43:25 <elliott> Vorpal: the site describes it
19:43:31 <Vorpal> elliott, right
19:43:38 <elliott> Vorpal: it basically merges a bunch of DESTDIR installs into a single tree
19:43:41 <elliott> with links
19:43:56 <Vorpal> <pikhq_> Vorpal: It's actually really, really simple. You have autoconf replace variables in a Tup file of some sort. <-- oh okay
19:44:02 <pikhq_> (autoconf, FWIW, is actually *very* build-system agnostic. *All* it does is test things, storing the results in variables, and replacing those variables in a given list of files)
19:44:02 <Vorpal> pikhq_, what about any config.h or such?
19:44:16 <ais523> I wrote an autoconf script for jettyplay
19:44:26 <Vorpal> ais523, what is jettyplay?
19:44:27 <ais523> so that it would be easily picked up by autobuildy sytems
19:44:32 <ais523> Vorpal: GUI ttyrec player
19:44:34 <ais523> written in Java
19:44:34 <elliott> ais523: tarball link plz
19:44:37 <Vorpal> hm I see
19:44:47 <ais523> elliott: I don't think I have online tarballs of it
19:44:50 <ais523> just jar files
19:44:51 <elliott> darn
19:44:58 <ais523> it was basically just written for debhelper
19:45:02 <elliott> heh
19:45:14 <elliott> oh, i might as well ask -
19:45:26 <Vorpal> what is debhelper? Another one of their automated package construction tools?
19:45:29 <ais523> Vorpal: yes
19:45:34 <elliott> it's debian's main package construction tool
19:45:37 <elliott> i believe
19:45:41 <pikhq_> Vorpal: There's some command to tell autoconf to do the config.h substitution.
19:45:46 <ais523> elliott: I can nc you the tarball that got produced when I did the local equivalent of apt-get source
19:45:51 <ais523> if you can open a port inbound
19:45:59 <elliott> ais523: umm, maybe, but not this second
19:46:02 <ais523> fair enough
19:46:14 <Vorpal> elliott, idea for inst feature: git, svn, hg, darcs, bzr support. The handling of different types could probably be done with a dict in python, making it trivial to add new ones
19:46:21 <elliott> anyway - does anyone know of a unified command to access unarchivers? I really want to be able to just type a command, an archive name, and have it extract, accounting for tarbombs
19:46:27 <Vorpal> pikhq_, hm as long as it works with tup
19:46:39 <elliott> Vorpal: I know how to write extensible software :)
19:46:44 <pikhq_> Vorpal: Not as nicely as it *could*, but it does work.
19:47:05 <pikhq_> elliott: 7z is close, but not *quite* there.
19:47:12 <pikhq_> It doesn't handle tarbombs.
19:47:26 <Vorpal> elliott, I seem to remember such a tool in portage somewhere. And portage has its own one as a bash function somewhere to help unpack for ebuilds
19:47:32 <zzo38> You can use the l option of 7z to display the list
19:47:41 <ais523> you can handle tarbombs automatically by untarring in an empty directory, then removing one level of directory structure if necessary
19:47:48 <elliott> ais523: that's the idea
19:47:55 <pikhq_> zzo38: Not helpful if you want it to be automatic.
19:47:58 <elliott> I suppose I could just do tar -> unzip -> unrar
19:48:02 <zzo38> OK
19:48:05 <ais523> so you can do the tarbomb protection and unified unarchiver separately
19:48:05 <elliott> tar detects compression, after all
19:48:12 <Vorpal> elliott, pretty sure 7z handles zip and rar as well as tar.gz
19:48:13 <ais523> elliott: really?
19:48:21 <elliott> ais523: yep, "tar xf foo.tar.blah" works just fine
19:48:22 <ais523> I thought you had to give an appropriate option character
19:48:23 <pikhq_> ais523: GNU tar and Busybox tar do, at least.
19:48:24 <elliott> you're welcome
19:48:28 <ais523> good to know
19:48:31 <Vorpal> elliott, actually 7z might just unpack the .gz level of a tar.gz, not the tar level as well
19:48:38 <Vorpal> elliott, I know the windows 7-zip does that
19:48:39 <elliott> 7z is so windowsy :(
19:48:42 <ais523> I'll still add the z because my tab-complete likes it, though
19:48:46 <Vorpal> elliott, there is that yes
19:48:55 <zzo38> Yes, 7z does just unpack the .gz level
19:49:00 <zzo38> You have to unpack the .tar separately
19:49:06 <pikhq_> That's moronic.
19:49:08 <zzo38> I have the command-line 7z
19:49:09 <Vorpal> yes
19:49:21 <ais523> hmm, what about, say, if there's a .jar in a .zip
19:49:26 <ais523> you don't want to unpack two levels then
19:49:36 <zzo38> You have to unpack all levels separately.
19:49:36 <pikhq_> ais523: That itself is pretty moronic. :)
19:49:39 <Vorpal> indeed, but tar.gz is quite a special case
19:49:44 <ais523> I'd say, stop unpacking as soon as you see any files that aren't compressed
19:49:50 <ais523> even if there are compressed files in the directory too
19:49:51 <zzo38> And I like it unpacking all levels separately I prefer this way.
19:49:54 <elliott> what about .gz.tar?
19:49:55 <Vorpal> pikhq_, not really, if you want to distribute a collection of .jars as one file, how would you do that
19:50:02 <ais523> elliott: my suggestion handles .gz.tar
19:50:05 <zzo38> Although it could be an option to unpakc multiple levels maybe there should be that one.
19:50:08 <Vorpal> elliott, what about anything packed by Xilinx?
19:50:16 <elliott> ais523: are we talking about the same .gz.tar?
19:50:22 <ais523> Vorpal: from my experience with Xilinx, it's probably insane
19:50:27 <Vorpal> ais523, yes
19:50:28 <ais523> elliott: gzip each file individually, then tarball the result?
19:50:31 <elliott> ais523: yep
19:50:35 <ais523> you'd see that /all/ the files are compressed/archived
19:50:41 <ais523> so you'd decompressarchive them all one level
19:50:46 <ais523> if there's a mix, you don't decompressarchive any of them
19:51:03 <Vorpal> ais523, I don't quite remember, it was some time ago. But I think it was bz2.rar.zip.tar.gz basically
19:51:03 <ais523> it's basically a heuristic for detecting whether the files are meant to stay compressed or not
19:51:10 <ais523> Vorpal: that's impressive
19:51:15 <zzo38> I think it should unpack only one level by default, but have an option to select how many levels you want
19:51:18 <Vorpal> ais523, might misremember the .rar level, could have been another tar
19:51:21 <Vorpal> or something
19:51:28 <elliott> Vorpal: hmm, where should I put the source directories for arch packages I create myself?
19:51:34 <elliott> I just created a haskell-groom/ dir with cabal2arch
19:51:36 <ais523> elliott: /usr/src?
19:51:40 <elliott> but am not sure where to put it for permanent storage
19:51:43 <ais523> -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
19:51:44 <elliott> ais523: plausible
19:51:56 <Vorpal> elliott, hm? ~/src/system/foo/PKGBUILD is what I use
19:52:01 <Vorpal> elliott, but that is my system
19:52:06 <Vorpal> elliott, or what do you mean
19:52:10 <elliott> was just wondering if there was a standard location
19:52:18 <Vorpal> elliott, if you find one, tell me
19:52:25 <elliott> Vorpal: probably somewhere in ABS or something :P
19:52:34 * elliott considers going back to his his hierarchy-free home directory system
19:52:35 <Vorpal> elliott, doubtful, abs is updated by rsync
19:52:39 <ais523> jettyplay-0.1~alpha1/src/jettyplay/InputStreamableFileContentsWrapper.java
19:52:48 <ais523> ah, the joys of Java
19:52:58 <Vorpal> ais523, what a horribly long class name
19:53:09 <ais523> my homedir uses a reasonably simple and consistent filing system
19:53:09 <ais523> just to help me find things quickly
19:53:12 <ais523> it's about "what will ais523 remember" more than anything else
19:53:25 <Vorpal> yeah I do the same, modulo person who is to remember
19:53:29 <ais523> Vorpal: it's a wrapper around FileContents so that it implements InputStreamable
19:53:46 <ais523> I'm not entirely sure that it could be easily shortened and still describe what it does that accurately
19:53:46 <Vorpal> except I end up with lot of temporary crap in ~ that I forget to remove
19:53:59 <elliott> Vorpal: also, what AUR helper do you use, if any
19:54:01 <Vorpal> like whatever.mp4 from youtube-dl and so on
19:54:13 <elliott> <Vorpal> except I end up with lot of temporary crap in ~ that I forget to remove
19:54:17 <elliott> this is what my hierarchy-free system solved
19:54:22 <zzo38> If I make the Haskell library to access DVI printing file, what would it be called and what namespace and so on?
19:54:22 <Vorpal> heh?
19:54:32 <ais523> well, I accidentally deleted all the files in ~ a while ago
19:54:34 <Vorpal> elliott, yaourt. I know there are more modern ones. But don't fix what isn't broken.
19:54:34 <ais523> but didn't lose much
19:54:39 <elliott> yaourt is so broken :P
19:54:46 <ais523> (I didn't delete any of the /directories/; it was a non-recursive rm * in ~)
19:54:54 <Vorpal> elliott, WFM. YMMV
19:55:10 <Vorpal> elliott, anyway I use grub 1 because I don't fix what isn't broken
19:55:19 <Vorpal> besides on my setup it would be risky to switch
19:55:19 <elliott> --arch user
19:55:28 <ais523> so, conclusions: elliott is trying out Arch, is annoyed at its package management system
19:55:31 <Vorpal> both my laptop and my desktop use somewhat complicated grub setups
19:55:37 <Vorpal> my laptop because dm-crypt
19:55:41 <Vorpal> my desktop because mdraid
19:55:43 <elliott> ais523: more than trying
19:55:48 <ais523> settled on?
19:55:53 <elliott> Vorpal: it looked like: "special types" at the top level (ok, this is a kind of hieracrhy, but a tolerable one; lowercase is fine too): ~/Code, ~/Music, etc.; but then: ~/Downloads, for /anything/ that comes from an external source; this has to be wiped every two days or so for the system to work; and finally, the most important place, ~/Keep/YYYY-MM
19:56:09 <Vorpal> elliott, heh
19:56:11 <elliott> you move things from Downloads to the appropriate Keep so that they don't get mercilessly wiped out
19:56:18 <elliott> it's pretty good at forcing you to decide what to do with a file
19:56:29 <ais523> elliott: I keep both Downloads and Documents relatively clean
19:56:30 <elliott> and no files other than config and the like go in ~/
19:56:42 <ais523> I can't remember the difference between them offhand, but they're both small enough that I can typically remember which a file is in
19:56:43 <Vorpal> elliott, I have ~/music ~/videos and so on. Every so often I clean out ~ and move stuff I want to keep but don't know where it should go into ~/other
19:56:54 <Vorpal> ~/other is a mess
19:57:03 <elliott> hmm, is there a way to get yaourt to use the PKGBUILD in a current directory rather than looking at aur... :)
19:57:04 <ais523> I create a new top-level directory whenever I have something that can't reasonably be classified into the existing ones
19:57:10 <elliott> Vorpal: you should try ~/keep :P
19:57:13 <elliott> I can assert it's THE BEST.
19:57:15 <ais523> if something ends up important enough, it gets a top-level directory of its own
19:57:24 <Vorpal> <elliott> hmm, is there a way to get yaourt to use the PKGBUILD in a current directory rather than looking at aur... :) <-- no need, the command to build directly is trivial
19:57:28 <Vorpal> just makepkg -c
19:57:32 <elliott> Vorpal: yes, but I need to install the deps
19:57:38 <Vorpal> elliott, ah
19:57:39 <ais523> elliott: do you download to /tmp by default? because I do, and it saves a lot of trouble about download clutter
19:57:41 <elliott> Vorpal: if I do it explicitly, it'll count as an explicit install
19:57:54 <elliott> I'd rather keep the explicit install list only be things I actually wanted to install as a top-level goal
19:57:59 <Vorpal> elliott, then sudo pacman -U foo.whatever.is.the.current.compression.format
19:58:00 <elliott> hmm... maybe makepkg -s will do it
19:58:08 <ais523> in fact, even more commonly, if I want to open a file that's online, I copy-paste the URL into the viewing application
19:58:10 <Vorpal> elliott, --asdeps?
19:58:11 <elliott> nope, it's an AUR dependency
19:58:19 <Vorpal> hm
19:58:19 <elliott> Vorpal: oh, that exists?
19:58:19 <monqy> someone sad my name while i was gone (i was gone)
19:58:20 <elliott> thanks
19:58:25 <Vorpal> elliott, for pacman, not sure for yaourt
19:58:26 <monqy> (((bacck now)))))
19:58:34 <monqy> )hi(
19:58:35 <Vorpal> elliott, might be asdep too, check exact spelling
19:58:52 <elliott> hi monqy
19:59:06 <Vorpal> elliott, upload any generally useful PKGBUILD you create to AUR.
19:59:09 <elliott> monqy: yaourt -S noidentd-git... do you DARE.............
19:59:13 <elliott> Vorpal: ALREADY DONE
19:59:23 <elliott> Vorpal: but this one is just an auto-generated newer version of a haskell lib
19:59:28 <elliott> 0 creative input from me at all
19:59:29 <Vorpal> elliott, I will update the ick one tomorrow unless something unexpected happens
19:59:31 <elliott> I can't replace the AUR evrsion
19:59:36 <elliott> s/ev/ve/
19:59:44 <Vorpal> elliott, flag the existing one as outdated
19:59:51 <elliott> planning to
20:00:08 <elliott> does that notify the maintainers?
20:00:13 <elliott> not sure how that works, since it's maintained by the arch-haskell group
20:00:16 <monqy> im bad at dareing...
20:00:18 <Vorpal> elliott, can be done for normal packages from the front page btw, search for the package and mark it
20:00:27 <Vorpal> elliott, and it notifies by email iirc
20:00:41 <elliott> monqy: do you know how whenever you connect to freenode it waits for a few seconds before giving the motd.......
20:00:45 <Vorpal> elliott, and no idea if it is maintained by a group
20:00:53 <elliott> monqy: do you know how that evil ~ is infesting the start of your username in whois.........
20:00:55 <Vorpal> elliott, I would assume it does, otherwise what use would it be
20:00:56 <monqy> oh yeah and then it puts a squiggle on my username yeah that
20:01:06 <Vorpal> elliott, I wasn't even aware a group could maintain an AUR package
20:01:10 <elliott> monqy: noidentd.... solves this...... with elliott hird quality code
20:01:13 <elliott> Vorpal: it's a separate team account
20:01:17 <monqy> teMPTING
20:01:21 <Vorpal> elliott, hm. No idea how that works
20:01:26 <elliott> monqy: only one ... config option...
20:01:34 <elliott> rc.d....... support...........
20:01:36 <monqy> but before i try it: i amg oing to get aurget (unlesss it's: bad)
20:01:40 <Vorpal> elliott, identd thingy won't work because of NAT
20:01:43 <Vorpal> for me at least
20:01:49 <elliott> monqy: i dunno it... felt kinda unreliable to me
20:01:51 <elliott> that might be my bad impressions
20:01:52 <monqy> oh
20:01:56 <elliott> i have trust issues with software
20:01:57 <monqy> is yaourt better
20:01:57 <elliott> by all means try it
20:02:03 <elliott> it was certainly sleek-feeling
20:02:08 <monqy> because i already have yaourt so
20:02:10 <elliott> Vorpal: i am sure monqy has the power... of nat..................... or something
20:03:17 <elliott> the problem with these aur helpers is that they're so obviously thin wrappers over other tools
20:03:22 <elliott> they feel so shoddy :p
20:03:31 <elliott> or not so thin wrappers in the case of yaourt
20:03:36 <monqy> thick wrappers
20:05:07 <nooga> uh
20:05:55 <Vorpal> elliott, yaourt works quite nicely I found. Never really had any problems with it, except when pacman ABI broke and I had to reinstall yaourt by hand
20:08:08 <elliott> monqy: have you...enjoyed....the magiceke.,
20:08:42 <elliott> Vorpal: I hate you, now I feel like having a go at writing that configuration manager. :/
20:08:48 <CakeProphet> wow
20:09:00 <CakeProphet> 12 hours in, and my latest and greatest markov model generator
20:09:00 <Vorpal> elliott, err, what did I say?
20:09:02 <monqy> i've been letting yaourt do its thing over there becase ut's slow and forgot about it
20:09:05 <monqy> remembering now:
20:09:06 <CakeProphet> has not even finished the first 4 datasets....
20:09:13 <elliott> Vorpal: YOU ASKED ME QUESTIONS
20:09:16 <Vorpal> elliott, oh okay
20:09:18 <elliott> CakeProphet: this is because perl sucks
20:09:38 <CakeProphet> elliott: I'm not really sure what's so different about this one to make it this much slower...
20:09:46 <CakeProphet> the regex is even precompiled this time. :P
20:10:10 <elliott> monqy: (the config file... is /etc/conf.d/noidentd...)
20:10:18 <elliott> (the code... is https://github.com/ehird/noidentd/blob/master/noidentd.c...)
20:10:34 <CakeProphet> ehird: noitdentd blog master
20:10:45 <elliott> thankey ou
20:11:25 <monqy> instaled it (loeking at config nwo)
20:11:39 <CakeProphet> I wonder if I could write a C program to do this correctly
20:11:43 <CakeProphet> before this script finishes
20:11:46 <CakeProphet> and then that program
20:11:48 <monqy> so i guess i put monqy in there eh
20:11:50 <CakeProphet> finishes before this script finishes.
20:12:20 <monqy> do i do anything else or just let it do its magic now
20:12:25 <monqy> next time i connect, I mean
20:12:26 <elliott> monqy: well you are "swell"
20:12:31 <monqy> oh swell
20:12:34 <elliott> so you would put swell in there toget the same thing now
20:12:35 <elliott> but monqy
20:12:36 <elliott> is fine too
20:12:39 <elliott> and you would then be monqy
20:12:41 <elliott> pick your favourite...
20:12:41 <monqy> hm
20:12:43 <Vorpal> CakeProphet, what sort of regex? Any backrefs?
20:12:51 <monqy> i'll be swell
20:12:53 <monqy> or i could change it
20:12:56 <monqy> i used to be chap
20:13:04 <elliott> oh i thought swell was your name or something
20:13:04 <monqy> there was another one i wanted to try but i forget it
20:13:13 <elliott> ok this fan is worrying m
20:13:13 <Vorpal> CakeProphet, http://swtch.com/~rsc/regexp/regexp1.html
20:13:14 <elliott> e
20:13:16 <monqy> swell is a good name but not mine
20:13:17 <elliott> it starts like full blast
20:13:21 <elliott> then half a second later cuts immediately
20:13:24 <elliott> linux what are you doing
20:13:44 <elliott> oh, ghc is hogging cpu
20:13:53 <CakeProphet> Vorpal: no it's just a character class followed by a +
20:13:54 <elliott> Vorpal: he's using perl so he can hardly just switch regexp engines
20:14:15 <CakeProphet> Vorpal: should be linear time, with single words (thus very small n's)
20:14:16 <Vorpal> elliott, you could implement a different regexp engine as a perl package!
20:14:22 <Vorpal> elliott, thought that isn't what I meant.
20:14:26 <elliott> monqy: anyway once you save that you need to start it
20:14:34 <Vorpal> elliott, what I meant with that link was: "maybe this would explain your issue"
20:14:36 <elliott> monqy: add @noidentd to your DAEMONS array is the best idea
20:14:44 <elliott> and "sudo rc.d start noidentd" until reboot........
20:14:46 <elliott> that starts it
20:14:51 <elliott> (it uses no resources ever)
20:14:56 <elliott> (constant memory and time always)
20:15:00 <CakeProphet> well the main difference is that I switched from
20:15:14 <CakeProphet> $word =~ $not_this_character_class
20:15:15 <CakeProphet> to
20:15:19 <monqy> startd
20:15:29 <CakeProphet> $word =~ $this_character_class_one_or_more_times
20:15:48 <elliott> monqy: and then.........
20:15:51 <CakeProphet> which I would think should be exactly the same or maybe a bit faster?
20:15:52 <elliott> monqy: reconeocneocetecte
20:15:55 <Vorpal> CakeProphet, why even use perl for this...
20:15:55 <monqy> righte..
20:15:58 <elliott> notice faster connect... happier life
20:16:01 <elliott> happier world
20:16:03 <elliott> happier oisdjf
20:16:06 <CakeProphet> Vorpal: not sure, it's what I started with. :P
20:16:12 -!- monqy has quit (Quit: hello).
20:16:16 <elliott> hello monqy
20:16:27 -!- monqy has joined.
20:16:31 <elliott> bye monqy oh
20:16:33 <elliott> it didn't work
20:16:35 <monqy> crys
20:16:37 <elliott> monqy: do you have a fierierweall
20:16:45 <monqy> perhaps
20:16:53 <elliott> monqy: can you... forward port 113.......
20:16:53 <monqy> probably
20:17:05 <monqy> i;ll try
20:18:33 <CakeProphet> maybe I should rewrite this part in Haskell or something, which would force me to not use a horrible format.
20:18:38 <CakeProphet> for storing the data.
20:18:47 <elliott> CakeProphet: haskell n-gram (c) me
20:18:59 <elliott> although mine is about ~999999% more advanced so GO AHEAD I GUESS
20:19:10 <monqy> oh no i actually can't because someone did password changeing and did not tell me
20:19:25 <elliott> monqy: that person is...mean tell them of,e
20:19:35 <elliott> tell them, stop change paswioerd
20:19:41 <CakeProphet> elliott: it is?
20:19:53 <monqy> the best part is he probably forgot the new password too
20:19:55 <monqy> so we have to reset it
20:19:56 <monqy> again
20:19:59 <monqy> crys in hole
20:20:04 <CakeProphet> I thought yours wasn't quite so advanced, or is this a new thing?
20:20:05 <Vorpal> monqy, ask him to not change the password?
20:20:11 <Vorpal> monqy, or change it before he does
20:20:46 <elliott> monqy: im sit in hole
20:20:50 <CakeProphet> oh wait I bet I know why this is going slower.
20:20:51 <elliott> creying in symphony
20:20:55 <CakeProphet> there's a reverse lookbehind.
20:21:02 <Vorpal> CakeProphet, why did you do that
20:21:10 <Vorpal> CakeProphet, of course that is going to be slow
20:21:14 <elliott> cake "clever" prophet
20:21:23 <CakeProphet> cake "just woke up" prophet :P
20:21:33 <elliott> monqy: you might want to... remove from daemons array... except it literally takes something like fifty bytes of ram so maybe you don't care
20:21:38 <Vorpal> CakeProphet, you didn't code it when you just woke up
20:21:39 <Vorpal> so duh
20:21:48 <elliott> it tries very hard to use no resources :P
20:21:52 <CakeProphet> uh, well, in English I want to avoid 's at the end of words
20:22:01 <CakeProphet> Vorpal: I wasn't thinking about efficiency at the time. :P
20:22:05 <Vorpal> elliott, 50 bytes? Including libc?
20:22:11 <elliott> Vorpal: that's shared
20:22:13 <CakeProphet> Vorpal: ISN'T PREMATURE OPTIMIZATION BAD OR SOMETHING?
20:22:20 <CakeProphet> DONALD KUHNUTH?
20:22:30 <elliott> valgrind said like 30 bytes still reachable on exit, anyway :P
20:22:34 <elliott> so add like twenty on that because
20:22:37 <Vorpal> elliott, right
20:22:43 <elliott> well it's actually more than that, it's at least...
20:22:53 <Vorpal> so say, a few kB
20:23:00 <elliott> ...at least 240 because of the buffers
20:23:08 <elliott> plus ten times struct pollfd
20:23:19 <elliott> plus like six pointer-sized values :P
20:23:25 <elliott> but yeah, barely anything
20:23:26 <Vorpal> elliott, plus some hidden buffers in libc.
20:23:27 <CakeProphet> I'm not really sure how to restrict words that end with 's without making it a negative lookbehind
20:23:31 <CakeProphet> but it's probably possible.
20:23:32 <elliott> Vorpal: uh, doubt it
20:23:36 <Vorpal> elliott, hm okay
20:23:38 <elliott> Vorpal: for stdio i guess
20:23:41 <Vorpal> yep
20:23:46 <elliott> Vorpal: but i'm using berkeley sockets/poll/recv/send
20:23:48 <elliott> so not for the sockets
20:23:57 <Vorpal> elliott, but stdin/stdout will be open and initialised
20:24:01 <Vorpal> and have buffers
20:24:07 <CakeProphet> well, of course it's possible, but it has to fit into my awesome command line option to pass arbitrary regex. :P
20:24:07 <Vorpal> even if you don't use them
20:24:12 <elliott> maybe i should close stdio, i don't use them after startup
20:24:20 <elliott> i could rewrite that stuff to use write() :)
20:24:31 <Vorpal> elliott, maybe you should use newlib
20:24:42 <elliott> musl :p
20:25:05 <Vorpal> elliott, bare metal. as a TSR hidden from linux. Somehow
20:25:19 <elliott> what's that above the kernel debugging thing
20:25:20 <elliott> SMI?
20:25:22 <CakeProphet> guys what would happen if GNU merged with Donald Knuth
20:25:22 <Vorpal> (note: above statement made no sense)
20:25:27 <elliott> or below the kernel i guess
20:25:32 <CakeProphet> and crerates the unstopeaable DONALD GNUTH
20:25:33 <elliott> yeah I think SMM
20:25:35 <Vorpal> elliott, hm... yeah System Management Mode
20:27:17 <monqy> CakeProphet: let 's do its thing
20:27:21 <monqy> CakeProphet: 's is great
20:27:36 <monqy> `macro
20:27:41 <HackEgo> UH
20:27:55 <monqy> `macro
20:27:59 <HackEgo> CESIUM'S
20:28:02 <monqy> yes good
20:28:29 <elliott> uh cesium's
20:30:09 -!- oerjan has joined.
20:30:26 <Phantom_Hoover> So what does macro do?
20:30:28 <Phantom_Hoover> `macro
20:30:29 <Phantom_Hoover> `macro
20:30:30 <Phantom_Hoover> `macro
20:30:36 <HackEgo> Mmacro: <stdout>: commitBuffer: invalid argument (Invalid or incomplete multibyte or wide character)
20:30:36 <HackEgo> JFK'S
20:30:43 <Deewiant> `wacro
20:30:44 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: wacro: not found
20:30:45 <HackEgo> UPTON'S
20:31:22 <elliott> Mmacro: <stdout>: commitBuffer: invalid argument (Invalid or incomplete multibyte or wide character)
20:31:23 <elliott> good word
20:31:34 <elliott> HEY OERJAN CAN I INTEREST YOU IN- dammit you already have an identd.
20:31:43 <oerjan> fancy that.
20:31:54 <elliott> oerjan that is immoral.
20:32:02 <oerjan> wat
20:32:08 <elliott> immoral.
20:32:15 <elliott> Patriots use noidentd.
20:33:03 <oerjan> and a bouncer and a cloak, i presume
20:33:12 <oerjan> *MWAHAHAHA*
20:33:51 <elliott> NO BOUNCER HERE
20:33:54 <elliott> https://github.com/ehird/noidentd/blob/master/noidentd.c
20:33:55 <elliott> NOIDENTD
20:33:58 <elliott> SOFTWARE OF PATRIOTS
20:34:13 <Vorpal> oerjan, was that a dagger and cloak pun?
20:35:26 -!- azaq23 has quit (Quit: Leaving.).
20:37:02 <olsner> derpa derpa
20:37:05 <oerjan> ...no.
20:37:37 <Vorpal> oerjan, IT COULD HAVE BEEN!
20:37:38 <copumpkin> olsner: I have a lbirary called derpa
20:37:43 <Vorpal> DARPA
20:37:49 <copumpkin> https://github.com/copumpkin/derpa
20:38:05 <Vorpal> copumpkin, no that is a library
20:38:09 <elliott> is it a library if nobody uses it OH SNAEPEPPEPEPE
20:38:11 <copumpkin> derp
20:38:13 <elliott> SPNEAPNEPNWEPFWEFPEPF
20:38:13 <Vorpal> not a lbirary as you stated above
20:38:14 <elliott> EPRJOETJG
20:38:14 <elliott> H
20:38:22 <olsner> copumpkin: that is awesome
20:38:26 <elliott> the joke is nobody uses agda
20:38:26 <monqy> eprjoetjgh
20:38:29 <copumpkin> thank you!
20:38:44 <oerjan> <CakeProphet> guys what would happen if GNU merged with Donald Knuth
20:38:50 <elliott> dfgd
20:38:50 <oerjan> gnothing good, i predict
20:38:53 <olsner> copumpkin: or did you just upload it now because I mentioned it?
20:39:04 <copumpkin> olsner: nope, check the dates on it
20:39:09 * oerjan declares the logs too long to read today
20:39:46 <olsner> copumpkin: I would need, like, proof that it was called derpa before today
20:39:53 <copumpkin> olsner: lol
20:40:06 <Vorpal> elliott, I just realised why DDG will never be a success.
20:40:25 <olsner> proof seems to be slightly lacking though, afaik you just uploaded this half a minute ago
20:40:38 <elliott> https://github.com/copumpkin
20:40:40 <Vorpal> elliott, try saying it as a verb. Very awkward: "ddging" or "duckduckgoing"?
20:41:19 <elliott> copumpkin updated gist: 1286093 October 14, 2011
20:41:19 <elliott> There is no largest prime
20:41:20 <elliott> cutting-edge mathematical research
20:41:29 <copumpkin> elliott: STFU
20:41:31 <copumpkin> that was difficult :P
20:41:36 <elliott> the joke is that nobody uses Agda :D
20:41:43 <copumpkin> FUCK YOU
20:41:44 <Vorpal> * oerjan declares the logs too long to read today <-- but... but... there is AWESOME stuff in it!
20:42:05 <monqy> nobody uses agda?
20:42:31 <Vorpal> <elliott> There is no largest prime <-- where did copumpkin prove that?
20:42:44 <copumpkin> elliott's been stalking me again
20:42:47 <elliott> https://gist.github.com/1286093
20:42:47 <Vorpal> I want to see this front edge of the science of mathematics
20:42:58 <elliott> copumpkin: no, olsner mentioned derpa's upload time :P
20:43:05 <elliott> I PROVED YOU INNOCENT
20:43:12 <elliott> and then went in search for agda-mocking material ofc
20:43:18 <copumpkin> :'(
20:43:27 <Vorpal> copumpkin, elliott, come on, that proof is huge
20:43:35 <olsner> elliott: is that gist based on derpa?
20:43:39 <elliott> yeah copumpkin is stupid go do some booklearning from euclid
20:43:42 <copumpkin> Vorpal: it's euclid's proof
20:43:55 <copumpkin> it's just that the usual statement of euclid's proof doesn't go into the details
20:44:02 <copumpkin> agda forces us to
20:44:06 <copumpkin> which is both good and bad, I guess
20:44:09 <olsner> (afaict it isn't)
20:44:19 <copumpkin> it isn't based on derpa, no
20:44:21 <Vorpal> copumpkin, well of course, it assumes a human is reading it and can think
20:44:51 <elliott> burrrrrrn
20:44:54 <monqy> maybe i should learn agda
20:44:55 <copumpkin> Vorpal: well, sure, but it invokes a limited form of the fundamental theorem of arithmetic
20:45:00 <copumpkin> that most people don't mention
20:45:02 <elliott> monqy: then you will become nobody
20:45:08 <monqy> an exciting prospect
20:45:12 <copumpkin> so it's interesting to see what things it actually needs
20:45:47 <copumpkin> it's like how most presentations of category theory completely gloss over what equality/equivalence means
20:46:13 <Vorpal> copumpkin, because it is in the standard library of maths basically.
20:46:27 <Vorpal> there is no /need/ for it when talking to a human
20:46:34 <copumpkin> Vorpal: you still need to call standard library functions ;)
20:46:42 <copumpkin> you can't just leave them out and hope the compiler figures them out
20:46:46 <Vorpal> copumpkin, yes, we do that by saying "="
20:46:49 <Vorpal> that is how we call it
20:46:55 <elliott> copumpkin: why are you wasting your time
20:46:55 <copumpkin> huh?
20:47:11 <copumpkin> I mean invoke, not name
20:47:12 <Vorpal> copumpkin, or rather, writing "=" and saying "equals"
20:47:45 <Vorpal> copumpkin, that is how we invoke them. Example. "5 = 4+1", there, I invoked the standard library of arithmetics.
20:47:55 <elliott> Vorpal: this is really stupid
20:47:56 <copumpkin> yes, you invoked addition by writing addition
20:48:01 <Vorpal> elliott, yes.
20:48:04 <copumpkin> you wrote the symbol +
20:48:05 <monqy> congratulationse
20:48:09 <Vorpal> copumpkin, exactly what I was saying. :P
20:48:16 <copumpkin> where does euclid's proof mention the fundamental theorem of math?
20:48:16 <elliott> = = + --vorpal
20:48:18 <oerjan> <Vorpal> elliott, try saying it as a verb. Very awkward: "ddging" or "duckduckgoing"? <-- just call it "quacking" and a day.
20:48:19 <monqy> where is this going. why is this going.
20:48:19 <copumpkin> arithmetic
20:48:25 <copumpkin> it doesn't
20:48:26 <Vorpal> oerjan, awesome
20:48:27 <elliott> `addquote <monqy> where is this going. why is this going.
20:48:29 <HackEgo> 698) <monqy> where is this going. why is this going.
20:48:32 * shachaf likes "the fundamental theorem of math"
20:48:33 <copumpkin> people are implicitly invoking it because it doesn't work otherwise
20:48:39 <copumpkin> that'd be like me writing x = 4 7
20:48:46 <copumpkin> and hoping the compiler can figure out that a + belongs there
20:48:47 <monqy> 698 quotes? wow
20:48:49 <shachaf> I don't know if there was any context, but I hope not.
20:48:54 <monqy> `quote 697
20:48:57 <HackEgo> 697) <elliott> Magnetic butterfly is slower than cat and restarting if you make a mistake is slower than vi is slower than mind-reading.
20:49:27 <Vorpal> copumpkin, it assumes that it is defined in the context of the theory used for the proof. You start the proof with the meaning of the basics already available normally. Of course agda needs more
20:49:32 <elliott> oerjan: hey which one in the logs was which :P
20:51:19 <copumpkin> Vorpal: I'm saying it wasn't obvious to me that that the proof needed it, until I sat down and worked through the details of the proof
20:51:29 <copumpkin> leaving things implicit increases perceived clarity
20:51:30 <Vorpal> copumpkin, ah okay
20:51:32 <copumpkin> because it's a one-line proof
20:51:43 <oerjan> elliott: what?
20:51:45 <copumpkin> but decreases actual clarity, because you don't know what's actually being used behind the scenes
20:51:56 <copumpkin> of course, agda takes it to the other extreme
20:51:57 <elliott> 01:12:38: <oerjan> goDown x <|> goRight x <|> (goUp >>= goNext)
20:51:57 <elliott> 01:16:23: <oerjan> (goRight x >>= goBottom) <|> goUp x
20:52:03 <elliott> oerjan: which one of those does parents first :P
20:52:22 <oerjan> the former
20:52:28 <elliott> thx
20:53:09 -!- ive has quit (Ping timeout: 258 seconds).
20:53:43 <oerjan> copumpkin: i presume it is used when you conclude that there is a prime dividing p1...pn+1
20:53:51 <copumpkin> yep
20:54:35 <oerjan> that's a pretty trivial induction compared to the full theorem though, i think
20:55:56 <oerjan> *full fundamental theorem
20:56:46 <oerjan> also it's the fundamental theorem of arithmetic, i think, not math. there is also a different fundamental theorem of algebra.
20:57:11 <oerjan> (which says that every non-constant complex polynomial has a root)
20:57:34 <oerjan> and there may be others in other fields
20:58:03 <oerjan> also, one of calculus
20:58:35 <elliott> `quote fundamental
20:58:37 <HackEgo> 567) <Phantom_Hoover> I didn't realise nickel apparently can't be shaped into a screw because of some fundamental feature of dwarven physics. \ 663) <oklopol> but i guess (x + y)^n = (x^2 + 2xy + y^2)(x^2 + 2xy + y^2)...(x^2 + 2xy + y^2) if n is even, (x + y)^n = (x^2 + 2xy + y^2)(x^2 + 2xy + y^2)...(x^2 + 2xy + y^2)(x + y)
20:58:44 <elliott> `quote 663
20:58:46 <HackEgo> 663) <oklopol> but i guess (x + y)^n = (x^2 + 2xy + y^2)(x^2 + 2xy + y^2)...(x^2 + 2xy + y^2) if n is even, (x + y)^n = (x^2 + 2xy + y^2)(x^2 + 2xy + y^2)...(x^2 + 2xy + y^2)(x + y) is as good a fundamental theorem as any
20:58:51 <oerjan> (that's the one which says essentially that differentiation and integration are opposites)
20:59:31 <oerjan> http://en.wikipedia.org/wiki/Fundamental_theorem has quite a list :P
21:00:08 <oerjan> "fundamental theorem of poker" :P
21:01:49 -!- GreaseMonkey has joined.
21:03:23 <elliott> oerjan: sigh, infinite loop :(
21:04:38 <oerjan> what, with one of my suggested goNexts?
21:05:04 <oerjan> the one with parents first is likely too, if you can change a node to have a child which itself matches the test
21:05:13 <elliott> goNext x = goDown x <|> goRight x <|> (goUp x >>= goNext)
21:05:13 <elliott> where goDown (Node tag (x:xs) :> up) = Just (x :> Branch tag [] xs up)
21:05:13 <elliott> goDown _ = Nothing
21:05:13 <elliott> test xx = case goNext xx' of Nothing -> xx'; Just go -> test go
21:05:13 <elliott> where xx' = test' xx
21:05:14 <elliott> test' (Text s :> up) = Text "bork bork bork" :> up
21:05:16 <elliott> test' x = x
21:05:18 <elliott> test infinite loops here on my document
21:05:35 <elliott> *Main Text.Groom> test (toCtx (Node (Tag "abc" []) []))
21:05:35 <elliott> Node (Tag "abc" []) [] :> Top
21:05:35 <elliott> *Main Text.Groom> test (toCtx (Node (Tag "abc" []) [Text "x"]))
21:05:35 <elliott> [hang]
21:05:37 <oerjan> eek. hm.
21:06:51 <olsner> elliott: bug!
21:07:04 <elliott> oerjan:
21:07:06 <elliott> *Main Text.Groom> goNext (Node (Tag "abc" []) [Text "x"] :> Top)
21:07:06 <elliott> Just (Text "x" :> Branch (Tag "abc" []) [] [] Top)
21:07:06 <elliott> *Main Text.Groom> goNext (Node (Tag "abc" []) [Text "x"] :> Top) >>= goNext
21:07:06 <elliott> Just (Text "x" :> Branch (Tag "abc" []) [] [] Top)
21:07:08 <elliott> bug :)
21:07:20 <oerjan> elliott: will you stop bloody spamming while i'm trying to read :P
21:09:54 <oerjan> elliott: oh i see
21:10:05 <oerjan> yes goNext is wrong when going up
21:11:05 <elliott> hm
21:11:22 <oerjan> it needs a goRight, which may itself fail
21:11:42 <elliott> hm
21:11:52 <elliott> not as simple as (go Up x >>= goRight >>= goNext)? :)
21:11:56 <oerjan> no.
21:12:00 <elliott> didn't think so :P
21:12:10 <elliott> oerjan: if it helps I already have
21:12:15 <elliott> goLeft = moveLeft >=> selectLeft
21:12:15 <elliott> goRight = moveRight >=> selectRight
21:12:18 <elliott> where
21:12:22 <elliott> selectLeft :: Cursor -> Maybe TreeCtx
21:12:22 <elliott> moveLeft :: TreeCtx -> Maybe Cursor
21:12:34 <elliott> selectLeft (Branch name (l:ls) rs up) = Just (l :> Branch name ls rs up)
21:12:34 <elliott> moveLeft (r :> Branch name ls rs up) = Just (Branch name ls (r:rs) up)
21:12:39 <elliott> and analoguously for right
21:12:53 <oerjan> we need climbRight x = goRight x <|> (goUp x >>= climbRight)
21:12:57 <elliott> ok
21:13:00 <elliott> makes sense
21:13:04 <olsner> hmm, random thought, we have no danes here do we?
21:13:41 <olsner> (well obviously not, everyone here is finnish, norwegian, swedish or from hexham)
21:14:01 <oerjan> and then goNext x = goDown x <|> climbRight, maybe
21:14:27 <oerjan> *and then goNext x = goDown x <|> climbRight x, maybe
21:14:40 <Phantom_Hoover> olsner, excuse me there is only one person from Hexham here.
21:14:43 <elliott> *Main Text.Groom> goNext (Node (Tag "abc" []) [Text "x"] :> Top)
21:14:43 <elliott> Just (Text "x" :> Branch (Tag "abc" []) [] [] Top)
21:14:43 <elliott> *Main Text.Groom> goNext (Node (Tag "abc" []) [Text "x"] :> Top) >>= goNext
21:14:43 <elliott> Nothing
21:14:44 <elliott> looks good
21:14:47 <elliott> time to try it on the larger tre
21:14:48 <elliott> tree
21:14:59 <olsner> Phantom_Hoover: all of you are the same person!?
21:15:02 <elliott> yay
21:15:04 <elliott> oerjan: works :)
21:15:34 <oerjan> i assume climbRight will fail if it reaches the top, which is probably what you want
21:15:50 <elliott> oerjan: that would correspond to reaching the end of the tree
21:15:55 <oerjan> yeah
21:17:23 <elliott> oerjan: what I don't like is how the goNext has to be done outside of the "transformation" operation so that the end Nothing case can be handled...
21:17:35 <elliott> it feels like the kind of thing you should be able to abstract into a loop only involving the one function
21:18:46 <elliott> oerjan: maybe forcing goNext is the right thing though :P
21:20:38 -!- pumpkin has joined.
21:22:08 <oerjan> <olsner> hmm, random thought, we have no danes here do we? <-- i thought we had one recently, but i may be confused as i don't quite recall who it is
21:22:39 <olsner> could've been a swede from scania?
21:22:59 <oerjan> O_o
21:23:01 <elliott> oerjan: hm I wonder how you remove nodes this way
21:23:05 <elliott> I'm trying to remove all text nodes but
21:23:06 -!- copumpkin has quit (Ping timeout: 244 seconds).
21:23:12 <elliott> test' (Text s :> up) = select{Left,Right} up
21:23:13 <elliott> both fail
21:23:20 <elliott> (i.e. yield Nothing as soon as Text is hit)
21:23:45 <oerjan> elliott: oh right a removal tends to leave you on a Cursor in spirit...
21:23:59 <oerjan> which might not have anything either before or after it, or even both
21:24:00 <elliott> oerjan: oh wait, what we need is goNext for /Cursors/, i think
21:24:09 <oerjan> yeah
21:24:26 <elliott> it seems like most operations on TreeCtxs involve stuffing them back into a Cursor then performing an operation on the Cursor which unpacks it into a context again :)
21:24:31 <elliott> ok, so moveNext :/
21:24:36 <elliott> this is a tricky one
21:24:38 <oerjan> elliott: well actually that's just your moveRight isn't it
21:24:48 <elliott> I don't think so
21:24:49 <oerjan> or hm
21:24:52 <elliott> moveRight :: TreeCtx -> Maybe Cursor
21:24:52 <elliott> moveRight (l :> Branch name ls rs up) = Just (Branch name (l:ls) rs up)
21:24:52 <elliott> moveRight _ = Nothing
21:24:54 <elliott> look ma, no ascension
21:25:16 <elliott> ok so what's needed is
21:25:19 <elliott> Cursor -> Maybe TreeCtx
21:25:23 <elliott> so it's actually selectNext
21:25:26 <oerjan> elliott: you want an edit to always end on a Cursor, which may be just next to what was handled or even deleted
21:25:34 <elliott> hm
21:25:37 <elliott> selectRight is downwards movement
21:25:51 <elliott> oerjan: oh so I actually want (TreeCtx -> Cursor), not (TreeCtx -> TreeCtx)?
21:25:56 <oerjan> and _then_ the main loop can to the goNext :: Cursor -> Maybe TreeCtx
21:26:12 <elliott> misnaming >:E
21:26:14 <elliott> that's moveNext
21:26:19 <oerjan> ok
21:26:34 <elliott> goFoo :: TreeCtx -> Maybe TreeCtx -- looks like moveFoo >=> selectFoo at least for left/right
21:26:39 <elliott> selectFoo :: Cursor -> Maybe TreeCtx
21:26:42 <elliott> moveFoo :: TreeCtx -> Maybe Cursor
21:26:55 <elliott> ok so I need to write moveNext
21:27:03 <elliott> well I think the eqivalent of goDown is just moveRight
21:27:07 <elliott> erm
21:27:08 <elliott> selectRight
21:27:11 <elliott> selectRight (Branch name ls (r:rs) up) = Just (r :> Branch name ls rs up)
21:27:19 <oerjan> elliott: goNext = moveRight >=> selectNext
21:27:37 <elliott> I agree, I'll define selectNext first though
21:27:54 <oerjan> the point there is that the edit itself has enough information to do the moveRight, and it doesn't even need to know whether or not you do parents first
21:28:12 <oerjan> ...oops
21:28:19 <elliott> oerjan: ?
21:28:25 <oerjan> yes it does, darn
21:28:37 <elliott> ok i can't figure out selectNext
21:28:42 <elliott> because I don't know what climbRight should be
21:29:20 <oerjan> i think...
21:29:40 <oerjan> you actually need a moveNext, which just goes to the next _Cursor_
21:30:08 <elliott> moveNext :: TreeCtx -> Maybe Cursor -- are you sure you mean this?
21:30:08 <oerjan> moveNext = moveDown <|> climbRight
21:30:31 <elliott> ok, but what does climbRight look like here :P
21:30:42 <oerjan> *+x /g
21:31:21 <elliott> wat
21:31:31 <oerjan> climbRight x = moveRight <|> (goUp >>= climbRight)
21:31:34 <oerjan> argh
21:31:40 <oerjan> climbRight x = moveRight x <|> (goUp x >>= climbRight)
21:32:04 <oerjan> oh wait hm
21:32:12 <elliott> also, there isn't a moveDown.
21:32:12 <oerjan> a moveRight cannot actually fail
21:32:17 <elliott> there can be though
21:32:23 <elliott> oerjan: um sure it can
21:32:27 <elliott> moveRight :: TreeCtx -> Maybe Cursor
21:32:27 <elliott> moveRight (l :> Branch name ls rs up) = Just (Branch name (l:ls) rs up)
21:32:27 <elliott> moveRight _ = Nothing
21:32:27 <elliott> .
21:32:30 <elliott> consider (l :> Top)
21:32:44 * elliott thinks oerjan has completely muddled up the naming scheme.
21:33:05 <oerjan> oh. but in that case yo don't need to try anything further.
21:33:27 <oerjan> so climbRight = moveRight, simply
21:33:30 <elliott> move is like pressing the right arrow button while text is selected, going from it to a /cursor/; select is shift-arrow key in one direction from a cursor, producing a selection (TreeCttx)
21:33:33 <elliott> oerjan: oh, huh
21:33:41 <oerjan> no wait hm
21:33:44 <elliott> >_<
21:34:00 <oerjan> Top is actually tricky
21:34:39 <oerjan> if it has a non-Tag as its element
21:35:06 <elliott> oerjan: that can never happen in reality :)
21:35:07 <oerjan> because then there doesn't actually _exist_ a Cursor for inserting it
21:35:09 <elliott> if that reassures you
21:35:14 <elliott> there is _always_ a root tag
21:35:22 <elliott> I would express this in the types if I could think of a non-ugly way to do it
21:35:49 <oerjan> ok in that case moveRight cannot fail for our use case
21:36:06 <oerjan> well the edit part
21:36:34 <oerjan> moveNext = moveDown <|> moveRight
21:36:58 <oerjan> if there isn't a down direction, you're not at the root tag, so the moveRight must succeed
21:37:12 <elliott> you realise that moveNext can fail?
21:37:16 <elliott> e.g. being at the root tag
21:37:17 <elliott> but ko
21:37:33 <elliott> ok
21:37:33 <oerjan> but you never apply it to the root tag when parents are done first
21:37:42 <elliott> um
21:37:43 <elliott> what is moveDown
21:38:00 <elliott> <oerjan> but you never apply it to the root tag when parents are done first
21:38:04 <elliott> you apply it to the root tag first thing...
21:39:02 <elliott> oerjan: if I come back tomorrow will you have the answers :P
21:42:08 <oerjan> moveDown (Node tag children :> up) = Just (Branch tag [] children up)
21:43:06 <oerjan> i think.
21:43:51 <oerjan> elliott: oh hm moveNext cannot fail at the root tag, because it has children.
21:44:02 <elliott> yeah, I'm gonna sleep on this :P
21:44:03 <elliott> sorry
21:47:01 -!- pumpkin has quit (Quit: Computer has gone to sleep.).
21:48:43 -!- elliott has quit (Ping timeout: 276 seconds).
21:51:51 -!- boily has quit (Quit: WeeChat 0.3.6).
21:56:56 -!- ais523 has quit (Remote host closed the connection).
22:00:24 -!- augur has quit (Remote host closed the connection).
22:09:29 -!- Patashu has joined.
22:11:28 -!- ive has joined.
22:18:35 -!- sllide has quit (Read error: Connection reset by peer).
22:26:10 -!- zzo38 has quit (Remote host closed the connection).
22:42:18 -!- augur has joined.
22:50:18 -!- augur has quit (Remote host closed the connection).
22:50:54 -!- augur has joined.
22:55:40 -!- augur has quit (Ping timeout: 276 seconds).
22:56:34 -!- Ngevd has joined.
22:56:55 <Ngevd> Hello!
22:57:06 -!- nooga has quit (Ping timeout: 252 seconds).
22:57:17 <oerjan> good evening
22:59:42 -!- augur has joined.
23:17:21 -!- nooga has joined.
23:17:49 -!- ive has quit (Ping timeout: 252 seconds).
23:23:32 -!- ive has joined.
23:24:28 -!- Ngevd has quit (Ping timeout: 240 seconds).
23:27:43 -!- nooga has quit (Ping timeout: 255 seconds).
23:30:19 * Phantom_Hoover → sleep
23:30:20 -!- Phantom_Hoover has quit (Quit: Leaving).
23:59:26 -!- augur has quit (Remote host closed the connection).
23:59:45 -!- augur has joined.
←2011-10-27 2011-10-28 2011-10-29→ ↑2011 ↑all