00:01:05 choose 00:02:34 -!- tiffany has quit (Quit: Leaving). 00:04:36 aurget or pacaur? packer's linked webpage isn't as tidy as either of theirs so im disqualify it 00:05:08 what, https://github.com/bruenig/packer? 00:06:28 yeah; it is slightly less tidy 00:06:42 at least I think it is??? 00:06:45 oh I don't like pacaur much because it has its own non-pacman syntax 00:06:51 even if it supports the pacman ones too 00:06:59 I don't know enough to make actually educated guesses ;_; 00:07:10 Is there any other way to represent equality of numbers in the type system? 00:07:13 aurget is tempting especially since it avoids wrapping pacman operations 00:07:31 oh yeah that's nice 00:07:40 I thought of using bijective function but there is no such type that can only be bijective function. 00:08:23 equality of what numbers 00:11:17 where did you get these numbers? what is their home 00:11:19 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 wjat? 00:17:03 monqy: aurget seems good 00:17:22 i'll get aurget next time i need to aur i guess 00:17:49 monqy: i'm glad the aur packages for haskell stuff are good... they build profiling and docmentation 00:17:52 lol, dynamic too but w/e 00:18:30 i haven't gotten much aur haskell stuff...afraid of conflicts with cabal stuff...nightmares... 00:18:49 haven't gotten much/i forget if i've gotten any 00:19:05 monqy: oh i am literally just using only aur 00:19:10 and not cabal-install 00:19:10 oh 00:19:18 what happens when you need something that's not on aur 00:19:25 manual instl? 00:19:45 monqy: http://aur.archlinux.org/packages.php?K=arch-haskell&SeB=m 00:19:49 there's 1815 packages 00:19:55 anything that's not on there is probably not worth using 00:19:58 or else I can just package it myself 00:19:59 h,mm 00:20:01 I think there's an automated tool 00:20:08 to turn cabal -> pkgbuild 00:21:09 i guess i'll try that next time i start oveR?? 00:26:25 monqy: yeah, I'm practically sure all these are generated 00:26:27 because they have things like 00:26:31 # custom variables 00:26:31 _hkgname=cpphs 00:26:31 _licensefile=LICENCE-LGPL 00:26:36 and all their build/package functions look the same 00:27:07 monqy: yep: http://aur.archlinux.org/packages.php?ID=17471 00:27:09 cabal2arch 00:27:23 awesome 00:27:38 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 monqy: I still need cabal to handle actually building my stuff though 00:32:01 but that's much less painful 00:32:08 -!- evincar has quit (Quit: leaving). 00:33:26 What would your D&D character do in case of the following: 00:33:33 * You find some money that you think is money but everyone else thinks is just all hallucination. 00:33:38 I have no dnd character 00:33:41 * You find some money that you think is just hallucination but everyone else thinks is real money. 00:33:55 `quote game where 00:33:57 50) If I ever made a game where you jabbed bears ... I'd call it jabbear. \ 582) game where you flip a coin but it's really really big 00:33:57 * The king is going bald! 00:34:05 second one to be precise 00:34:25 * Your deity has been destroyed. 00:34:33 * Along the road, you encounter a kobold that looks injured - he's unconcious, bleeding slowly from an arrow wound. 00:34:42 * Someone offers a party member a job you are clearly unqualified for. 00:34:51 * 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 monqy: should i use String or Text or mix both help 00:35:19 what are you doing and whats text ;_; 00:35:34 you know what Text is.......... 00:35:54 sort of 00:36:17 http://hackage.haskell.org/package/text......... 00:36:33 yeah that thing 00:36:51 but I don't know every trade off 00:36:59 never used it so i can;t judge preteynes either 00:38:15 well I don't really want to just use String 00:38:18 mixing String and Text is ugly BUT 00:38:23 it means you can avoid OverloadedStrings 00:38:35 tag names and the like become Strings but actual body text becomes Text 00:38:43 but you'll want to pattern-match over the former much more than the latter 00:39:10 how ugly is mixing? maybe the best chocie? 00:40:32 not that ugly, but it just Feels a bit Wrong 00:40:38 especially since I get the data from the C lib in UTF-8 00:40:46 so I need a UTF-8 -> String decoder as well as UTF-8 -> Text 00:40:49 which might even mean another dependency 00:42:15 oh gross 00:43:46 oh sh why isn't there a hobbit pun in iwc today 00:44:07 (well it _is_ (prolonged) guest week, but still...) 00:48:06 :t many 00:48:07 forall (f :: * -> *) a. (Alternative f) => f a -> f [a] 00:51:13 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 [21 of 21] Compiling Language.Haskell.Exts ( src/Language/Haskell/Exts.hs, dist/build/Language/Haskell/Exts.dyn_o ) 00:51:28 BFD: reopening dist/build/libHShaskell-src-exts-1.11.1.a(Exts__22.o): No such file or directory 00:51:28 uh 00:51:31 A comonad cotransformer 00:51:33 "weird" 00:51:43 don't comonad transformers go comonad->comonad???? 00:51:53 or am I thinking of something else 00:52:01 monqy: presumably 00:52:03 oh I missed the co 00:52:06 in cotransformer 00:52:07 this is getting painful 00:52:10 yeah cotransformer makes sense 00:52:12 I guessssssss 00:52:28 I was thinking cotransformer too then looked and wow it was there 00:52:37 crys in not reading things properly shame 00:56:56 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 hmm 01:05:03 > id <|> id 01:05:04 Overlapping instances for GHC.Show.Show (a -> a) 01:05:04 arising from a use of `... 01:05:15 :t (fromLeft <|> fromRight) 01:05:16 Not in scope: `fromLeft' 01:05:16 Not in scope: `fromRight' 01:05:22 oh wait no 01:05:23 hmm 01:05:34 :t ((?f :: a -> Maybe b) <|> (?g :: a -> Maybe b)) 01:05:36 Could not deduce (?f::a -> Maybe b) from the context () 01:05:36 arising from a use of implicit parameter `?f' 01:05:36 at :1:2-3 01:05:39 sigh 01:05:39 > (id <|> undefined) 2 01:05:40 No instance for (Control.Applicative.Alternative ((->) a)) 01:05:40 arising from ... 01:05:46 :t ((undefined :: a -> Maybe b) <|> (undefined :: a -> Maybe b)) 01:05:48 forall a b. (Alternative ((->) a)) => a -> Maybe b 01:05:54 darn, there's no instance 01:05:55 ic 01:05:59 oerjan: I was thinking goNext = goRight <|> goUp 01:06:12 oh wait 01:06:13 it's actually 01:06:20 goNext = goRight <|> (goUp >>= goNext) 01:06:29 > (Just <|> undefined) 2 01:06:29 No instance for (Control.Applicative.Alternative ((->) a)) 01:06:29 arising from ... 01:06:30 goNext x = goRight x <|> (goUp x >>= goNext) 01:06:30 not bad 01:07:30 :t (id <|> id) 01:07:31 forall a. (Alternative ((->) a)) => a -> a 01:08:01 elliott: you're forgetting some goDown there 01:08:11 oh hm 01:08:17 what is the correct implementation? 01:08:40 well depends whether you want to do the parent node first or last 01:09:06 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 if you transform a child into something that causes the parent node to match ... hmm, no 01:09:25 yeah i guess both would be nice 01:09:39 oerjan: parent node first sounds like it needs less satck 01:09:44 s/satck/stack/ 01:12:30 [ 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 so sloooow 01:12:38 goDown x <|> goRight x <|> (goUp >>= goNext) 01:13:51 oerjan: what is goDown? 01:13:53 go down to first child? 01:13:58 yes 01:14:40 pretty 01:14:44 what's the other way around? 01:16:23 (goRight x >>= goBottom) <|> goUp x 01:16:34 #let alignment t = "%lu", (unsigned long)offsetof(struct {char x__; t (y__); }, y__) 01:16:37 hmm, does that _work_? 01:16:41 any language lawyers? :P 01:16:47 oerjan: goBottom? 01:17:05 goBottom x = (goDown x >>= goBottom) <|> pure x 01:17:23 ah 01:17:43 these are nice. feels like we've cracked it 01:17:49 that recursion is what i wanted many for, btw, but it doesn't fit 01:18:40 darn 01:18:52 hm? 01:19:27 re: many 01:21:57 it's a kind of muntil 01:22:13 @hoogle muntil 01:22:13 No results found 01:22:17 @hoogle untilM 01:22:17 No results found 01:22:35 http://hackage.haskell.org/packages/archive/monad-loops/0.3.0.2/doc/html/Control-Monad-Loops.html 01:22:41 untilM :: Monad m => m a -> m Bool -> m [a]Source 01:22:41 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 aha 01:23:00 not quite it, either 01:23:06 oerjan: well there's whileM 01:23:15 whileM :: Monad m => m Bool -> m a -> m [a]Source 01:23:16 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 oerjan: and whileM' does it for any MonadPlus 01:23:27 we _don't_ want a list :P 01:23:50 thus whileM' 01:23:51 Dependenciesbase (<4) or 01:23:51 base (≥4) 01:23:55 good dependencies 01:24:58 elliott: we need something with (a -> m a) argument 01:26:05 all of the untilM's and iterateUntil seem to think it's enought to just do an action. 01:26:23 which _technically_ is correct since you can use a StateT wrapping 01:26:27 i think 01:26:41 *enough 01:28:12 :t many . StateT 01:28:13 forall a s (m :: * -> *). (Functor m, MonadPlus m) => (s -> m (a, s)) -> StateT s m [a] 01:28:39 well many also collects, hmph 01:28:58 :t many_ 01:28:59 Not in scope: `many_' 01:29:03 :P 01:34:42 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 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 oh, i thought you meant in the past. 01:38:16 no, last 10 years :P 01:38:39 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 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 zzo38: http://comonad.com/reader/2011/monads-from-comonads/ seems relevant 02:28:22 oerjan: Yes I saw that too. 02:28:41 there's a whole series of posts 02:31:34 -!- aloril has joined. 02:36:18 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 Deewiant: I bet you know ALL ABOUT offsetof. 02:50:12 vladimir offsetof, famous russian book printer 02:57:59 :t replicateM 02:58:00 forall (m :: * -> *) a. (Monad m) => Int -> m a -> m [a] 02:58:16 :t peekElemOff 02:58:17 Not in scope: `peekElemOff' 02:58:19 ?hoogle peekElemOff 02:58:20 Foreign.Storable peekElemOff :: Storable a => Ptr a -> Int -> IO a 02:59:32 boris peekelemoff, notorious st. petersburg voyeurist 03:01:33 -!- aloril has quit (Read error: Operation timed out). 03:02:09 :D 03:08:05 i hate ffis 03:08:44 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 hey oerjan what happens if i work on something else to distract me from code problems but it's broken too???? 03:46:32 it's bugs all the way down 03:51:49 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 "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 instant download 04:10:31 Hell is awfully chilly today. 04:10:50 Why does Mozilla have to do anything about that? Bing could do it by themself, isn't it? 04:11:04 zzo38: Most definitely. 04:12:57 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 How much do you know about Local Sidereal Time? 04:47:10 Not much; there is no time but UTC. 04:51:30 There is other time specifications, though. 04:51:41 Few of them worthwhile. 04:52:16 It seems to depend what you do, such as solar time or whatever 04:53:54 DESTROY THE DAY STAR 04:53:54 :P 04:54:02 UT1, the Unreal Tournament time. 04:54:53 -!- Jafet has joined. 05:20:34 -!- copumpkin has changed nick to IAmTheOnePercent. 05:21:19 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 "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 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 -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 But the documentation seems to be wrong; selecting sidereal zodiac does not affect equatorial mode. 05:44:55 http://perldoc.perl.org/perlmod.html#BEGIN%2c-UNITCHECK%2c-CHECK%2c-INIT-and-END 05:45:04 The Awkawkawkawkawkawk section of Perl. 05:49:17 -!- pikhq_ has joined. 05:52:17 -!- pikhq has quit (Ping timeout: 256 seconds). 05:54:56 Actually it seems the 10th Cusp object might plot the local sidereal time 05:55:29 (That is, in equatorial mode) 05:55:37 zzo38: Why are you using Astrolog, anyway? 05:59:35 pikhq_: /nick elliott, i wanna try something 05:59:40 -!- elliott has changed nick to qqqq. 06:00:31 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 OK someone else take my nick. 06:05:23 monqy you do it. 06:09:12 hi 06:09:20 are you going to kill me ;_; 06:10:35 -!- elliott has joined. 06:10:49 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 oh 06:12:06 i forgot 06:12:07 oops 06:12:12 i apologise zzo38 06:12:17 i did not see it :( 06:13:49 Why don't you try it on another connection from your computer? 06:14:16 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 * elliott :Nickname is already in use. 06:15:35 * nicksev :No such nick/channel 06:15:37 -NickServ- elliott has been ghosted. 06:15:39 close enough :P 06:16:23 hmm, i guess xchat has no way to wait a bit 06:25:29 ?hoogle try 06:25:36 Control.Exception try :: Exception e => IO a -> IO (Either e a) 06:25:36 Control.OldException try :: IO a -> IO (Either Exception a) 06:25:36 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 elliott: Leeds? 06:27:04 Leeds is a place, yes. 06:27:30 A place you're in? 06:28:17 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 elliott: Maybe. 06:29:10 Langtoft? 06:29:55 I actually live in a little cardboard box underneath Sealand. 06:30:06 Oh. 06:30:28 What happened to I am in fact already in California. ? 06:30:39 We are all, in some sense, already in California. 06:30:49 Actually I have no idea why I said that. Nor do I remember saying it. 06:31:08 elliott: We were talking about how great the cheese in the US was, or something. 06:31:12 And by great I mean terrible. 06:31:17 And by cheese I mean something I don't remember. 06:31:55 pikhq_: nttpf 06:31:58 oh, you did 06:32:45 -!- DCliche_ has quit (Quit: You are now graced with my absence.). 06:42:16 elliott: FunPtrs are aptly named. 06:42:21 Yes 06:42:27 s/s/s./ 06:42:37 Surely you mean s/$/./ 06:42:51 Yes. 06:42:56 Anyway, get ready for a lot of fun. 06:43:39 s/(.)(.)(.)/\2\3\1/g 06:44:01 shachaf: Do _you_ know whether exceptions are meant to work from Haskell code called by C via a FunPtr? 06:44:26 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 elliott: Oh, that sounds exciting. 06:46:09 Speaking of excitement, it's 02:45 and I should go to sleep. 06:46:09 All you want to do is to have some FunPtr. 06:47:08 (Also, I don't know.) 06:48:06 Does Sealand follow the UK timezone/DST rules? 06:48:20 -!- aloril has quit (Read error: Operation timed out). 06:49:54 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 regardless of timezone you'll still be screwed when the polar night starts 06:55:15 Sure, but it'd still improve our midnight-sun-% by a whole lot. 06:55:52 ?hoogle Either SomeException a -> IO a 06:55:52 Data.Typeable typeOf2 :: Typeable2 t => t a b -> TypeRep 06:55:53 Prelude either :: (a -> c) -> (b -> c) -> Either a b -> c 06:55:53 Data.Either either :: (a -> c) -> (b -> c) -> Either a b -> c 06:57:46 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 olsner: if you're a pedantic asshole, sure 07:03:52 -!- aloril has joined. 07:04:00 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 why would I want to communicate with anyone else? 07:09:44 Also this bridge has got a hump in it: http://mw2.google.com/mw-panoramio/photos/medium/15358461.jpg 07:09:53 hmm, this is a _very_ difficult problem due to laziness :) 07:11:19 on the other hand 07:11:26 i don't get why it's even happening if laziness 07:12:42 -!- aloril has quit (Ping timeout: 260 seconds). 07:14:46 I wish df were open source. 07:15:09 it half is 07:15:13 well 07:15:17 source-available 07:15:28 yeha not the half I want. 07:19:07 http://lifehacker.com/5854053/how-to-stop-caring-about-trolls-and-get-on-with-your-life 07:19:10 ,,,, 07:19:10 ;;;; 07:19:26 worst troll ever. 07:24:53 -!- aloril has joined. 07:28:16 http://en.wikipedia.org/wiki/Indiana_Pi_Bill 07:28:37 or wait, maybe the Indiana General Assembly collectively are the worst trolls. 07:30:13 yesss, one IORef and a bunch of code later, it works 07:31:22 aren't IORefs like communing with demons or something? 07:31:34 the angry demons of mutability or... something. 07:36:39 I think they are more like angry demons of mutability put in little cages for safer handling 07:37:56 http://sprunge.us/YVVQ 07:37:59 this code is quite messy. 07:40:01 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 hi ais523 07:42:48 hi elliott 07:43:02 just woken up, or not yet gone to sleep? 07:43:37 I'm not even sure myself 07:43:41 but I think it's the latter 07:45:38 ?hoogle Bool -> m a -> Maybe a 07:45:38 Control.Exception assert :: Bool -> a -> a 07:45:38 Control.OldException assert :: Bool -> a -> a 07:45:38 Control.Exception.Base assert :: Bool -> a -> a 07:45:41 ?hoogle Bool -> m a -> m (Maybe a) 07:45:41 Data.Generics.Aliases orElse :: Maybe a -> Maybe a -> Maybe a 07:45:41 Control.Monad unless :: Monad m => Bool -> m () -> m () 07:45:41 Control.Monad when :: Monad m => Bool -> m () -> m () 07:48:32 ?pl \b mx -> if b then return Nothing else liftM Just mx 07:48:32 (. fmap Just) . flip if' (return Nothing) 07:55:20 @hoogle Bool -> a -> Maybe a 07:55:21 Control.Exception assert :: Bool -> a -> a 07:55:21 Control.OldException assert :: Bool -> a -> a 07:55:21 Control.Exception.Base assert :: Bool -> a -> a 07:56:03 ?pl \b x -> guard b >> Just x 07:56:03 (. Just) . (>>) . guard 07:58:13 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 If you ask some kind of adminy person, probably 07:58:49 Otherwise he needs to disown it 07:58:53 If I understand correctly 07:59:47 Oh well, I guess I can tolerate momentary hostile contact :D 08:00:24 Holy fuck, someone who isn't Vorpal uploaded a cfunge package 08:00:34 Then 3 people voted for it?? 08:00:49 I may've voted for it 08:01:02 I said three, not one :P 08:01:02 It's outdated by now though 08:01:14 Well, he probably did and if I did that makes two 08:01:19 (he = submitter) 08:01:24 (uploader) 08:01:25 (whatevre) 08:01:26 (er) 08:01:26 Maybe Vorpal did too then 08:01:28 Fiine 08:01:29 * elliott considers making a package for CCBI, realises it's D, gives up on idea immediately. 08:01:43 You could make ccbi-bin 08:01:55 As a wise man once said: Gross 08:02:04 Ha, ldc is orphaned and out of date 08:02:11 What's the D compiler of the year 08:02:13 Or you could depend on ldc-bin and company, it should build without too much trouble 08:02:18 I dunno 08:02:23 BeholdMyGlory: Hey, stop maintaining ldc-hg, it's weird seeing names from here elsewhere 08:02:24 I don't know how alive D1 is in general 08:02:32 I thought CCBI2 was D2. 08:02:36 It's not 08:02:58 Will it start being D2 when mushspace comes out? :p 08:02:59 I might make it D2 what with GDC going into GCC and all 08:03:12 You should also make it: not depend on Tango. 08:03:19 That's the main problem :-P 08:03:31 Unfortunately: Tango is the only good library. 08:03:43 Deewiant: It's also completely unmaintained to my knowledge :P 08:03:51 You could: use a real programming language. 08:04:03 It's maintained 08:04:07 "Real" here is defined as literally anything but D how do you even end up with multiple stdlibs. 08:04:15 Deewiant: pikhq said not a few weeks ago 08:04:18 C has multiple stdlibs 08:04:22 A cursory glance at their website supported this 08:04:28 There are changesets from 4 days ago in the timeline 08:04:30 And yeah but they all follow the same rough standard 08:04:46 The difference between what you're about to say and D is that people actually use both Phobos and Tango 08:04:49 The problem is that D has no standard 08:05:24 So in conclusion 08:05:27 And if I could do the metaprogramming shit conveniently I might move CCBI to C++11, but I doubt I can 08:05:32 I'll package CCBI if you completely rewrite it 08:05:44 I could package it myself if I cared :-P 08:05:44 Deewiant: OK, you picked possibly the only worse language to move it to. 08:05:52 elliott: Smallest effort 08:06:17 Like okay sure I could use a Lisp but that's a full rewrite, of every single line 08:06:17 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 Yeah but "conveniently" 08:06:51 You should rewrite it in Haskell, and call it shiro. 08:06:58 I don't want to, because it would be slow. 08:07:03 And also a 100% rewrite. 08:07:11 No fuck you it is going to be so fast. 08:08:10 Deewiant: Well, dmd is in community 08:08:15 Does CCBI work with dmd/tango 08:08:19 Yes but DMD sucks 08:08:25 Define sucks 08:08:34 It might be slower than shiro 08:08:40 Wow 08:08:46 (Okay maybe not that slow but still) 08:08:53 Heyyy :P 08:08:53 I haven't used it in a while, dunno 08:08:58 shiro is faster than Language::Befunge. 08:08:59 It might also not build due to bugs 08:09:03 By lots. 08:09:05 That's not an achievement ;-) 08:09:12 IT'S PROBABLY EVEN FASTER THAN PYFUNGE. 08:09:27 Woo, beating interpreted languages 08:09:31 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 What's the better approach 08:09:51 Depends 08:10:18 I think IORefs would buy me quite a bit in Shiro though 08:10:24 Also I should factor a lot of it out to be completely pure and take params 08:10:29 Rather than just doing read-only shit on the state 08:11:18 ?hoogle StateT s m a -> ReaderT s m a 08:11:18 No results found 08:11:33 ?hoogle ReaderT s m a -> StateT s m a 08:11:33 No results found 08:11:34 Deewiant: Yeah, no 08:11:36 elliott: is it faster than Perl? 08:11:41 that's the true test. 08:11:47 Deewiant: That still has the problem that it takes EVERY SINGLE GLOBAL 08:11:52 Rather than, e.g.: what it needs. 08:12:03 CakeProphet: Language::Befunge is Perl. 08:12:28 oh, I guess I should have pressed page up. :P 08:12:44 elliott: But hey re. C++11 at least people could build it 08:13:02 Deewiant: Unless they're on e.g. Debian stable (I think) 08:13:12 Well yeah, the 11 makes it harder 08:13:15 gcc (GCC) 4.6.1 20110819 (prerelease) 08:13:15 Prerelease? Seriously guys? 08:13:29 I just said 11 because it's likely that such will be useful :-P 08:13:37 Arch's goal in life is to always be at the absolute latest repository commit of every package. 08:13:44 Not really 08:13:52 Or, better: Latest set of working files on the most active developer's computer. 08:14:03 It's probably a prerelease build that's equivalent to the release 08:14:10 Shut up with your facts and logic. 08:14:13 Besides, 4.6.2 is out 08:14:20 Yeah, so is GHC 7.2.1 08:14:24 Yep 08:14:49 I can't really complain though because AUR is about 34895734985793485 times better than cabal-install. 08:15:02 So I am pretty much unreasonably happy as far as Haskell goes. 08:15:26 I ran into problems regarding outdated packages so switched back to cabal-installing everything 08:15:34 AUR updates too slowly :-p 08:15:36 ldc 1574-1 08:15:36 Last Updated: Sun, 04 Oct 2009 20:28:36 +0000 08:15:36 First Submitted: Thu, 04 Dec 2008 18:07:57 +0000 08:15:36 Noice 08:15:44 Deewiant: You could use cabal2arch yourself 08:15:50 elliott: What a pain 08:16:07 Deewiant: Meh, just a matter of writing a pacabalman script :P 08:16:39 elliott: What a pain 08:16:44 Deewiant: Okay, so will CCBI build with an LDC from hg and a tango from SVN 08:16:54 Oh for fuck's sake BeholdMyGlory 08:16:56 No not a tango from SVN probably 08:16:59 You haven't updated them in literally a year 08:17:21 "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 > pi * 10000000000000000000000000 08:17:38 3.1415926535897935e25 08:17:47 * CakeProphet gasps! :o 08:18:01 Deewiant: Just... 08:18:09 Deewiant: Just port it to something reasonable already :P 08:18:21 That's not unreasonable, that's the latest Tango release :-P 08:18:32 It's funny because you just claimed D is reasonable! 08:18:47 It got less reasonable over time 08:19:14 I was having problems with D toolchains in 2007, 2008 08:19:24 You're you 08:19:49 You tend to find problems in everything :-P 08:20:04 No, problems like "I literally can't get a compiler working" 08:20:10 "Apart from this ancient gdc" 08:20:28 Yes, because you're you 08:20:50 No, everyone else is just suffering under a collective delusion that D has ever worked 08:21:20 I.. don't think I have that delusion 08:21:31 I think most people have the collective delusion that D is not a thing. 08:21:41 or they don't know very much about it. :P 08:22:02 elliott: Feel free to suggest good targets for porting 08:22:22 (Note: anything slower than C is not good) 08:22:38 Fortran! 08:22:48 Lacks metaprogramming 08:22:57 Fortran with CPP 08:23:02 CPP isn't metaprogramming 08:23:20 maybe you're just not inventive enough. :P 08:23:27 Maybe I don't want to be 08:23:46 Deewiant: C 08:23:53 C++ is "slower than C", anyway 08:23:54 As is D 08:23:59 C lacks metaprogramming 08:24:03 And no, not really 08:24:13 They're within margin of error at worst ;-P 08:24:36 C has metaprogramming 08:24:51 And your uses of metaprogramming are mostly superfluous, at least the ones I saw :P 08:25:08 Java. 08:25:14 C doesn't have metaprogramming :-P 08:25:26 cpp 08:25:28 CakeProphet: Note: anything that doesn't create native binaries is not good 08:25:31 CPP isn't metaprogramming 08:25:41 Yes, it is; also, gcj 08:25:52 Ada. 08:26:07 Yes. Ada. 08:26:13 Go with Ada. 08:26:51 Meh, I don't wanna learn Ada 08:27:09 ATS 08:27:17 Nobody wants to learn ATS 08:27:40 so I guess you're stuck with C with CPP 08:27:48 because no one would want to use D. 08:28:15 C++ is much better, with its templates 08:28:23 For the kind of metaprogramming I do 08:28:26 -!- derrik has joined. 08:28:38 But I don't know if it's sufficient, at least without much pain 08:29:00 pain is the only concept that's relevant to C++ 08:29:28 Nobody wants to learn ATS 08:29:29 I do 08:30:57 -!- ive has quit (Quit: leaving). 08:31:53 anyway you could use GHC as it can approach speeds that are reasonably close to the average C program. 08:31:56 just become a badass 08:32:04 and then your speed addiction will be solved 08:32:43 -!- monqy has quit (Quit: hello). 08:38:02 elliott: I wish the great language shootout had data on LuaJIT. 08:38:49 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 there is no replacement for Perl. Well, maybe Perl 6. 08:40:44 hmm, I need a nicer name for this whiz-bang high-level library than hubbub-tree 08:41:21 what does it do? 08:41:38 hubbubs trees 08:42:26 right, what the hell is that. 08:43:26 Yes 08:43:35 s/$/./ 08:43:59 I. see. 08:44:08 well, sorry, I can't help you with your name problem. 08:44:13 not knowing what a hubbub tree is. 08:45:24 http://thesaurus.com/browse/rowdydow commotion, babel, bedlam, brouhaha, clamor, hullabaloo, pandemonium, ruckus... 08:45:38 plenty of good names. 08:45:39 1. (1) hubbub, uproar, brouhaha, katzenjammer -- (loud confused noise from many sources) 08:45:45 katzenjammer-tree. 08:50:06 elliott: are these "reverse context trees"? 08:50:12 No. 08:50:17 Okay 08:52:44 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 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 Heh. 08:56:09 atehwa: That makes the grossly unjustified assumption that this channel was ever sincerely on-topic. 08:56:37 ;_; 08:56:56 (of course, I don't really think that channels should be on-topic.) 08:57:04 Only ais523 thinks that. 08:57:23 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 warning: haskell-haskell-src-exts-1.11.1-20 is up to date -- reinstalling 08:57:42 That sure makes a lot of sense, aurget! 08:57:54 Deewiant: I am a convert to the yaourt cause 08:58:06 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 atehwa: Oh, certainly! C++ sudoku is one of my favourite games. 08:58:39 But for something /serious/ like a Funge-98 interpreter... 08:58:40 this is making the implication no pros -> esoteric 08:58:44 which is totally wrong. 08:59:31 Funge-98 is probably the best language for a Funge-98 interpreter. 08:59:38 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 yes, like Perl. 09:00:33 using C++ _does_ have artistic value, even though the language is not very esoteric. 09:00:37 yes, like Perl. 09:01:01 well, Perl /can/ be practical and expressive, but I don't know if those qualifiers fit always. 09:01:32 But why bother with those values, when its artistic value is not to be questioned? 09:02:39 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 ;_; 09:03:25 it's an art of organization, efficiency, clarity, and probably a few other nouns. 09:04:27 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 I wouldn't say that. 09:05:17 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 mark me down on the record as super anti-this statement 09:05:34 marked. 09:06:34 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 they're noted. especially here. 09:06:54 That was meant to be atehwa++. 09:06:58 But I can't use computers. 09:07:21 elliott: what happens when atehwa wraps around? 09:07:27 is that like, a huge diss? 09:07:33 wicked burn, etc? 09:07:41 @karma atehwa 09:07:42 atehwa has a karma of 0 09:07:45 :( 09:07:48 @karma elliott 09:07:49 You have a karma of 2 09:07:50 :) 09:07:52 I also know that organisation, efficiency, clarity, and so on are important, but they also depend on one's aesthetic preferences 09:07:54 @karma CakeProphet 09:07:54 @bot 09:07:54 :) 09:07:55 You have a karma of 0 09:08:19 atehwa: well, aside from efficiency, but efficiency is not a requisite for good programs. 09:08:39 if one was to define expressivity, what it comes down to is http://c2.com/cgi/wiki?NumberOfKeystrokes 09:08:51 I do believe there is such a thing as good organization and bad organization. 09:08:59 and no, there's not really a quantifiable metric for it. 09:09:06 if one was to define efficiency, what it comes down to is http://shootout.alioth.debian.org/ 09:09:20 @karma 09:09:21 You have a karma of 1 09:09:42 just what #esoteric needs: a brownie point system. 09:09:47 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 Especially expressivity = keystrokes is problematic. 09:10:25 -!- copumpkin has quit (Ping timeout: 245 seconds). 09:10:42 I've been advocating this for quite some time; I'd like to hear the counterarguments 09:10:43 Certainly the idea is to minimise human<->computer friction to express a program. 09:10:50 -!- copumpkin has joined. 09:10:59 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 Yet the former's expressivity scales far better. 09:11:21 Haskell vs. GolfScript 09:11:21 elliott: it depends on what one is used to 09:11:48 if we're not trying to measure the efficiency of language-user pairs but languages, then number of keystrokes makes sense 09:12:03 s/efficiency/expressivity/ 09:12:19 number of keystrokes for.. what? an average of every program ever written? 09:12:21 and actually, it is the expressivity of a language for a certain task 09:12:24 atehwa: Well, the question is -- what CakeProphet said. 09:12:34 The domain is "programs people actually want to write". 09:13:03 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 (Because it's unreadable.) 09:13:39 yet Python is readable but not incredibly expressive compared to other high level languages. 09:15:28 here expressive means... what one can accomplish with a single expression. 09:17:01 and single expressions means what? 09:17:45 please go read one of the many definitions of what an expression is. preferably a correct one. 09:18:04 http://s3.amazonaws.com/theoatmeal-img/comics/brain/ideas.png 09:18:22 Have we actually proven that derrik isn't a Markov bot? 09:18:28 no. 09:18:41 Well, we know CakeProphet is. 09:18:47 CakeProphet: "correct" as in ... ? 09:19:15 elliott: it's reasonably hard to prove that anyone isn't a markov bot, I think 09:19:51 derrik: do you actually know what an expression is? 09:20:16 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 i know that no single word means anything without context, CakeProphet 09:20:44 for instance, what kind of task is Python "not incredibly expressive" for? 09:20:50 atehwa: so all the "Python is sooooooo expressive" blog posts are invalid. Yes, I can agree with that statement. 09:21:14 derrik: the context here is programming languages, dude. 09:21:41 CakeProphet: not so familiar with programming languages.. but i am very familiar with natural languages 09:21:43 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 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 this?: print sorted([(line, lineno) for lineno, line in enumerate(file("foo.txt"))]) 09:23:09 elliott: yes, that's true. 09:23:37 it just often turns out that people want to write different stuff. 09:24:02 main = readFile "foo.txt" >>= print . sortBy (comparing fst) . zip [0..] . lines 09:24:16 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 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 atehwa: I normally phrase that as "Perl has excellent library support" 09:26:09 yes 09:26:38 elliott: metaprogramming is cool, but it too, can be used more for some tasks and less for others 09:26:43 Perl is also pretty expressive in not-that-sense as well. 09:26:55 atehwa: I just meant, I think that's what most people would say when they talk about the expressivity of Lisp. 09:27:04 Rather than what you said. 09:27:08 But I might be wrong. 09:27:57 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 Well, metaprogramming is just a kind of abstraction. 09:28:47 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 (And like all abstraction offers obfuscatory potential etc. etc. etc., but that's probably true of anything that increases expressivity.) 09:29:13 (There's that word again!) 09:29:36 therefore Perl is the best at expressionsivity. 09:29:40 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 maybe if you're a software project manager. 09:31:03 maybe in every case. 09:31:34 hmmm, okay, well that's solved then. 09:31:37 good! 09:31:39 next topic: let's measure "beautiful" 09:31:47 yes, I was just coming to that :) 09:32:29 I think the Saw movies had beautiful imagery. 09:32:39 atehwa: IMO, number of keystrokes saved is a bit of an overly first-order interpretation. 09:32:44 if not the best storyline, or well, anything else. 09:32:48 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 elliott: but it does correspond to Java not being terribly expressive 09:33:17 Let's at least say: Mean of number of keystrokes saved by you in every possible universe weighted by its probability. 09:33:18 which is very acceptable for me. :P 09:33:34 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 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 I think reducing the number of some kind of language-defined construct might make more sense? 09:34:36 like... "atoms"? 09:34:48 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 but this doesn't say anything at all about the language, just the particular abstraction being used. 09:35:40 CakeProphet: aka token 09:35:45 yes, that works. 09:36:23 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 and compare "i" with "indexOfTraversedArray" 09:36:57 1 and 3, respectively. 09:37:07 what you name your variables is totally irrelevant to expressivity. 09:37:34 humhum 09:37:56 I think that a language that would require me to use very long variables is quite unexpressive (or quite unimpressive) 09:38:18 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 and it would be pretty much the same thing I think? 09:38:26 atehwa: so do we count keystrokes an ide saves you? 09:38:44 OO languages increase expressivity by allowing same names to be used for operations of different data types 09:38:49 elliott: if we have to 09:38:52 Visual Studio, most expressive programming language. 09:38:52 "Similarly, if someone asserted that cats were vegetables, someone correcting this might emphasize the last word:

Cats are cute animals.

" -- HTML5 specification, the best specification. 09:39:00 but I don't like to use an IDE, so... 09:39:14 atehwa: So it's not measuring the expressivity of a language, it's a development environment (Unix counts) 09:39:24 Oh no, I told the Risc OS people I'm a Haskell person and now they think I'm weird. 09:40:01 Perl in a UNIX environment is the most expressive. I get bash and Perl and everything in UNIX! 09:40:01 elliott: I don't believe IDE's save all that many keystrokes... 09:40:10 elliott: /Risc OS/ people think you're weird? 09:40:12 the bash and UNIX stuff is just 2 tokens away. ` and ` 09:40:39 atehwa: Like I said, Unix counts. 09:40:44 atehwa: My point is that your tools matter. 09:40:57 elliott: I consider UNIX a good development environment 09:41:00 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 I'm not sure if it counts as an IDE, though 09:41:22 `addquote 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 699) 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 it's probably slightly better out of context 09:41:37 `quote 09:41:38 `quote 09:41:40 395) two quotes about quotes about django I guess the worst part is that I appear in all three hackego quotes about django 09:41:41 `quote 09:41:41 591) Electrons are so fragile X-D 09:41:42 `quote 09:41:43 270) gah, why does lose keep winning? 09:41:44 `quote 09:41:44 27) PA ET ANNET UNIVERSET DER DE ENESTE PERSONEN OERJAN: sa jeg kan bare konkludere med at det er feil, eller er verden helt bonkers 09:41:46 628) 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 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 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 `delquote 591 09:42:10 ​*poof* 09:42:15 elliott: it was either that one or 628 09:42:25 I'm not sure which was worse 09:42:34 628 is my favourite there 09:42:42 ah, OK 09:42:55 27 is probably the weakest, but: tradition. 09:42:55 I like 395 the best, I think 09:42:58 we haven't made very much progress on measuring beautiful. 09:43:04 atehwa: Right. So you're not really measuring the expressivity of a language at all :) 09:43:38 ...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 Finally something none of us can disagree with. 09:44:28 maybe we could measure the hip-waist ratio of programs to determine beauty. 09:46:15 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 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 You might think it doesn't make much difference in practice, but it's still a difference. 09:46:53 And all I have to do is make the tools more magical until it's all the difference :) 09:47:09 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 what is the expressivity of Piet? 09:47:35 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 this brings to my mind a book where they talked about inducing (logic) programs, such as Prolog programs 09:48:02 So there's an example where a more verbose coding style but a fancier editor results in less overall keystrokes. 09:48:13 So it's not about the language (consider if it enforced the coding style). 09:48:15 I don't think Piet is programmed with keystrokes, necessarily. 09:48:59 -!- elliott has quit (Remote host closed the connection). 09:49:05 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 I think it would stand even if the extra length was only caused by longer identifier names. 09:50:05 Hello! 09:50:17 -!- elliott has joined. 09:50:26 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 I think it would stand even if the extra length was only caused by longer identifier names. 09:51:12 So, you're saying it literally never applies? i.e., every identifier should be as short as physically possible? 09:51:36 I'll try to rephrase what I'm trying to claim 09:51:38 this is why Perl is the best language. 09:52:09 to accomodate the length of sigil, you simply remove spaces in front of the sigil. 09:52:14 my $x becomes my$x 09:52:49 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 in this sense, Charles Babbage's Analytical Engine has the least expressive language. 09:54:06 all those punch cards. You probably have to shovel coal into a furnace or something too because it's steam-powered. 09:54:24 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 CakeProphet: but count out the work that goes into _executing_ the program. 09:55:05 hmmm, wait I don't think it's steam powered 09:55:24 only count the work that goes into _specifying_ the program. 09:55:35 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 yes, and i've been trying to prove that it isn't about the language :) 09:55:50 and that it only makes sense in terms of an entire toolchain 09:55:56 ah well I just use slaves to punch my Analytical Engine cards. 09:56:16 slaves = most expressive component of your toolchain. 10:01:05 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 "almost negligible" implies it isn't negligible 10:01:37 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 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 atehwa: But maybe I'll agree that /today/ it doesn't matter all that much beyond pathological examples like that. 10:02:28 (Although worryingly common ones.) 10:02:35 hlep Piet and keystrokes problem ignored. 10:02:36 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 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 elliott: what is @? Pointer? 10:03:22 elliott's operating system type thing porject 10:03:23 It, er; oh no, ais isn't here, I can't even delegate the task. 10:03:26 It's an OS. Sort of. 10:03:29 *project 10:03:38 Except not really. 10:03:38 Hence "type thing" 10:03:44 elliott: in the lines of INTERLISP-D? 10:03:45 Except yes really but it's misleading to think of it in those terms. 10:03:52 @ is The Most Revolutionary Mostly Undefined Thing. 10:04:10 atehwa: Attempting to go for the most obscure reference possible? :-) 10:04:12 It's an operating system, Jim, but not as we know it 10:04:13 suitable for the many porpoises. 10:04:37 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 Well, @ is certainly lumpable under the "language-based OS" banner, although that's not strictly true. 10:05:12 NULL is the most obscured reference. 10:05:19 Scheme is waaayy below it, though :-) 10:05:36 (Note: Same applies to almost every language I know of; the rest are just way below, rather than waaayy below.) 10:05:37 elliott: I'm sure it is. 10:05:46 elliott, the things you say are getting annoyingly close to self-contradictions 10:05:56 Ngevd: Well, they are... and they aren't. 10:05:59 :P 10:06:18 wait a second, I thought I had copyright on self-contradictions here? 10:06:25 I will have to take legal action soon. 10:06:33 CakeProphet: Piet kinda handled by changing "number of keystrokes" into "amount of physical work" 10:07:10 pure-data is probably the least expressive language then 10:07:14 because it's a pain in the ass to program. 10:07:58 CakeProphet, that's a generic trademark now 10:08:03 example program: http://en.wikipedia.org/wiki/File:Pd_example_3.svg 10:08:44 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 Well, s. 10:08:58 program(s) --yes 10:09:08 But what's a plural between friends. 10:09:12 No, wait, we're not friends. 10:09:14 Between enemies. 10:09:40 I guess one could also replace a Java IDE with macro preprocessing :) to set up sensible abbreviations for all boilerplate code. 10:09:44 actually I would the massive spaghetti mess underneath all of those clean UIs is more representative. 10:09:49 *would say 10:10:57 anyway graphical dataflow languages are an interesting concept, but I'd prefer more textiness. 10:11:07 http://goto10.org/wp-content/uploads/goto10.org/2008/11/pure_data-workshop.png 10:11:17 How about that for representativeness? 10:11:24 yes that's not too far off. 10:11:49 you can mitigate that kind of situation with some good style, but no one does this of course. 10:11:53 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 `echo elliott 10:16:41 elliott 10:16:47 ^echo elliott 10:16:47 elliott elliott 10:17:02 Yay, t'works. 10:17:23 `run echo `echo echo` 10:17:25 echo 10:17:32 `echo elliott 10:17:34 elliott 10:17:35 ^cho elliott 10:17:36 elliottlliottliottiottottttt 10:18:26 Man, nobody told me `speaker-test -c2` produced avant-garde noise on command. 10:18:33 > map head (tails "elliott") 10:18:34 "elliott*Exception: Prelude.head: empty list 10:18:35 fizzie: Make fungot do a /me that highlights me pls. 10:18:35 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 ^bf +.,[.,]+.!ACTION elliott whatever 10:19:20 * fungot elliott whatever 10:19:25 Sigh. 10:19:27 OK, to clarify 10:19:32 fizzie: One that doesn't highlight me the line before :P 10:19:41 That worked, but probably only because you highlighted me... 10:20:01 ^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 just do a rot13 10:20:07 or that. 10:20:11 ^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 is there documentation somewhere about the many bots on the channel? 10:21:03 dunno ask fungot 10:21:04 CakeProphet: and what a grand thing it would be glad to be helped up again. 10:21:19 fungot: is there documentation about you and your comrades? 10:21:19 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 ^bf +.,[-.,]+.!BDUJPO!fmmjpuu!whatever 10:21:23 * fungot elliott vg`sdudq 10:21:35 ^style 10:21:35 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 sdudq, good data structure name. 10:21:55 ^style irc 10:21:55 Selected style: irc (IRC logs of freenode/#esoteric, freenode/#scheme and ircnet/#douglasadams) 10:21:56 `help 10:21:57 Runs arbitrary code in GNU/Linux. Type "`", or "`run " for full shell commands. "`fetch " downloads files. Files saved to $PWD are persistent, and $PWD/bin is in $PATH. $PWD is a mercurial repository, "`revert " can be used to revert to a revision. See http://codu.org/projects/hackbot/fshg/ 10:22:08 There is "documentation" in the sense of 10:22:10 ^prefixes 10:22:11 Bot prefixes: fungot ^, HackEgo `, EgoBot !, lambdabot @ or ? 10:22:14 `prefixes 10:22:15 Bot prefixes: fungot ^, HackEgo `, EgoBot !, lambdabot @ or ? 10:22:17 ^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 ^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 Ugh, why won't it be context-sensitive. 10:22:37 fizzie: interesting. 10:22:47 !prefixes I think used to work too maybe I guess. 10:23:06 `!prefixes 10:23:08 ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: !prefixes: not found 10:23:10 !prefixes 10:23:13 But EgoBot's being uncoöperative, to ö a bit, lately. 10:23:32 and besides, lambdabot has > too 10:23:35 > 1 10:23:35 1 10:23:44 > head [1..10] 10:23:45 1 10:23:46 It's different. 10:23:53 It does that ":t" thing on-channel also. 10:23:59 :t Nothing 10:24:00 forall a. Maybe a 10:24:04 `echo HackEgo is th ebest. 10:24:06 HackEgo is th ebest. 10:24:28 `words 10:24:30 ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: words: not found 10:24:34 :( 10:24:38 ^echo fungot is the eboniest. 10:24:38 fungot is the eboniest. fungot is the eboniest. 10:24:50 `ls bin 10:24:52 ​? \ 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 why did words get deleted? :( 10:25:40 `word 4 10:25:42 strunkuna cal las cous 10:25:45 oh. 10:25:46 It just got truncamated in the ls. 10:25:46 * CakeProphet is blind. 10:25:51 or that. 10:25:55 `run ls bin/w* 10:25:57 bin/wl \ bin/word \ bin/wtf 10:26:09 `word 10 10:26:12 fes banchind wiigandepatalastollinqui mter genbrimed inata mes chedu chturtihaheaing hot 10:26:30 hot 10:27:02 strunkuna cal las cous 10:27:05 sounds like a phrase 10:27:09 You're such a chedu. 10:27:49 fizzie: The relevance is an inata 10:28:01 Good god, there's no Clearlooks for GTK3? 10:28:18 For some reason I think 'chedu' sounds like a derogatory racial term from Star Wars. 10:28:56 wiigandepatalastollinqui is an ancient god. 10:29:40 "Valarin seemed to use long words; for example, the Valarin word for Telperion, Ibrîniðilpathânezel, is eight syllables long." 10:29:58 CakeProphet, that's the Mayan god of esoteric programming languages 10:34:29 `run echo '[a-z'\''-]+(?<='\''s)' 10:34:31 ​[a-z'-]+(?<='s) 10:34:35 hmmm 10:35:16 does '[a-z'\''-]+(?<='\''s)' count as a single argument? 10:35:52 It should; there's no whitespace in there. 10:36:26 eng_filter='[a-z'\''-]+(? gb_opt eng-1M Eng1M $eng_filter 10:36:40 sh: Syntax error: ")" unexpected 10:37:15 Sure, it's not escaped/quoted any more at that point. 10:37:21 Try "$eng_filter" or some-such. 10:37:29 oh right... 10:37:34 stupid bash. 10:37:35 -!- GreaseMonkey has quit (Quit: The Other Game). 10:38:13 fizzie: same thing. 10:38:22 -!- Phantom_Hoover has joined. 10:38:25 hi Phantom_Hoover 10:38:27 s/ $// 10:38:34 That was quick. 10:38:34 Phantom_Hoover: You have 2 new messages. '/msg lambdabot @messages' to read them. 10:38:39 elliott: ah. I was confused. 10:38:43 until you made that correction. 10:39:09 I was like "who is Phantom_Hoover ?" 10:39:43 -!- ais523 has joined. 10:39:45 fizzie: same error. it doesn't seem to change anything. 10:40:54 CakeProphet: Hrm. Well, I'unno. foo='[a-z'\''-]+(? maybe because the "$eng_filter" is being passed to a function 10:41:20 which then doesn't quote things. 10:41:32 bash is silly. :P 10:41:33 [11:40] 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 [11:40] I have a feeling that I'm missing some sort of syntax for declaring a string a character at a time 10:41:45 I asked in #ocaml, but I'd better ask here too just in case somebody knows 10:41:47 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 it shouldn't be that difficult an operation... 10:41:54 *… 10:42:06 fizzie: right, I'm not quoting inside the function. so that's the problem. 10:42:20 I don't know OCaml 10:42:39 If it's anything like Haskell, surround it by square brackets 10:43:12 ais523: I'm sure there's something in the string module 10:43:14 which I think exists 10:43:24 elliott, didn't you read? 10:43:27 There is something in the String module, but "without using any modules". 10:43:28 He's not using modules! 10:43:31 Oh. 10:43:46 ais523: Surely the string module is not all that unsafe. 10:44:10 * elliott tests somethin 10:44:10 g. 10:44:12 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 #ocaml have come up with a suggesiton, I'll try it 10:44:32 -!- elliott has joined. 10:44:35 ais523: Is the suggestion... complicated and perverse? 10:44:55 Hey, look, they've changed the royal succession rules for Commonwealth countries 10:45:20 # let x = "x" in x.[0] <- 'y'; x ;; 10:45:21 - : string = "y" 10:45:23 fizzie: indeed 10:45:23 How does that work? 10:45:32 turns out strings are mutable in OCaml 10:45:38 so I use a one-character string literal and mutate it 10:45:41 Commonwealth countries recognise a different monarch to the UK? 10:45:50 UK's in the Commonwealth 10:46:16 -!- elliott has quit (Client Quit). 10:46:26 -!- elliott has joined. 10:46:42 gb_opt() { echo perl ./construct_grams.pl -m "${2:-$1}"${3:+ -f $3}${4:+ -e $4} $D/googlebooks-$1-*.csv; } 10:46:45 d_opt() { echo perl ./construct_grams.pl -m "${3:-$1}"${2:+ -e "$2"}${4:+ -f "$4"} dict/$1; 10:46:53 bash is the best programming language for writing abstractions 10:47:21 # string_of_char 'a' ^ string_of_char 'b' ;; 10:47:22 - : string = "aa" 10:47:24 oh dear 10:47:37 nope. same error. :( 10:47:58 the joys of impure languages, right? 10:48:06 ais523: wat 10:48:17 elliott: it's closing over "x" 10:48:27 I don't even want to know. 10:48:33 so it's modifying the same string literal twice 10:48:36 Does anyone know how to get my LAN IP without ifconfig? 10:48:37 ais523: Heh, heh. What if you return "" ^ x after mutating x. 10:48:48 I guess I need to like 10:48:48 ais523: oh, that's your string_of_char 10:48:50 echo the "'s ? 10:48:55 ughhhhhzsodihwiuerhiuwerh 10:49:05 ais523: why not just make a new variable each time 10:49:18 ais523: let string_of_char char = let x = "x" in x.[0] <- 'y'; x ;; 10:49:24 or does that actually share the "x" 10:49:29 in which case: ewwwww 10:49:52 elliott: it closes over the "x" 10:49:57 ais523: that's disgusting 10:50:02 # let string_of_char c = let x = "*" ^ "" in x.[0] <- c ; x ;; 10:50:04 val string_of_char : char -> string = 10:50:05 # string_of_char 'a' ^ string_of_char 'b' ;; 10:50:07 - : string = "ab" 10:50:09 concatenation operator saves the day 10:50:13 ais523: I prefer fizzie's 10:50:14 as it has to construct a new string each time 10:50:25 `run echo \"test\" 10:50:27 let string_of_char c = let x = " " in x.[0] <- c; "" ^ x ;; 10:50:27 ​"test" 10:50:49 aha, "ip addr show dev eth0" 10:51:21 But would let x = " " in x.[0] <- c; "" ^ x ;; be theoretically non-re-entrant? 10:51:41 fizzie: indeed 10:51:50 perl ./construct_grams.pl -m "Eng1M" -f "[a-z'-]+(? 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 er wait I don't want the * in quotes. 10:53:12 wuehruhweriuhasudhiuwehr 10:53:13 -!- elliott has quit (Client Quit). 10:53:19 -!- elliott has joined. 10:53:26 -!- hagb4rd has joined. 10:53:26 _sigh_ what is this thing complaining about 10:53:40 Also with the default bash config (histexpand true) ""s aren't enough to quote a !. 10:53:52 uh, why? 10:53:58 what's special about ! 10:54:01 $ echo "foo!bar" 10:54:02 bash: !bar": event not found 10:54:04 That's why. 10:54:08 It's the history expansion character. 10:54:12 so... \!? 10:54:12 (Well, the default one.) 10:54:21 -!- elliott has quit (Client Quit). 10:54:25 -!- elliott has joined. 10:54:31 $ echo "foo\!bar" 10:54:31 foo\!bar 10:54:31 WHY WOULD YOU SAY NO IDENT RESPONSE 10:54:32 Not quite. 10:54:33 OH 10:54:34 duh 10:54:44 -!- elliott has quit (Client Quit). 10:54:49 -!- elliott has joined. 10:54:51 fizzie: help what do. 10:54:56 Excellent. 10:54:59 ais523: Look at mah hostname. 10:55:33 fizzie: also does * not expand inside quotes? 10:55:53 CakeProphet: I suggest: despair. And yes, * does not expand inside quotes. 10:56:01 how do I quote spaces in a file name and also expand wildcards? 10:56:04 WEIRWEEHRJIUS bash string hell. 10:56:14 You put the * outside the quotes. 10:56:26 oh so wildcard expansion comes after quote expansion 10:56:39 htkallas@pc112:~$ touch 'foo bar 1' 10:56:39 htkallas@pc112:~$ touch 'foo bar 2' 10:56:39 htkallas@pc112:~$ echo "foo bar"* 10:56:39 foo bar 1 foo bar 2 10:57:16 I seem to be able to echo ! just fine. 10:57:34 You (or someone else) may have set histexpand off. 10:57:40 (It's the sensible thing.) 10:57:42 yep unquoted * fixed everything now. 10:57:58 and now my functions are beautifully written as: 10:57:59 gb_opt() { echo perl ./construct_grams.pl -m \"${2:-$1}\"${3:+ -f \"$3\"}${4:+ -e \"$4\"} \"$D/googlebooks-$1-\"*\".csv\"; } 10:58:02 d_opt() { echo perl ./construct_grams.pl -m \"${3:-$1}\"${2:+ -e \"$2\"}${4:+ -f \"$4\"} \"dict/$1\"; } 10:59:02 so basically I'm going to compile all the English stuff with a special filter so I can avoid weirdness 10:59:11 and then use my default filter on everything else 10:59:19 until I determine more weirdness in those corpii. 10:59:36 but anyway I can specify a regex filter for word data now. 11:00:09 The completely different argument order for gb_opt and d_opt looks pretty weird already. 11:00:21 yes it's for convenience 11:00:36 what I might need to commonly specify for the googledata is not the same as the /usr/share/dict data. 11:00:52 /usr/share/dict needs more explicit encodings. the googledata is all in the data encoding. 11:00:55 noidentd.hs: accept: resource exhausted (Too many open files) 11:01:00 s/data/default/ 11:01:00 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 googledata however needs explicitly specified module names more often because a lot of the names have hyphens 11:02:33 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 actually the dehyphenate regex sounds nice so I'll do that... 11:06:54 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 there we go 11:08:25 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 ais523: Did I mention I preferred fizzie's? 11:08:53 let string_of_char c = let x = " " in x.[0] <- c; "" ^ x ;; 11:08:54 elliott: not while my connection was holding 11:09:04 it feels weird mutating the same string constantly, though 11:09:19 That's conceptually "nicer" than making a too-big string just to do what you do. 11:09:20 feels completely natural in Perl. 11:09:21 so it's the difference between mutate then clone, and clone then mutate 11:09:26 Erm, not too-big. 11:09:26 elliott: there isn't a too-big string 11:09:30 But anyway, okay, if you insist. 11:09:36 ais523: I misspoke. 11:09:37 Fingerthunk. 11:09:40 Tunkletyped. 11:10:19 TUnkletypedfingerthunk 11:10:59 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 probably because Haskell doesn't have mutable strings 11:12:24 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 ais523: Yes, that is a correct reading of context. 11:12:36 fizzie: OCaml basically doesn't optimise. 11:12:42 gb_opt() { echo perl ./construct_grams.pl -m \"$1\"${2:+ -f \"$2\"}${3:+ -e \"$3\"} \"$D/googlebooks-$1-\"*\".csv\"; } 11:12:45 d_opt() { echo perl ./construct_grams.pl -m \"$1\"${2:+ -e \"$2\"}${3:+ -f \"$3\"} \"dict/$1\"; } 11:12:48 this is a little nicer. 11:12:50 elliott: well, that optimization is incorrect 11:13:22 otherwise, if you later mutated one of the original strings, ^'s return value would change too 11:13:37 Yeah, well, mutable strings. 11:14:18 I think I'll register Pietbot with nickserv now 11:14:29 fizzie: Hey, golf me a fake identd. 11:14:42 * elliott awaits total success. 11:14:51 Ngevd: is it actually written in Piet? 11:15:30 elliott: Nnnno. But I've seen a not-many-lines fakedentd somewhere. 11:15:43 fizzie: But it's like two hundred. 11:15:44 Actually, no I won't 11:17:04 elliott: you could just submit it as an anagol puzzle, then use the result? 11:17:13 ais523: those can't do networking 11:17:14 ohgods graph theory 11:17:28 elliott: could you just use an nc wrapper? 11:17:30 awesome, but such a pain 11:17:34 ais523: no 11:17:34 or is the identd protocol more complicated than that? 11:17:55 anyone here ever looked at random graphs at all? 11:18:29 ais523: no, it's trivial 11:18:30 I should just write a sprunge script 11:18:39 because I can never remember the command for it. 11:18:47 CakeProphet: the command is on sprunge's website 11:18:50 fizzie: ah, hmm, this one is only 143 lines, but it needs to be executed via identd 11:18:52 i'll just write my own 11:18:53 ais523: I'm aware 11:19:02 but going to the website to get the command defeats the purpose of a command line pastebin 11:19:18 not really, it saves you a copy-and-paste of the thing you're trying to submit 11:19:29 that's true. 11:20:24 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 ports are unsigned sixteen bits, right? 11:21:32 For now... (ominous ominesance) 11:23:01 echo -e '#!/bin/sh'"\n"curl -F 'sprunge=<-' http://sprunge.us > scripts/sprunge 11:23:02 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 woooo 11:23:22 elliott: yes, generally speaking 11:23:49 fizzie: That's what I'm doing too. 11:24:06 er wait that doesn't work 11:24:13 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 fizzie: In case, you know, someone tries to DOS it. 11:24:32 cat Acro/build_data.sh | ./sprunge 11:24:32 ./sprunge: 2: cannot open -: No such file 11:24:42 why would someone try to DOS a golfed identd 11:24:47 and why would an identd golfer worry about DOSes? 11:25:32 also, hmm, is 0 a valid port number? what about 65535? 11:25:34 oh... 11:25:35 right 11:25:36 stupid 11:25:37 bash 11:25:38 quoting 11:26:22 CakeProphet: alias sprunge='curl -F "sprunge=<-" sprunge.us' 11:26:33 cat sprunge | ./sprunge http://sprunge.us/Qfge 11:26:40 elliott: I fixied it 11:26:52 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 elliott: hmmm, alias? what is that? 11:27:21 no man entry for it. 11:27:33 It's a bash builtin. 11:27:44 CakeProphet: try "help alias" in bash 11:28:33 hmmm okay 11:28:40 are these defined in a file or something? 11:28:51 Quite often in .bashrc, or some other file. 11:29:11 so I don't need to like... "export" them or anything. 11:29:21 ... 11:29:23 TEST TIME 11:29:25 -!- elliott has quit (Quit: Leaving). 11:29:29 -!- elliott has joined. 11:29:39 It's pretty close to a shell function except more restricted. 11:29:39 Aww. 11:31:05 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 -- 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 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 select reports connects to a listening socket as "reads", right? 11:31:49 ah so I do need to edit .bashrc or whatever. 11:31:55 they don't persist between sessions otherwise. 11:33:15 https://sites.google.com/site/mandelbox/negative-mandelbox 11:33:23 help i can't stop looking 11:33:30 Actually, maybe I'll just use poll. 11:33:38 poll doesn't need the set of fds reset each time, right? 11:34:12 You can use a static array of struct pollfd's, yes. 11:34:24 It doesn't even touch the "events" fields, just the "revents". 11:35:09 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 Right. 11:45:12 fizzie: help I can't stop looking https://lh4.googleusercontent.com/-3H-b7AFnpE4/TqhDiDPG0KI/AAAAAAAAKJU/QIpbMwzYsn4/s400/boss.gif 11:48:58 "What." 11:49:22 fizzie: Hmm, I think I must be using poll wrong. :-( 11:49:42 At least, I get the events for new connections, but no read events beyond that. 11:50:41 Oh, hmm. 11:50:47 Well, um, well. I'unno. Do you accept() the new connections and add them to your fd-list? 11:50:58 bind: Address already in use 11:50:59 Ajhgkhrkahkrjghkj 11:51:04 How _do_ you fix that? 11:51:15 SO_REUSEADDR can help. 11:51:32 Nah, I'd rather not change my code. 11:51:40 I just need some kind of all-purpose unlock-port. :p 11:52:45 Aha, now it works. 11:53:42 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 Hmm. 11:58:21 It's safe to have a pollfds with a junk fd as long as .events = 0, right? 11:58:28 *pollfds entry 12:03:56 Er, it could be safe, but I'm not sure it's necessarily safe. 12:04:34 "The array's members are pollfd structures within which fd specifies an open file descriptor --" 12:05:17 You can have a struct pollfd with .fd = -1, though. 12:05:26 "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 You can have a struct pollfd with .fd = -1, though. 12:07:16 Ah, thanks. 12:07:53 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 Let's just assume it works. 12:10:13 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 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 If you don't specifically request TCP_NODELAY, I suppose they're rather likely to get combined to a single packet. 12:11:40 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 elliott: you can request the packets to be sent separately, but by default they'll be queued up a bit 12:13:09 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 fizzie: Nonono, I mean server fds. 12:13:29 As in. 12:13:32 What I accept() from. 12:14:40 Oh, that; I'd just close it. 12:15:13 Okay. 12:16:53 Let's try this. 12:16:55 -!- elliott has quit (Quit: Leaving). 12:17:00 -!- elliott has joined. 12:17:05 :/ 12:17:08 Oh no. :/ 12:17:09 It didn't like the response. 12:17:30 [elliott@dinky noidentd]$ nc localhost 113 12:17:30 113, 113 12:17:30 113, 113 : USERID : UNIX : elliott 12:17:34 That's korrect, no? 12:18:14 It looks good to me. 12:18:22 Hmm. 12:18:44 Did you put a CR-LF pair at the end? 12:18:48 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 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 Alright. 12:20:12 -!- elliott has quit (Client Quit). 12:20:17 -!- elliott has joined. 12:20:21 :/ 12:20:48 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@dinky noidentd]$ echo -n 'a' | nc localhost 113 12:22:08 [hang] 12:22:15 Hmm, I guess recv doesn't work like read. 12:22:35 Or nc doesn't. 12:22:37 One of the two. 12:22:50 Oh well, hardly matters. 12:23:11 Ooh, I can get mine to break. 12:24:20 Ah, yes. 12:24:27 woo 1 12:24:27 woo 2 12:24:27 woo 3 12:24:27 woo 4 12:24:27 woo 5 12:24:27 woo 6 12:24:29 woo 7 12:24:31 woo 8 12:24:33 woo 9 12:24:35 woo 0 12:24:37 Turns out one can't have 0 connections. 12:24:50 -!- ais523 has quit (Ping timeout: 258 seconds). 12:25:15 conns = (conns % (MAXCONNS - 1)) + 1; 12:25:15 I... think that should fix it. 12:26:08 That thing looks suspicious. Isn't it going to just abandon the (open) sockets when it wraps over? 12:27:00 fizzie: Yes, that's the intent. Oh, I should probably close them. 12:27:23 fizzie: The intent is that too many connections disconnect older ones, though, yes. 12:28:00 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 Why would it? It'll just abandon the first. Oh, I see whaty ou mean. 12:28:22 I guess I'll just always pass MAXCONNS + 1 to poll. 12:28:24 Not like it'll go any slower. 12:28:48 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 Yes, indeed. 12:29:19 Fixing. 12:31:16 fizzie: This should look more reasonable to you: http://sprunge.us/GGWW 12:31:20 Oh, modulo me having not yet defined NELEMS. 12:32:34 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 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 Still doesn't actually _work_, though. 12:33:33 * elliott installs Wireshark. 12:34:40 fizzie: Anyway, I think that behaviour is semi-sensible. 12:34:52 It just cycles through ten slots, closing sockets as it overwrites them. 12:34:54 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 Oh, right. 12:35:16 Anyway, validate my semi-confidence in the behaviour being reasonable. 12:35:25 Yes, it sounds semi-reasonable. 12:35:32 Can you remove the semi- qualifier??? 12:35:52 Oh, it was a semi-confidence on reasonability, not confidence on semi-reasonability. 12:35:59 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 Yes, at that level of simplicity a circular buffer like that is a reasonable choice. 12:37:39 programming needs more pretzel buffers 12:37:56 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 Does anyone know how to filter wireshark to just show things on a certain port? 12:38:25 I always just tcpdump and then open the dumpfile in wireshark. 12:39:10 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 I'd be shocked if wireshark didn't have some way to do that 12:39:18 But I'm sure the built-in capturator can filter too. 12:39:30 the problem is that it has so many options it's hard to find the one you actually want 12:39:37 which is an issue with both GUI and CLI programs 12:39:39 fizzie: I'm filtering this one after-the-fact. 12:39:48 Oh. Well, those filters are really messy too. 12:40:19 You can just write an expression in that box, but I don't really know the syntax. 12:40:32 There's that GUI thing for constructing a filter, but it especially has far too many options. 12:40:42 (If you can find the first packet, you can use the "follow the stream" option.) 12:41:05 "tcp.port == 113" does it. 12:41:06 I'd check, but they haven't installed such HACKER TOOLS on these work-workstations. 12:41:19 Yes, the syntax is reasonable, I just can't remember it. 12:41:39 -!- Phantom_Hoover has joined. 12:42:34 fizzie: "Heh", it actually goes in two packets here. 12:42:41 What the client said, and then the rest of the line. 12:42:52 A bit... wasteful. 12:43:41 Well, you can use the MSG_MORE flag in the three first send()s. 12:44:02 It's the "wait, wait, I'm not done yet" flag. 12:47:28 That's not part of my manpage. 12:47:54 -!- elliott has quit (Quit: Leaving). 12:47:57 It might not be exactly portable. 12:47:59 -!- elliott has joined. 12:48:02 It might not be exactly portable. 12:48:06 Annoyed that made a difference. 12:49:24 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 It might not be exactly portable. 12:49:32 Annoyed that made a difference. 12:49:34 [elliott@dinky noidentd]$ curl -F 'sprunge=<-' sprunge.us 12:49:36 curl: (6) Could not resolve host: sprunge.us; Unknown error 12:49:38 Uh. 12:49:40 Neat, my connection is broken. 12:49:42 fizzie: Ping. 12:49:44 ^echo hi 12:49:48 But yes, 12:49:50 12:49:24: 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 fizzie: That's why I was annoyed. :p 12:50:05 fizzie: Although -- send isn't actually guaranteed to send everything at once, is it? 12:50:17 elliott_: it's TCP, it's not even guaranteed to send everything in order 12:50:19 So I'm being lazy, too. 12:50:22 depending on conditions in the Internet 12:50:31 -!- Jafet has joined. 12:50:36 ais523_: I'm sure send(fd, foo, n, 0) can't actually rearrange the bytes in foo. 12:50:38 however, recv will always appear receive it in order, because it reconstructs the packets into the order of the original sends 12:50:49 Well, yes, yes. 12:50:56 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 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 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 dude why has the US not cut its ridiculous military spending. 12:53:03 you know, instead of catapulting itself into the debtosphere. 12:53:56 I think I've lost faith in democracy. Or, well, whatever the US system is called. 12:54:04 `quote 12:54:06 `quote 12:54:06 229) your premise to falsify "false" is false 12:54:06 `quote 12:54:07 `quote 12:54:07 `quote 12:54:12 568) 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 524) So it's like... Rummy mixed with... breakout? 12:54:23 525) i try to be a hermit but it's hard with all these housemates. 12:54:24 695) Add a full stop in the middle and it becomes philosophy. 12:54:24 CakeProphet: How did you find out the US policy decisions were made on #esoteric?! 12:54:30 I thought it was a best-kept secret. 12:54:30 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 fizzie: I can; I can just assume it worked. 12:54:51 fizzie: I've been slowly uncovering the secret #esoteric cabal for years now. 12:54:54 elliott_: hmm, none of those are massively good 12:55:09 `delquote 695 12:55:12 ​*poof* 12:55:14 568 looks like the weakest to me. 12:55:26 Note: elliott, an obvious choice for figurehead of the #esoteric cabal, is actually a mere puppet to a more sinister force. 12:55:35 Phantom_Hoover: The qdb has to act as a shrine to people being really stupid, as well as being entertaining. 12:55:35 elliott_, I was about to point out that you added it when I remembered that it was Taneb. 12:55:40 Otherwise we would forget and forgive. 12:55:51 actually, Gregor takes all the decisions unilaterally, but doesn't know what they mean 12:56:02 I hereby decree this a good enough identd: http://sprunge.us/FYDV 12:56:05 and #esoteric effectively shapes them by working out what language they're in 12:56:10 Now to use fizzie's clever idea of using the fd values directly to select a new slot. 12:56:20 elliott_: if it's a shrine of stupidity, why am I not quoted more often? 12:56:27 fizzie: (Does that actually let me call poll with a smaller number, though? I guess not.) 12:56:32 CakeProphet: I can hardly add everything you say. 12:56:49 CakeProphet, because you're not stupid as much as thick-headed. 12:57:18 !bfjoust cat ,[.,] 12:57:22 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 ​Score for ais523__cat: 6.8 12:57:33 I wonder why I did that? 12:57:45 !help bfjoust 12:57:46 ​Sorry, I have no help for bfjoust! 12:58:36 now I have to try to remember what undermine does 12:58:51 oh right, I think I remember 12:59:07 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 fizzie: Yeah, I don't give a damn about that. 13:00:19 Phantom_Hoover: according to most online dictionaries thick-headed and stupid are pretty much the same thing. :P 13:00:50 fizzie: Oops, I forgot to drop privileges after listen(). 13:00:52 Or is it after bind()? 13:01:12 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 (Also is nobody always UID/GID 99?) 13:01:38 (Or, wait, should I use "daemon" instead? And is that always UID/GID 2?) 13:02:19 I'd suspect after bind() is enough; and the actual numbers (except perhaps 0) are non-standard. 13:02:26 :/ 13:02:34 Phantom_Hoover: I will choosed to interpret this as a positive thing in one way or another. 13:02:43 fizzie: And no way to get them other than parsing /etc/passwd? 13:02:56 CakeProphet, you aren't at risk of joining a cult, I suppose. 13:03:00 mixing and combinging of concepts demonstrates true understanding! 13:03:01 Something like getpwnam("nobody")->pw_uid, except maybe with error-checking in-between. 13:03:13 Are you sure it should be nobody and not daemon? 13:03:17 Also, do I need to set the gid...? 13:03:18 No. 13:03:59 Which was that a no to? 13:04:14 The first one. I'm not sure which user account you "should" use. 13:04:42 elliott_: "nobody" is 65534 on this system 13:04:59 So is setting the group necessary? 13:05:14 I find normative questions difficult to answer. 13:05:43 "Which shirt should I wear?" "life has no inherent meaning." 13:06:21 http://sprunge.us/IYgT ;; OK, this is slightly better, now to implement the age thing. 13:09:25 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 good ism. 13:10:24 http://sprunge.us/KCQe 13:10:36 This MIGHT even do the oldest-connection thing; I'll let fizzie figure it out. :p 13:10:43 though the Catholic Church seems to disagree, what with the Pope and all. 13:10:59 if I ever become Pope. 13:11:12 I will just spew logical contradictions all day. 13:11:31 Hmmmm. 13:11:32 !bfjoust undermine2 (+)*9>(+)*9(>[++++[-[-[-[--[-[-[-[>(>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1]]]]]]]](>+++++++[-])*29])*-1 13:11:33 Seems maybe not. 13:11:35 ​Score for ais523__undermine2: 0.0 13:11:42 ais523_: wow 13:11:48 hmm, I was expecting to do better than that 13:11:53 looks like a bug 13:11:54 elliott_: I'm guessing unmatched paren somewhere 13:11:59 heh 13:12:49 !bfjoust undermine2 (+)*9>(+)*9(>[++++[-[-[-[--[-[-[-[((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1]]]]]]]](>+++++++[-])*29])*-1 13:12:52 ​Score for ais523__undermine2: 27.3 13:13:16 gah 13:13:19 it does the exact wrong thing 13:13:26 kills the _newest_ client 13:13:29 i.e. the one that just connected :) 13:14:10 !bfjoust undermine2 (+)*9>(+)*9(>[>++++[-[-[-[--[-[-[-[((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1]]]]]]]](>+++++++[-])*29])*-1 13:14:13 ​Score for ais523__undermine2: 28.3 13:14:19 oh hmm 13:14:20 duh 13:14:22 heh, hardly any change 13:15:37 -!- boily has joined. 13:16:11 !bfjoust undermine2 (+)*9>(+)*9(>[>++++[-[-[-[--[-[-[-[((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1]]]]]]]]([>]>+++++++[-])*29])*-1 13:16:14 ​Score for ais523__undermine2: 28.1 13:16:27 !bfjoust undermine2 (+)*9>(+)*9(>[[>]++++[-[-[-[--[-[-[-[((>++++[-[-[-[-[-[-[-[-[(-)*120[.-]{}]]]]]]]]])%29)*-1]]]]]]]]([>]>+++++++[-])*29])*-1 13:16:31 ​Score for ais523__undermine2: 20.4 13:16:37 yep, thought that would happen 13:16:45 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 s/ago/age/ 13:16:59 Awaysh for a couple of hours now. 13:17:04 fizzie: Oh, yes. Duh. 13:17:07 That's almost certainly cheaper. 13:17:09 Thanks. 13:17:16 (argmin_i?) 13:17:27 !bfjoust undermine2 < 13:17:30 ​Score for ais523__undermine2: 0.0 13:17:51 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 (Okay, gone.) 13:18:03 fizzie: Butbutbut wait. 13:18:08 serial eventually overflows like that. 13:18:11 Oh, wait, no. 13:18:16 Or, hmm, yes. 13:18:29 !bfjoust oddrush (>)*8(>>[-])*10 13:18:32 ​Score for ais523__oddrush: 3.1 13:18:37 about what I expected 13:19:08 elliott_: Well, yes, it does. It'll behave poorly during the wraparound, that's true. 13:19:22 fizzie: Is there any way to somehow keep serial low? 13:19:26 !bfjoust oddrush (>)*8(>>[+++++[-]])*10 13:19:30 ​Score for ais523__oddrush: 1.8 13:19:34 fizzie: I could... loop through the array again, subtracting the slot picked? 13:19:39 Since it's the minimum and all. 13:20:01 That would work, I think. 13:20:03 elliott_: Yeah, I guess you could do that. And then set 'serial' to max+1. 13:20:13 fizzie: Right. 13:20:23 Now really. -> 13:20:55 serial = 0; 13:20:55 for (size_t i = 0; i < NELEMS(serials); i++) { 13:20:55 serials[i] -= slot; 13:20:55 if (serials[i] > serial) 13:20:55 serial = serials[i]; 13:20:56 } 13:20:57 serial++; 13:20:59 Ugly. :( 13:21:20 ais523_: Here, you prettify that. 13:21:21 :p 13:22:31 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 Really really. -> -> 13:23:24 !bfjoust oddsyncrush (>)*7(>>[-[++[+++[-]]](>[-[++[+++[-]]]])*20])*11 13:23:27 ​Score for ais523__oddsyncrush: 18.1 13:23:36 the strategy is going somewhere! 13:24:54 Jesus christ, it's doing the same again 13:25:00 fizzie: Oh, right, thanks 13:25:14 !bfjoust oddsyncrush (+)*9>(+)*6>(>)*5(>>[-[++[+++[-]]](>[-[++[+++[-]]]])*20])*11 13:25:17 ​Score for ais523__oddsyncrush: 22.5 13:26:08 size_t minserial = 0; 13:26:08 for (size_t i = 0; i < NELEMS(serials); i++) { 13:26:08 if (!ok || serials[i] < minserial) { 13:26:08 ok = true; 13:26:09 slot = i; 13:26:11 minserial = serials[i]; 13:26:13 } 13:26:15 } 13:26:17 size_t maxserial = 0; 13:26:19 for (size_t i = 0; i < NELEMS(serials); i++) { 13:26:21 serials[i] -= minserial; 13:26:23 if (serials[i] > maxserial) 13:26:25 maxserial = serials[i]; 13:26:27 } 13:26:29 serial = maxserial + 1; 13:26:31 drop(&clients[slot]); 13:26:33 fizzie: PERFECT 13:26:35 It is funny because it pulls fizzie back. 13:26:57 AND IT DOES THE SAME 13:26:58 HOW 13:27:13 !bfjoust oddsyncrush (+)*9>(+)*6>(>)*5(>>[>[-[++[+++[-]]]](>[-[++[+++[-]]]])*20])*11 13:27:16 ​Score for ais523__oddsyncrush: 22.3 13:27:40 !bfjoust oddsyncrush (+)*9>(+)*6>(>)*5(>>[>[-[++[+++[-]]](>[-[++[+++[-]]]])*20]])*11 13:27:43 ​Score for ais523__oddsyncrush: 20.6 13:27:49 hmm 13:28:30 Yesss, it works. 13:29:18 !bfjoust (+)*9>(+)*6>(>)*5(>>[(>[-[++[+++[-]]](>[-[++[+++[-]]]])*20])*20])*11 13:29:19 ​Use: !bfjoust . Scoreboard, programs, and a description of score calculation are at http://codu.org/eso/bfjoust/ 13:29:24 !bfjoust oddsyncrush (+)*9>(+)*6>(>)*5(>>[(>[-[++[+++[-]]](>[-[++[+++[-]]]])*20])*20])*11 13:29:27 ​Score for ais523__oddsyncrush: 22.3 13:29:45 that's what I meant, but it doesn't seem to have helped much 13:30:15 http://sprunge.us/fSJR 13:30:20 Tada. 13:30:27 !bfjoust oddsyncrush < 13:30:29 Please feel free to tell me how hideously broken it is. 13:30:30 ​Score for ais523__oddsyncrush: 0.0 13:30:51 -!- elliott_ has quit (Quit: Leaving). 13:30:55 -!- elliott_ has joined. 13:31:10 !bfjoust collision (>>>>[>+++++[-]])*7 13:31:13 ​Score for ais523__collision: 0.7 13:31:24 !bfjoust collision (>>>>[(>+++++[-]])*20)*7 13:31:27 ​Score for ais523__collision: 0.0 13:31:34 !bfjoust collision (>>>>[(>+++++[-])*20])*7 13:31:37 ​Score for ais523__collision: 8.3 13:31:45 !bfjoust collision (>>>[(>+++++[-])*20])*7 13:31:48 ​Score for ais523__collision: 11.4 13:32:30 haha, it beats most of my programs 13:32:32 but not a lot of others 13:32:46 presumably you can figure out who's written a program just from its decoy setup pattern 13:33:05 !bfjoust collision (>>>[(>[+++++[-]])*20])*7 13:33:08 ​Score for ais523__collision: 12.2 13:33:29 Gregor_ill_bet_you_have_four_decoys.bfjoust vs ais523__collision.bfjoust ><<><<><<><<><<<<>>>> ><<><<><<><<><<<<>>>> 6 13:33:36 now, /that's/ a bizarre patter nof wins and losses 13:33:38 *pattern 13:34:03 !bfjoust collision (>>>[(>[+++++[-]])*20])*9 13:34:06 ​Score for ais523__collision: 16.2 13:34:15 can't believe I got /that/ wrong... 13:34:33 !bfjoust collision (>>>[(>[+++++[-]])*20])*9(>[+++++[-]])*2 13:34:36 ​Score for ais523__collision: 16.3 13:35:05 !bfjoust collision >>>>>>(>>>[(>[+++++[-]])*20])*7(>[+++++[-]])*2 13:35:08 ​Score for ais523__collision: 13.0 13:35:19 !bfjoust collision >++>>>>>(>>>[(>[+++++[-]])*20])*7(>[+++++[-]])*2 13:35:22 ​Score for ais523__collision: 13.4 13:35:34 !bfjoust collision >..>>>>>(>>>[(>[+++++[-]])*20])*7(>[+++++[-]])*2 13:35:37 ​Score for ais523__collision: 15.0 13:35:43 oh right 13:35:50 !bfjoust collision >.>>(>>>[(>[+++++[-]])*20])*8(>[+++++[-]])*2 13:35:53 ​Score for ais523__collision: 16.3 13:36:00 !bfjoust collision >->>(>>>[(>[+++++[-]])*20])*8(>[+++++[-]])*2 13:36:03 ​Score for ais523__collision: 15.2 13:36:09 !bfjoust collision >>->(>>>[(>[+++++[-]])*20])*8(>[+++++[-]])*2 13:36:12 ​Score for ais523__collision: 15.6 13:36:19 !bfjoust collision >>>-(>>>[(>[+++++[-]])*20])*8(>[+++++[-]])*2 13:36:22 ​Score for ais523__collision: 16.7 13:36:25 decoys hurting is never a good sign 13:36:29 !bfjoust collision >>>--(>>>[(>[+++++[-]])*20])*8(>[+++++[-]])*2 13:36:32 ​Score for ais523__collision: 16.3 13:36:36 but in this case, seems I just have to put them a long way from the flag 13:36:42 for reasons I don't fully understand 13:36:48 !bfjoust collision >>>(->>>[(>[+++++[-]])*20])*8(>[+++++[-]])*2 13:36:51 ​Score for ais523__collision: 18.8 13:36:58 whoo, trails help! 13:37:02 !bfjoust collision >>>(->>+>[(>[+++++[-]])*20])*8(>[+++++[-]])*2 13:37:05 ​Score for ais523__collision: 20.3 13:37:23 !bfjoust collision >>>(->>++>[(>[+++++[-]])*20])*8(>[+++++[-]])*2 13:37:25 ​Score for ais523__collision: 21.9 13:37:31 !bfjoust collision >>>(-->>++>[(>[+++++[-]])*20])*8(>[+++++[-]])*2 13:37:34 ​Score for ais523__collision: 22.5 13:37:43 !bfjoust collision >>>(-->+>++>[(>[+++++[-]])*20])*8(>[+++++[-]])*2 13:37:46 ​Score for ais523__collision: 24.4 13:37:55 I'm expecting that to hurt 13:37:57 but it didn't 13:38:09 !bfjoust collision >>>(-->+>++>[(>[+++++[-]])*20]-----)*8(>[+++++[-]])*2 13:38:12 ​Score for ais523__collision: 22.3 13:38:17 !bfjoust collision >>>(-->+>++>[(>[+++++[-]])*20]--)*8(>[+++++[-]])*2 13:38:20 ​Score for ais523__collision: 23.3 13:38:25 !bfjoust collision >>>(>+>++>[(>[+++++[-]])*20]--)*8(>[+++++[-]])*2 13:38:28 ​Score for ais523__collision: 23.7 13:38:38 !bfjoust collision >>>(-->+>+++>[(>[+++++[-]])*20])*8(>[+++++[-]])*2 13:38:41 ​Score for ais523__collision: 25.3 13:38:49 !bfjoust collision >>>(-->+>++++>[(>[+++++[-]])*20])*8(>[+++++[-]])*2 13:38:52 ​Score for ais523__collision: 23.9 13:38:56 !bfjoust collision >>>(-->>++++>[(>[+++++[-]])*20])*8(>[+++++[-]])*2 13:38:59 ​Score for ais523__collision: 21.3 13:39:04 ? 13:39:10 !bfjoust collision >>>(->->++++>[(>[+++++[-]])*20])*8(>[+++++[-]])*2 13:39:13 ​Score for ais523__collision: 23.3 13:39:20 !bfjoust collision >>>(-->+>+++>[(>[+++++[-]])*20])*8(>[+++++[-]])*2 13:39:23 ​Score for ais523__collision: 25.3 13:39:36 oh right, putting too many +s there just speeds up enemy offset clears on one polarity 13:41:52 !bfjoust collision >>>(-->+>+++>[(>[+++++[-]])*20])*7(>[+++++[-]])*5 13:41:55 ​Score for ais523__collision: 24.9 13:42:11 !bfjoust collision >>>(-->+>+++>[(>[+++++[-]])*20])*6(>[+++++[-]])*8 13:42:14 ​Score for ais523__collision: 24.4 13:42:47 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 believes in and practices evolution. 13:42:53 --comment on NPR article 13:43:03 * CakeProphet refuses to participate in evolution. 13:43:03 !bfjoust collision >>>(-->+>+++>[(>[+++++[-]])*20])*6(<<(+)*40)*6(>)*18(>[+++++[-]])*8 13:43:06 ​Score for ais523__collision: 19.8 13:43:16 !bfjoust collision >>>(-->+>+++>[(>[+++++[-]])*20])*6(<(-)*40<(+)*40)*6(>)*18(>[+++++[-]])*8 13:43:19 ​Score for ais523__collision: 19.8 13:43:47 !bfjoust collision >>>(-->+>+++>[(>[+++++[-]])*20])*6(<)*12((-)*100<(+)*100)*3(>)*18(>[+++++[-]])*8 13:43:50 ​Score for ais523__collision: 24.2 13:44:29 !bfjoust collision >>>(-->+>+++>[(>[+++++[-]])*20])*5(<)*9((-)*100<(+)*100)*3(>)*15(>[+++++[-]])*8 13:44:32 ​Score for ais523__collision: 20.5 13:44:37 !bfjoust collision >>>(-->+>+++>[(>[+++++[-]])*20])*6(<)*12((-)*100<(+)*100)*3(>)*18(>[+++++[-]])*8 13:44:40 ​Score for ais523__collision: 24.2 13:44:48 !bfjoust collision >>>(-->+>+++>[(>[+++++[-]])*20])*7(<)*12((-)*100<(+)*100)*3(>)*18(>[+++++[-]])*5 13:44:51 ​Score for ais523__collision: 25.3 13:45:35 I suspect the next improvement is a better clear loop 13:45:54 !bfjoust collision >>>(-->+>+++>[(>[-[++++++[-]]])*20])*7(<)*12((-)*100<(+)*100)*3(>)*18(>[+++++[-]])*5 13:45:58 ​Score for ais523__collision: 20.7 13:46:09 !bfjoust collision >>>(-->+>+++>[(>[-[++++[-]]])*20])*7(<)*12((-)*100<(+)*100)*3(>)*18(>[+++++[-]])*5 13:46:12 ​Score for ais523__collision: 18.1 13:46:17 !bfjoust collision >>>(-->+>+++>[(>[+++++[-]])*20])*7(<)*12((-)*100<(+)*100)*3(>)*18(>[+++++[-]])*5 13:46:20 ​Score for ais523__collision: 25.3 13:46:27 but I need to see what sort of clear is needed 13:48:28 -!- Ngevd has joined. 13:48:55 Ah, I'm alive 13:49:18 Ngevd: is it actually written in Piet? <-- going to be. I've only barely started, still learning the protocol 13:49:31 ais523_ ^^^ 13:50:04 !bfjoust collision >>>(>>>[(>[+++++[-]])*20])*7(>[+++++[-]])*5 13:50:07 ​Score for ais523__collision: 13.6 13:50:15 !bfjoust collision >>>(-->+>+++>[(>[+++++[-]])*20])*7(<)*12((-)*100<(+)*100)*3(>)*18(>[+++++[-]])*5 13:50:18 ​Score for ais523__collision: 25.3 13:50:32 !bfjoust collision >>>(+>+++>[(>[+++++[-]])*20])*10(<)*13((-)*100<(+)*100)*3(>)*18(>[+++++[-]])*5 13:50:35 ​Score for ais523__collision: 29.5 13:50:56 !bfjoust collision >>>(+>+++>[(>[+++++[-]])*20])*10(<)*11((-)*100<(+)*100)*3(>)*17(>[+++++[-]])*6 13:50:59 ​Score for ais523__collision: 29.8 13:51:47 !bfjoust collision >>>(->+++>[(>[+++++[-]])*20])*10(<)*11((-)*100<(+)*100)*3(>)*17(>[+++++[-]])*6 13:51:50 ​Score for ais523__collision: 29.6 13:51:56 !bfjoust collision >>>(--+>++>[(>[+++++[-]])*20])*10(<)*11((-)*100<(+)*100)*3(>)*17(>[+++++[-]])*6 13:51:59 ​Score for ais523__collision: 29.5 13:52:05 !bfjoust collision >>>(-->++>[(>[+++++[-]])*20])*10(<)*11((-)*100<(+)*100)*3(>)*17(>[+++++[-]])*6 13:52:08 ​Score for ais523__collision: 30.0 13:52:19 my guess is that 2 is the sweet spot for trails 13:53:14 !bfjoust collision >>>(-->++>[(>[+++++[-]])*20])*10(<)*9(<<(-)*100)*3(>(+)*100>)*3(>)*9(>[+++++[-]])*6 13:53:17 ​Score for ais523__collision: 29.5 13:53:24 !bfjoust collision >>>(-->++>[(>[+++++[-]])*20])*10(<)*9(<<(+)*100)*3(>(-)*100>)*3(>)*9(>[+++++[-]])*6 13:53:27 ​Score for ais523__collision: 29.5 13:53:36 !bfjoust collision >>>(-->++>[(>[+++++[-]])*20])*10(<)*9(<<(+)*100)*4(>(-)*100>)*4(>)*9(>[+++++[-]])*6 13:53:39 ​Score for ais523__collision: 29.1 13:53:55 !bfjoust collision >>>(-->++>[(>[+++++[-]])*20])*10(<)*9(<(+)*100<)*3((-)*100>>)*3(>)*9(>[+++++[-]])*6 13:53:59 ​Score for ais523__collision: 29.5 13:54:31 !bfjoust collision >>>(-->++>[(>[+++++[-]])*20])*11(<)*9(<(+)*100<)*3((-)*100>>)*3(>)*9(>[+++++[-]])*4 13:54:34 ​Score for ais523__collision: 29.9 13:54:42 !bfjoust collision >>>(-->++>[(>[+++++[-]])*20])*12(<)*9(<(+)*100<)*3((-)*100>>)*3(>)*9(>[+++++[-]])*2 13:54:45 ​Score for ais523__collision: 30.4 13:54:53 !bfjoust collision >>>(-->++>[(>[+++++[-]])*20])*13 13:54:56 ​Score for ais523__collision: 30.4 13:55:08 !bfjoust collision >>>(-->++>[(>[+++++[-]])*20])*12(>[+++++[-]])*2 13:55:11 ​Score for ais523__collision: 30.4 13:55:21 heh, I guess that case never really comes up 13:56:00 What does a channel message look like to a client? 13:56:26 Ngevd: privmsg to channel? 13:56:29 like the ones I'm sending now 13:57:02 I'm not sure 13:57:22 !bfjoust collision >>>(-)*20<(-)*40<(+)*60<(-)*80>>>(-->++>[(>[+++++[-]])*20])*12(>[+++++[-]])*2 13:57:25 ​Score for ais523__collision: 34.8 13:57:30 let's try a slower version of the same idea 13:57:36 Nice one 13:57:41 !bfjoust collision >>>(-)*20<(-)*40<(+)*60<(-)*80>>>(-->++>++>[(>[+++++[-]])*20])*8(>[+++++[-]])*2 13:57:44 hang on, is a high score good? 13:57:45 ​Score for ais523__collision: 37.3 13:57:49 yes, higher is better 13:58:04 !bfjoust collision >+>+>(-)*20<(-)*40<(+)*60<(-)*80>>>(-->++>++>[(>[+++++[-]])*20])*8(>[+++++[-]])*2 13:58:07 ​Score for ais523__collision: 34.6 13:58:18 !bfjoust collision >>>>+<(-)*20<(-)*40<(+)*60<(-)*80>>>(-->++>++>[(>[+++++[-]])*20])*8(>[+++++[-]])*2 13:58:21 ​Score for ais523__collision: 32.7 13:58:29 !bfjoust collision >>>(-)*20<(-)*40<(+)*60<(-)*80>>>(-->++>++>[(>[+++++[-]])*20])*8(>[+++++[-]])*2 13:58:32 ​Score for ais523__collision: 37.3 13:58:41 !bfjoust collision >>>(-)*20<(-)*40<(+)*40<(-)*40>>>(-->++>++>[(>[+++++[-]])*20])*8(>[+++++[-]])*2 13:58:44 ​Score for ais523__collision: 37.4 13:58:57 !bfjoust collision >>>(-)*20<(-)*40<(+)*40<(-)*20>>>(-->++>++>[(>[+++++[-]])*20])*8(>[+++++[-]])*2 13:59:00 ​Score for ais523__collision: 37.0 13:59:07 !bfjoust collision >>>(-)*30<(-)*40<(+)*40<(-)*20>>>(-->++>++>[(>[+++++[-]])*20])*8(>[+++++[-]])*2 13:59:10 ​Score for ais523__collision: 37.7 13:59:11 -!- derdon has joined. 13:59:21 !bfjoust collision >>>(-)*30<(-)*30<(+)*30<(-)*30>>>(-->++>++>[(>[+++++[-]])*20])*8(>[+++++[-]])*2 13:59:25 ​Score for ais523__collision: 38.5 13:59:40 !bfjoust collision >>>(-)*30<(-)*30<(+)*30<(-)*30>>>(-->++>++>++>[(>[+++++[-]])*20])*6(>[+++++[-]])*2 13:59:43 ​Score for ais523__collision: 33.2 13:59:58 !bfjoust collision >>>(-)*30<(-)*30<(+)*30<(-)*30>>>>(-->++>++>++>[(>[+++++[-]])*20])*6(>[+++++[-]])*2 14:00:01 ​Score for ais523__collision: 36.1 14:00:16 !bfjoust collision >>>(-)*30<(-)*30<(+)*30<(-)*30>>>>>(-->++>++>[(>[+++++[-]])*20])*8(>[+++++[-]])*2 14:00:19 ​Score for ais523__collision: 38.4 14:00:25 !bfjoust collision >>>(-)*30<(-)*30<(+)*30<(-)*30>>>>>(>>>[(>[+++++[-]])*20])*8(>[+++++[-]])*2 14:00:28 ​Score for ais523__collision: 39.0 14:00:40 this strategy is looking promising 14:00:49 and it's still with a hastily thrown-together clear loop 14:02:20 Haha, projects cannot ship source tarballs with their Arch PKGBUILD file, I think 14:03:18 Because PKGBUILDs contain checksums of the tarballs 14:03:56 !bfjoust collision >>>(-)*30<(-)*30<(+)*30<(-)*30>>>>>(>>>[(>[+[+[+[----[-[-[(-)*100(-)]]]]]]])*20])*8(>[+++++[-]])*2 14:03:59 ​Score for ais523__collision: 10.8 14:04:08 haha, reverse offset clear does /that/ badly? 14:04:14 !bfjoust collision >>>(-)*30<(-)*30<(+)*30<(-)*30>>>>>(>>>[(>[+++++[-]])*20])*8(>[+++++[-]])*2 14:04:17 ​Score for ais523__collision: 39.0 14:04:34 !bfjoust collision >>>(-)*30<(-)*30<(+)*30<(-)*30>>>>>(>>>[(>[++++++[-]])*20])*8(>[++++++[-]])*2 14:04:37 ​Score for ais523__collision: 39.5 14:04:37 I suppose that makes sense 14:04:53 !bfjoust collision >>>(-)*30<(-)*30<(+)*30<(-)*30>>>>>(>>>[(>[(+)*7[-]])*20])*8(>[(+)*7[-]])*2 14:04:56 ​Score for ais523__collision: 39.4 14:05:02 !bfjoust collision >>>(-)*30<(-)*30<(+)*30<(-)*30>>>>>(>>>[(>[(+)*10[-]])*20])*8(>[(+)*10[-]])*2 14:05:05 ​Score for ais523__collision: 43.5 14:05:09 Actually, hmm 14:05:12 I'm not sure how to handle this at all 14:05:17 !bfjoust collision >>>(-)*30<(-)*30<(+)*30<(-)*30>>>>>(>>>[(>[(+)*12[-]])*20])*8(>[(+)*12[-]])*2 14:05:20 ​Score for ais523__collision: 40.0 14:05:25 !bfjoust collision >>>(-)*30<(-)*30<(+)*30<(-)*30>>>>>(>>>[(>[(+)*15[-]])*20])*8(>[(+)*15[-]])*2 14:05:28 ​Score for ais523__collision: 42.3 14:05:41 !bfjoust collision >>>(-)*30<(-)*30<(+)*30<(-)*30>>>>>(>>>[(>[(+)*18[-]])*20])*8(>[(+)*18[-]])*2 14:05:44 ​Score for ais523__collision: 40.7 14:05:51 !bfjoust collision >>>(-)*30<(-)*30<(+)*30<(-)*30>>>>>(>>>[(>[(+)*10[-]])*20])*8(>[(+)*10[-]])*2 14:05:54 ​Score for ais523__collision: 43.5 14:06:32 wow, it's eighth now 14:06:34 just above undermine 14:06:49 I seem to have a habit of inventing new strategies and running them up to the bottom of the top ten 14:07:04 Explain how this works 14:07:28 how what works? the BF Joust program? 14:07:31 Yes 14:08:01 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 the idea is that it's going to skip, "randomly" based on the tape length, 0, 1, or 2 decoys 14:08:22 which gives it an advantage over an opponent who doesn't skip any 14:08:35 !bfjoust collision >>>(-)*30<(-)*30<(+)*30<(-)*30>>>>>>(>>>[(>[(+)*10[-]])*20])*8(>[(+)*10[-]])*1 14:08:38 ​Score for ais523__collision: 44.2 14:08:47 also, I just noticed an off-by-one, even better 14:08:59 !bfjoust collision >>>(-)*30<(-)*30<(+)*30<(-)*30>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*10[-]])*4 14:09:02 ​Score for ais523__collision: 44.2 14:09:19 !bfjoust collision >>>(-)*30<(-)*30<(+)*30<(-)*30>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4 14:09:22 ​Score for ais523__collision: 44.2 14:09:23 ais523_: how does that not suicide on some playing fields? 14:09:32 if you check every third cell. 14:09:37 CakeProphet: most programs set decoys near their flags 14:09:44 it suicides if the opponent sets fewer than two decoys 14:09:47 but how many programs do that? 14:09:59 My one, I think 14:10:09 so the basic idea of BF Joust, is that anything that opponents do consistently, you can take advantage of 14:10:15 a program that sets no decoys typically won't do well 14:10:16 most of my bfjoust programs are some kind of rush clear-everything program. 14:10:23 thus, you may as well assume that opposing programs tend to set decoys 14:10:56 !bfjoust collision >>>(-)*30<(-)*30<(+)*30<(-)*30>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>)*99 14:10:59 ​Score for ais523__collision: 44.2 14:11:04 Aww, my one isn't on the scoreboard any more 14:11:07 yep, I /thought/ that last bit made no difference 14:11:12 ais523_: the real question is: would this beat space elevator? 14:11:18 !bfjoust collision >>>(-)*30<(-)*30<(+)*30<(-)*30>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4 14:11:21 ​Score for ais523__collision: 44.2 14:11:47 ais523__collision.bfjoust vs quintopia_space_elevator.bfjoust <><<>>>><<<<<<><>>><> <><<>>>><>><<<><>>><> -2 ais523__collision.bfjoust wins. 14:11:57 CakeProphet: it does beat space_elevator, /just/ 14:12:25 admirable work. 14:12:52 surely you could also suicide on some decoy patterns. 14:13:11 whoops, I just remembered why I don't open space_elevator in egojsout 14:13:16 CakeProphet: yes, but nobody uses them 14:13:18 perhaps they should 14:13:54 ais523_: space_elevator is the most beautiful jouster in terms of code elegance. 14:14:02 you think so? 14:14:06 definitely. 14:14:13 although I have a tendency to make huge ridiculous jousters 14:14:16 it even provides comments! 14:14:21 I have a soft spot for the short ones 14:14:26 and my long ones tend to be commented too 14:15:01 I'm guessing [ and ] jumps don't count as turns right? 14:15:24 if they did the complex logic of large jousters would be at a disadvantage to dumb rushers. 14:15:30 each of [ and ] takes one step 14:15:32 that's really fundamental 14:15:36 ...oh 14:15:38 otherwise there's no reason not to put [ and ] everywhere 14:15:55 they aren't at a disadvantage to dumb rushers, because dumb rushers are easily tricked 14:16:09 due to being dumb 14:16:41 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 aha, that's the issue 14:17:02 a dumb rusher has issues determining if it's found the flag 14:17:12 doing something like [-] can hold you up for 510 cycles, worst-case 14:17:23 precisely because of the time penalty of doing ] 14:17:42 ah right 14:17:52 and there'd be no difference between the different kinds of clears otherwise 14:17:58 aside from the nops 14:18:15 !bfjoust collision >>>(-)*30<(-)*20<(+)*20<(-)*30>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4 14:18:18 ​Score for ais523__collision: 40.7 14:18:28 !bfjoust collision >>>(-)*30<(-)*30<(+)*40<(-)*30>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4 14:18:31 ​Score for ais523__collision: 41.4 14:18:43 !bfjoust collision >>>(-)*33<(-)*33<(+)*33<(-)*33>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4 14:18:46 ​Score for ais523__collision: 43.7 14:18:47 -!- copumpkin has quit (Quit: Computer has gone to sleep.). 14:18:57 !bfjoust collision >>>(-)*33<(-)*35<(+)*35<(-)*22>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4 14:19:00 ​Score for ais523__collision: 41.6 14:19:05 just experimenting a bit 14:19:14 !bfjoust collision >>>(-)*31<(-)*31<(+)*31<(-)*31>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4 14:19:18 ​Score for ais523__collision: 44.4 14:19:28 What should Pietbot do... 14:19:28 !bfjoust collision >>>(-)*32<(-)*32<(+)*32<(-)*32>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4 14:19:32 ​Score for ais523__collision: 43.7 14:19:37 implement an esolang of your choice 14:19:42 !bfjoust collision >>>(-)*32<(-)*32<(+)*32<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4 14:19:45 ​Score for ais523__collision: 44.4 14:19:57 !bfjoust collision >>>(-)*33<(-)*33<(+)*33<(-)*22>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4 14:20:00 ​Score for ais523__collision: 42.3 14:20:11 Ngevd: run Piet programs via IRC command lines. 14:20:11 !bfjoust collision >>>(-)*34<(-)*34<(+)*34<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4 14:20:14 ​Score for ais523__collision: 43.4 14:20:24 !bfjoust collision >>>(-)*32<(-)*32<(+)*32<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4 14:20:27 ​Score for ais523__collision: 44.4 14:20:34 let's stick with that version for the decoy setup 14:20:59 !bfjoust collision >>>>(-)*32<(-)*32<(+)*32<(-)*32<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4 14:21:02 ​Score for ais523__collision: 38.8 14:21:08 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 oh right, that loses to ill_bet_you_have_four_decoys 14:21:22 by having four decoys 14:21:25 CakeProphet: that's it 14:21:27 !bfjoust collision >>>(-)*32<(-)*32<(+)*32<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4 14:21:31 ​Score for ais523__collision: 44.4 14:22:02 !bfjoust collision >>>>>>(-)*32<<(-)*32<<(+)*32<<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4 14:22:05 ​Score for ais523__collision: 35.5 14:22:11 I was just curious 14:22:17 !bfjoust collision >>>>>>(-)*32<-<(-)*32<-<(+)*32<-<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4 14:22:20 ​Score for ais523__collision: 35.9 14:22:24 !bfjoust collision >>>(-)*32<(-)*32<(+)*32<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4 14:22:28 ​Score for ais523__collision: 44.4 14:22:35 I just have no idea why 14:22:35 seems like that is indeed the perfect decoy setup 14:23:40 tried using different cell skip intervals? 14:23:49 perhaps a non-constant interval? 14:24:36 no, but given the current competitors on the hill it's unlikely to make much difference 14:24:51 pretty much everyone checks for small decoys behind large ones nowadays 14:25:18 er I was referring to your offense. 14:25:24 oh, right 14:25:36 I've tried different intervals, but not a varying one 14:25:49 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 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 ais523_: I don't see how it would hurt though. basically the smaller tape lengths cut off your cell skip function. 14:27:16 and FFSPG for much the same reason (they're similar programs, even if they were invented independently) 14:27:21 CakeProphet: I don't think it'd hurt either 14:27:27 except that you're using a suboptimal interval 14:27:38 I suppose, on longer tapes, the opponent will have had more time to set up decoys… 14:28:06 yes that's what I mean. the interval can change once it gets into longer tape lengths. 14:28:11 !bfjoust collision >>>(-)*32<(-)*32<(+)*32<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*3(>>>>[(>[(+)*10[-]])*20])*3(>[(+)*100[+]])*4 14:28:14 ​Score for ais523__collision: 38.6 14:28:15 let's try it 14:28:18 -!- Darth_Cliche has quit (Client Quit). 14:28:25 it didn't really seem to help… 14:28:45 you only tried one. :P 14:28:55 !bfjoust collision >>>(-)*32<(-)*32<(+)*32<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*3(>>>>[([(+)*10[-]])*20])*3(>[(+)*100[+]])*4 14:28:56 WHAT KIND OF BFJOUST SCIENCE IS THAT. 14:28:58 ​Score for ais523__collision: 29.3 14:29:03 whoops 14:29:06 !bfjoust collision >>>(-)*32<(-)*32<(+)*32<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*3(>>>>[([(+)*10[-]]>)*20])*3(>[(+)*100[+]])*4 14:29:09 ​Score for ais523__collision: 40.7 14:29:27 I think it's just falling off the tape too much 14:29:36 the vast majority of programs don't set more decoys on longer tapes 14:29:40 ah. 14:29:56 !bfjoust collision >>>(-)*32<(-)*32<(+)*32<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4 14:29:59 ​Score for ais523__collision: 44.4 14:30:23 now I'll try something a bit different, it'll probably hurt but might help 14:30:59 !bfjoust collision >>>(-)*32<(-)*32<(+)*32<(-)*28>>>>>>(>>>[-[-[+++[+[(>[(+)*10[-]])*20]]]]])*7(>[(+)*100[+]])*4 14:31:02 ​Score for ais523__collision: 36.7 14:31:08 yep, just loses too much speed 14:31:12 -!- augur has quit (Remote host closed the connection). 14:31:25 !bfjoust collision >>>(-)*32<(-)*32<(+)*32<(-)*28>>>>>>(>>>[-[-[+++[+[(>[(+)*10[-]])*20]]]]<<])*7(>[(+)*100[+]])*4 14:31:28 ​Score for ais523__collision: 36.9 14:31:46 !bfjoust collision >>>(-)*32<(-)*32<(+)*32<(-)*28>>>>>>(>>>[-[-[+++[+[(>[(+)*10[-]])*20]]]]>])*7(>[(+)*100[+]])*4 14:31:50 ​Score for ais523__collision: 41.7 14:32:02 it's not a bad tactic, just not as good as doing it the normal way 14:32:10 !bfjoust collision >>>(-)*32<(-)*32<(+)*32<(-)*28>>>>>>(>>>[-[-[+++[+[([(+)*10[-]])*20]]]]>])*7(>[(+)*100[+]])*4 14:32:11 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 ​Score for ais523__collision: 30.0 14:32:21 !bfjoust collision >>>(-)*32<(-)*32<(+)*32<(-)*28>>>>>>(>>>[-[-[+++[+[([(+)*10[-]]>)*20]]]]>])*7(>[(+)*100[+]])*4 14:32:24 ​Score for ais523__collision: 42.3 14:32:24 so... yeah. varying skip distance probably can't work for all tape lengths. 14:32:27 CakeProphet: right 14:33:22 !bfjoust collision >>>(-)*32<(-)*32<(+)*32<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4 14:33:25 ​Score for ais523__collision: 44.4 14:33:36 it's beginning to reach the point where I'll have to start targeting specific programs to do better 14:34:03 slowpoke is a good start. 14:34:22 slowpoke's unbeatable with this strategy 14:34:41 it lays a large trail, which nullifies the advantage of skipping forwards 14:34:49 and detecting it would /also/ nullify the advantage of skipping forwards 14:35:24 ais523_: skip at distances that are a reverse of a fibonacci subsequence 14:35:26 ...and, uh, 14:35:27 well 14:35:31 that's the extent of my idea 14:35:40 I haven't thought anything through. :P 14:36:30 !bfjoust collision >>>>>>(+)*32<(-)*32<(-)*32<(-)*32<(-)*32<(+)*32<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4 14:36:33 ​Score for ais523__collision: 40.3 14:36:45 !bfjoust collision >>>>>>(+)*32<(+)*32<(-)*32<(-)*32<(-)*32<(+)*32<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4 14:36:48 ​Score for ais523__collision: 41.6 14:36:56 !bfjoust collision >>>>+>+>(+)*32<(+)*32<(-)*32<(-)*32<(-)*32<(+)*32<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4 14:36:59 ​Score for ais523__collision: 42.8 14:37:07 I'm trying a really heavy decoy setup 14:37:21 ais523_: try a fiboacci sequence decoy setup 14:37:23 !bfjoust collision >>>>+>+>->(-)*32<(+)*32<(+)*32<(-)*32<(-)*32<(-)*32<(+)*32<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4 14:37:26 ​Score for ais523__collision: 42.9 14:37:28 everything is better when it's a fibonacci sequence. 14:37:34 !bfjoust collision >>>>+>+>->(-)*12<(+)*32<(+)*32<(-)*32<(-)*32<(-)*32<(+)*32<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4 14:37:37 ​Score for ais523__collision: 42.0 14:38:07 !bfjoust collision >>>>+>+>->(-)*32<(+)*32<(+)*32<(-)*60<(-)*60<(-)*60<(+)*60<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4 14:38:10 ​Score for ais523__collision: 40.4 14:38:27 les 32 32 32 more 1 1 2 3 5 8 13 14:38:27 !bfjoust collision >>>>+>+>->(-)*32<(+)*32<(+)*32<<<<<(-)*28>>>>(-)*60<(-)*60<(-)*60<(+)*60>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4 14:38:31 ​Score for ais523__collision: 41.3 14:38:34 less 14:39:16 !bfjoust collision >>>>>>(+)*5<(+)*8<(-)*13<(-)*21<(-)*34<(+)*45<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4 14:39:19 ​Score for ais523__collision: 37.8 14:39:22 heh 14:39:23 happy? (the 28 is on the flag) 14:39:26 NO REVERSE IT. 14:39:37 err, that's really stupid the way decoy setups work, but OK 14:39:43 -!- copumpkin has joined. 14:39:53 brb 14:39:54 !bfjoust collision >>>>>>(+)*45<(+)*34<(-)*21<(-)*13<(-)*8<(+)*5<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4 14:39:54 ais523_: oh, yes it is. 14:39:55 -!- Ngevd has left ("Leaving"). 14:39:57 ​Score for ais523__collision: 34.4 14:40:10 !bfjoust collision >>>(-)*32<(-)*32<(+)*32<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4 14:40:12 ​Score for ais523__collision: 44.4 14:40:23 there's no reason for the decoys to differ in size at all, that I can see 14:41:03 perhaps to spend fewer steps setting them up 14:41:36 !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 also some jousters handle large/small decoys differently, or something. 14:41:39 ​Score for ais523__collision: 42.9 14:42:02 !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 ​Score for ais523__collision: 42.6 14:42:29 !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 ​Score for ais523__collision: 43.2 14:42:34 -!- Taneb has joined. 14:42:54 Pietbot is now registered 14:43:26 !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 ​Score for ais523__collision: 40.1 14:43:57 !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 ​Score for ais523__collision: 42.2 14:44:18 !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 ​Score for ais523__collision: 36.5 14:44:34 !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 ​Score for ais523__collision: 35.5 14:44:45 yep, that isn't really going to work all that well, I think 14:44:53 !bfjoust collision >>>(-)*32<(-)*32<(+)*32<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4 14:44:56 ​Score for ais523__collision: 44.4 14:45:01 probably not enough fibonacci 14:45:23 stop it! 14:45:29 !bfjoust collision >>>(-)*50<(-)*50<(+)*50<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4 14:45:32 ​Score for ais523__collision: 40.1 14:45:49 !bfjoust collision >>>(-)*32<(-)*100<(+)*100<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4 14:45:52 ​Score for ais523__collision: 38.7 14:46:13 try n!/2 14:46:29 !bfjoust collision >>>(-)*32<(-)*32<(+)*32<(-)*28>>>>>>(>>>[(>[(+)*10[-]])*20])*7(>[(+)*100[+]])*4 14:46:32 ​Score for ais523__collision: 44.4 14:46:35 I'll just leave it like that until I have any other amazing ideas 14:46:37 -!- derrik has left. 14:46:47 > let fac n = product [1..n] in map fac [1..] 14:46:48 [1,2,6,24,120,720,5040,40320,362880,3628800,39916800,479001600,6227020800,8... 14:47:12 > let fac n = product [1..n] in map (div 2 . fac) [1..] 14:47:14 [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 > let fac n = product [1..n] in map (flip div 2 . fac) [1..] 14:47:24 [0,1,3,12,60,360,2520,20160,181440,1814400,19958400,239500800,3113510400,43... 14:47:31 yep. best decoy setup. 14:47:41 -!- ive has joined. 14:47:50 -!- elliott_ has quit (Remote host closed the connection). 14:47:54 no, it isn't; 360 is an utterly mindblowingly stupid size for a decoy 14:48:00 and 2520 is even worse 14:48:09 (making them more than 256 only makes sense as part of a lock algorithm) 14:48:21 (and even then, is generally suboptimal) 14:48:23 > let fac n = product [1..n] in map (flip mod 256 . flip div 2 . fac) [1..] 14:48:25 [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 in fact, outside lock algos, making them more than 128's a bit silly 14:48:49 -!- elliott has joined. 14:48:52 It works! 14:48:55 > let fac n = product [1..n] in map (flip mod 128 . flip div 2 . fac) [1..] 14:48:57 [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 No it doesn't! 14:48:58 It = ? 14:49:17 > let fac n = product [1..n] in map (\x -> fac x - fac (x-1)) [1..] 14:49:18 [0,1,4,18,96,600,4320,35280,322560,3265920,36288000,439084800,5748019200,80... 14:49:45 Hurrah! 14:49:52 Oh no! 14:49:56 that isn't a good decoy setup either 14:49:57 elliott: ? 14:50:05 > let fac n = product [1..n] in map (\x -> (fac x - fac (x-1))/2) [1..] 14:50:06 [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 > let fac n = product [1..n] in map (flip mod 128 . liftM2 (-) fac (fac . pred)) [1..] 14:50:13 [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@dinky ~]$ ls -lh /etc/rc.d/noidentd 14:50:22 -rwxr-xr-x 1 root root 890 Oct 28 15:46 /etc/rc.d/noidentd 14:50:22 [elliott@dinky ~]$ cat /etc/rc.d/noinetd 14:50:22 cat: /etc/rc.d/noinetd: No such file or directory 14:50:24 what the /fuck/? 14:50:25 > let fac n = product [1..n] in map (\x -> (fac x - fac (x-1)) `div` 2) [1..] 14:50:27 [0,0,2,9,48,300,2160,17640,161280,1632960,18144000,219542400,2874009600,404... 14:50:38 elliott: noidentd != noinetd 14:50:44 Ah 14:50:47 Quite so 14:51:00 -!- elliott has quit (Client Quit). 14:51:04 -!- elliott has joined. 14:51:10 > let fac n = sum [1..n] in map fac [1..] 14:51:11 [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 aha, no ~ 14:51:25 -!- elliott has quit (Remote host closed the connection). 14:51:27 but given that you're cloaked, the identd doesn't make a whole lot of sense 14:51:42 ais523_: I was under the impression that have to use interesting mathematical sequences to win at bfjoust 14:51:45 > let fac n = sum [1..n] in map (flip mod 128 . fac) [1..] 14:51:47 I guess I misunderstand the game. 14:51:47 [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 Perfect. 14:52:44 it was right last time too 14:52:52 Yes, but it didn't start on boot. 14:53:30 that was a fast reboot 14:53:32 ais523_: that's a reasonable decoy sequence no? 14:53:36 ais523_: Yes, it was :) 14:53:40 1 might be too small 14:53:56 1 is sometimes OK for a first decoy 14:54:01 the problem there is you're going to lose on short tapes 14:55:51 wouldn't a decoy of 1 take more time to set up than it (in the best case scenario) affords? 14:56:55 no; it sends the opponent into either a small decoy detection loop or their offset clear 14:57:20 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 if bfjoust programs were sentient 14:59:51 What bot prefix symbol should I use? 14:59:58 "¬"? 15:00:04 I don't think $ is in use here 15:00:12 Deewiant: You should try my package it will give you endless money, riches, and ident. 15:00:19 Especially money and riches. 15:00:21 you could win by creating a program that generates beautiful treatises on various topics of relevance to sentient computer culture. 15:00:21 or you could always use zero-width-space 15:00:39 or if you're feeling especially evil, right-to-left-override 15:00:41 and the enemies would hastily try to take notes. 15:00:46 or sit in awe. 15:01:28 The stan rune is the best character for anything. 15:02:26 $ or # would be good for an actual command prefix 15:02:43 but ( would be good in that it would be hilariously ugly. 15:02:47 # often gets pasted in here 15:02:55 as part of shell commands 15:03:00 (and lines often start with an opening paren) 15:03:10 ) could work, I guess 15:03:36 https://aur.archlinux.org/packages.php?ID=53492 AW MAN LOOK AT THAT I'M LIKE SOME KIND OF MAGICIAN 15:03:37 doesn't $ start shell prompts? 15:03:46 or end them rather. 15:03:50 INSTALL OR DIE 15:03:53 err, right 15:03:58 I've been using too much OCaml recently 15:04:02 which has a # as its prompt 15:04:17 elliott: Why ident 15:04:18 -!- augur has joined. 15:04:19 # would be fine then, unless people start pasting a lot of CPP directives. 15:04:37 Deewiant: You know how freenode and other IRC servers pause for a couple of seconds whenever you connect?? 15:04:41 elliott: No 15:04:46 WELL THEY DO 15:04:50 An identd COMPLETELY ELIMINATES THAT WOOO 15:04:58 ALSO, the ~ before your username disappears on freenode. 15:05:02 That means you're special. 15:05:09 But seriously, reconnections are instant now, this is so much less annoying. 15:05:10 In other words, no good reason 15:05:22 GOT IT THANKS 15:05:34 What's one yaourt and a vi /etc/conf.d/noidentd and an rc.d start noidentd!!!! 15:05:43 That's nothing!!!!! That's LESS THAN NOTHING!!!!!!!!!! 15:06:47 : would be a good command prefix, but could possibly conflict with :t 15:08:35 elliott: but NOTHING is less than NOTHING!!!!! 15:08:39 CakeProphet: Surely YOU know the call of idents fine fellow???? 15:08:52 LET ME INTEREST YOU IN NOIDENTD, THE SMALLEST SELF-CONTAINED FAKE IDENTD ANYWHERE _OR YOU MONEY BACK!!!!!!_ 15:08:53 uh, I do now? 15:09:19 instant login does sound nice. 15:09:31 but that's not what an identd does, is it? 15:09:34 s/login/connect/ 15:10:22 ais523_: yes, it does 15:10:30 freenode wastes like two to three seconds trying to connect to your identd 15:10:34 if it succeeds, it goes through instantly 15:10:39 hit reconnect and watch the server log 15:10:42 ouch 15:10:44 it pauses after can't resolve hostname 15:10:48 that's the identd connection 15:10:55 why doesn't it do that for nickserv identifies, where it'd actually be useful? 15:10:59 one installation of noidentd and CONNECTIONS ARE INSTANT FOREVER!!!!!! 15:11:11 also, all ports are firewalled or NATted inbound on all connections i use 15:11:13 typically both 15:11:15 ais523_: because irc is stupid 15:11:17 also 15:11:18 YOU COULD 15:11:18 ER 15:11:21 DAMMIT!!!!! 15:11:22 so noidentd wouldn't be particularly useful 15:11:25 CakeProphet FINE FELLOW!!!! 15:11:35 going to sleep... 15:11:40 MAYBE LATER GENTLEPERSON. 15:11:50 GOOOD DAAAAAMN IIIIIT 15:12:02 yes it is a very good damn it. 15:12:08 THE BEST 15:12:14 Deewiant SLIGHTLY LESS FINE FELLOW! 15:12:18 You all suck. 15:12:37 I'm running splint on your code 15:12:44 noidentd is some kind of botnet virus isn't it? 15:13:45 Deewiant: splint complains about everything, but it's pretty unobjectionable code :P 15:15:05 Finished checking --- 28 code warnings 15:15:05 34 internal bugs reported 15:15:09 X-D 15:15:11 Gimme the report 15:15:12 It doesn't like /usr/include/bits/confname.h 15:15:18 But ais523_ can attest to splint's uselessness :P 15:15:46 elliott: These line numbers won't match, I had to un-C99 your variable declarations 15:15:48 elliott: it would be very useful if it weren't so buggy 15:15:52 Deewiant: lol 15:16:13 -!- elliott has quit (Quit: Leaving). 15:16:18 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 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 LOOK AT MY SPEEEEDY RECONNECTS 15:16:38 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 ais523_, at what reporting level? 15:17:53 -!- zzo38 has joined. 15:18:02 Vorpal!!! Tell me you're on an Arch machine. 15:18:04 ais523_, also was that per line of code or in total? 15:18:06 elliott: Report: http://sprunge.us/Uied Modified code: http://sprunge.us/GaDZ 15:18:23 elliott, nope, I'm on ubuntu on my laptop and windows 7 on my desktop atm. Playing ARMA 2 15:18:23 (Command line: $ splint +posixlib -systemdirs /usr/include -systemdirerrors +trytorecover noidentd.c) 15:18:25 Deewiant: Hahaha jesus 15:18:41 Deewiant: It compiles with clang -std=c99 -pedantic -Wall -Wextra, that's good enough for me :P 15:18:47 Erm, as in, without warning 15:18:51 (Without the +trytorecover it just dies on the first internal bug) 15:18:58 Nice 15:19:02 elliott, why did you want me to be on an arch machine? 15:19:13 Not in global scope as expected: Un-unparseable context: 10 15:19:16 Vorpal: NOIDENTD!!!! It's the best identd since sliced identd!!! But it's not an identd!! 15:19:27 elliott, what? 15:20:18 elliott: Okay it's running but I'm not going to reconnect 15:20:31 Deewiant: Just connect with another client :P 15:20:53 Oh and also it's not going to help at all, heh 15:20:59 Firewall? 15:21:14 elliott, you made no sense 15:21:19 This machine != the machine my keyboard is attached to 15:21:23 Deewiant: lol 15:21:43 Vorpal: I made total sense, sorry 15:22:06 elliott: Make a Solaris 10 package kthx 15:22:26 Deewiant: Observe the Makefile that installs a grand total of one file to the system :P 15:22:40 elliott: But I need service configuration!! 15:22:42 elliott, why are you not using tup?! 15:22:50 Deewiant: True!!!!!! 15:22:58 Vorpal: Couldn't be fucked to install it!!!!!!!!!!!! 15:23:15 https://aur.archlinux.org/packages.php?ID=35320 15:23:18 Also it's orphaned??/ 15:23:19 elliott, it is like cp tup ~/bin after building it 15:23:26 oh never used aur for tup 15:23:38 No I do not install anything outside the package manager now. 15:23:40 It is so blissful. 15:23:43 I just built it in my home dir and copied to ~/bin 15:23:55 All language-specific packaging tools are DEAD to me. DEAD. 15:23:59 -!- FireFly has quit (Quit: ZNC - http://znc.in). 15:24:03 elliott, I use package manager for everything outside $HOME, with a few /opt exceptions such as nwn 15:24:13 https://aur.archlinux.org/ Hahaha I wonder if anyone's seen my package 15:24:20 I wonder if I can track download counts 15:24:23 elliott, you are on arch linux? 15:24:27 No 15:24:30 Gentoo. 15:24:40 elliott, I don't believe that 15:24:40 Also Debian. 15:24:42 It's Gentoo/Debian. 15:24:48 With Solaris userland. 15:24:52 -!- FireFly has joined. 15:24:52 hah 15:24:54 And DragonflyBSD kernel. 15:25:10 elliott, which part is from debian then? 15:25:27 Vorpal: /etc/debian_version 15:25:35 elliott, and the bit from gentoo? 15:25:50 /dev/tty4 15:25:55 :P 15:26:39 OH YEAH I was going to ask 15:26:42 Neat, hostname tilde begone 15:26:50 FireFly: omg bffs 4eva <3 15:27:08 As I was saying, 15:27:22 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 (Have I mentioned I'm not installing anything outside the package manager any more?) 15:27:57 FireFly: P.S. You just installed the most secretest rootkit ever. 15:28:00 elliott, c-intercal updated? I was unaware, I will deal with it tomorrow. Won't be on arch until then. 15:28:03 (It's so secret it doesn't even exist.) 15:28:16 Vorpal: It updated months ago, you are an irresponsible maintainer! 15:28:43 Vorpal: Also your package doesn't use package() but I dunno if that's new or not. 15:28:45 elliott, I wasn't notified. I do check the usenet channel every week or so 15:29:00 elliott, package() is quite new I think yeah. 15:29:02 "usenet channel"? 15:29:13 http://groups.google.com/group/alt.lang.intercal/browse_thread/thread/3c17bc59ad7e44a7# 15:29:20 You were notified in April 15:29:23 ais523_, alt.lang.intercal 15:29:28 Vorpal: "channel"? seriously? 15:29:40 ais523_, err, too tired 15:29:45 "newsgroup" is the correct term; "group" is acceptable 15:29:51 elliott, oh right, my desktop broke around then. Probably why I missed it. 15:29:55 "forum" is not really acceptable but people have been seen using it on occasion 15:29:58 ais523_: This is the best IRC group on esoteric languages there is. 15:29:59 but "channel" is just bizarre 15:30:09 Vorpal: Also, you're using a suboptimal download mechanism in the package 15:30:13 ais523_, I'm just tired. Don't try to read anything into it 15:30:15 elliott, ? 15:30:28 Vorpal: HTTP 15:30:47 The state-of-the-art C-INTERCAL distribution mechanism is gopher/IPv6. 15:30:49 elliott, you didn't mark c-intercal out of date anyway. You could have done that. 15:30:53 Over UDP I guess. 15:31:06 Vorpal: I only noticed today going to install c-intercal as an innocent, delicate flower. 15:31:09 Alas I am now withered. 15:31:10 ?pl \c -> (c:) <$> optional (char c) 15:31:10 liftM2 (<$>) (:) (optional . char) 15:31:11 elliott, the issue is that makepkg only does http and ftp to my knowledge 15:31:20 Vorpal: Patch makepkg 15:31:26 It is the only way 15:31:41 elliott: try drinking some water 15:31:42 elliott, you do it and submit it to upstream, I'm not going to care. 15:31:52 I've been known to revive flowers from apparently fatal wilting before like that 15:31:55 Vorpal: But you might care in the past? 15:32:01 Also the present? 15:32:02 elliott, ... 15:32:04 elliott, no 15:32:10 I weep. 15:32:14 wait, I thought I was upstream 15:32:21 or is there another stream between? 15:32:31 ais523_, upstream for the packaging utilities 15:32:40 ais523_, if elliott wants it to support gopher/ipv6 15:32:47 them* 15:32:58 Vorpal: err, the distribution isn't /only/ on gopher over IPv6 15:33:06 it's just that when it first came out, I needed somewhere to put it 15:33:17 and someone happened to have an IPv6 gopher server and asked if they could host it there 15:33:23 ais523_, I know. It was elliott who said I should use gopher/ipv6 because http was "suboptimal" 15:33:27 and it seemed a pretty appropriate set of protocols 15:33:32 ais523_, he is just messing around. 15:35:05 ais523_: I don't know why you support deprecated protocols like HTTP. 15:35:10 IPv4 has all run out. 15:35:55 ipv4/ipv6 is a completely unrelated issue to gopher/http 15:36:36 elliott: I doubt you'll be able to convince many computer-literate people that HTTP is deprecated in favour of gopher 15:37:02 Hmm, someone needs to implement git-over-gopher 15:37:05 Preferably push-capable 15:37:10 No wait 15:37:13 tla-over-gopher 15:37:23 ais523_: Move C-INTERCAL over to tla-over-gopher version control 15:37:46 no 15:38:04 clearly, we need to get sg implemented as the new standard, here 15:38:10 sg/gopher 15:38:32 sg is really boring, it doesn't even have its own sync protocol :'( 15:39:03 Or hmm 15:39:09 I think it started to have one, actually 15:40:36 What is tla-over-gopher anyways? 15:40:47 zzo38: tla is a version control system 15:41:03 and putting it over gopher means using gopher to transmit the information needed for pulls and pushes 15:45:24 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 @ty (concat .) . zipWith (\a b -> [a,b]) 15:48:56 forall b. [b] -> [b] -> [b] 15:49:09 elliott: Does that^ still not exist anywhere 15:49:27 Hmmm 15:49:43 Not to my knowledge, but I can't help but feel there must be a nicer way 15:49:55 :t zipWith (\a b xs -> a:b:xs) 15:49:57 forall b. [b] -> [b] -> [[b] -> [b]] 15:50:07 The practical way is to write it with manual recursion :-P 15:50:11 :t \xs ys -> foldr ($) [] $ zipWith (\a b xs -> a:b:xs) xs ys 15:50:12 forall a. [a] -> [a] -> [a] 15:50:25 :t ala Endo concatMap .: zipWith (\a b xs -> a:b:xs) xs ys 15:50:27 Not in scope: `xs' 15:50:27 Not in scope: `ys' 15:50:27 :t ala Endo concatMap .: zipWith (\a b xs -> a:b:xs) 15:50:28 Couldn't match expected type `Endo a' against inferred type `[b]' 15:50:28 Expected type: (a -> a) -> Endo a 15:50:28 Inferred type: (a -> a) -> [b] 15:50:32 Also it probably shouldn't use zip as it could take the remainder when one list runs out 15:50:37 :t ala EndoconcatMap 15:50:38 Not in scope: data constructor `EndoconcatMap' 15:50:41 :t ala Endo concatMap 15:50:42 Couldn't match expected type `Endo a' against inferred type `[b]' 15:50:43 Expected type: (a -> a) -> Endo a 15:50:43 Inferred type: (a -> a) -> [b] 15:50:45 :t ala Endo foldMap .: zipWith (\a b xs -> a:b:xs) 15:50:46 Not in scope: `foldMap' 15:50:48 >_< 15:50:52 @ty ala 15:50:53 forall o n b n' o'. (Newtype n o, Newtype n' o') => (o -> n) -> ((o -> n) -> b -> n') -> b -> o' 15:50:54 :t ala Endo Data.Foldable.foldMap .: zipWith (\a b xs -> a:b:xs) 15:50:55 forall b. [b] -> [b] -> [b] -> [b] 15:51:00 Deewiant: Perf... wait, what 15:51:03 :-D 15:51:06 Oh 15:51:14 :t ($ []) . ala Endo foldMap .: zipWith (\a b xs -> a:b:xs) 15:51:16 Not in scope: `foldMap' 15:51:21 :t ($ []) . ala Endo Data.Foldable.foldMap .: zipWith (\a b xs -> a:b:xs) 15:51:22 forall b. [b] -> [b] -> [b] 15:51:27 Deewiant: Perfect 15:52:23 > (($ []) . ala Endo Data.Foldable.foldMap .: zipWith (\a b xs -> a:b:xs)) "abc" "123" 15:52:24 "123" 15:52:26 elliott: Try again 15:52:38 :t ($ []) .: ala Endo foldMap .: zipWith (\a b xs -> a:b:xs) 15:52:39 Not in scope: `foldMap' 15:52:42 dfjk 15:52:42 gho 15:52:43 em,l; 15:52:48 :t ($ []) .: ala Endo Data.Foldable.foldMap .: zipWith (\a b xs -> a:b:xs) 15:52:49 forall b. [b] -> [b] -> [b] 15:52:55 @hoogle (/\/) 15:52:55 No results found 15:53:07 Try hayoo 15:54:18 No luck 16:00:47 May I test Pietbot? 16:01:00 I'm not sure who you're asking for permission 16:01:02 I don't think you need to ask 16:01:06 but I'll stand by ready to kick it if it goes berserk 16:01:07 Channel in general 16:01:10 if you think it's necessary 16:01:45 Geh, aurget is just too fragile for me 16:01:48 I'm trying yaorut 16:01:49 yaourt 16:01:51 Fuck that name 16:01:57 yaourt --sucre 16:02:01 Fuck that option 16:02:22 It's a bad option :-/ 16:02:32 Deewiant: Start counting the days until I write my own libalpm/AUR thing 16:02:38 They are numbered 16:02:53 what is AUR anyway? 16:02:54 If it had just -y instead of -fyy it'd be better 16:03:03 ais523_: Arachnids Understanding Rodents 16:03:10 Deewiant: -fyy? 16:03:14 elliott: -fyy 16:03:18 What 16:03:26 ais523_: Arch User Repository 16:03:44 elliott: It's equivalent to -Sfyyua --devel 16:03:54 elliott: Notice "fyy" 16:03:55 Deewiant: Have I mentioned I don't like yaourt 16:04:01 I take it -fyy is like force yes yes 16:04:04 Or something 16:04:04 It's just a joke 16:04:07 -f is force 16:04:16 -y is the normal pacman -y 16:04:18 What is sucre actually meant to be, even as a joke 16:04:21 And I think -yy also is, I think 16:04:32 Or maybe not 16:04:34 Also, why does everybody mindlessly copy pacman's basic command structure 16:04:36 It's kind of shit 16:04:45 Anyway, -yy is "force update of package databases" 16:04:54 I.e. overwrite them even if they appear to be up to date 16:04:55 Oh,r ight 16:04:58 s/r / r/ 16:05:09 elliott: Because having them be more or less drop-in replacements of each other is handy :-P 16:05:38 Deewiant: Yeah, but they offer like two things, AUR building, and an improved UI 16:05:39 elliott: http://translate.google.com/#fr|en|yaourt%20sucre 16:05:41 If you're doing the latter... 16:05:49 And yes 16:05:51 I realise it is French :P 16:05:58 I just don't get the joke of the option itself 16:06:00 i.e., why it does that 16:06:17 It's like syntactic sugar except it's pactactic sugar 16:06:18 I don't know 16:07:05 [elliott@dinky yaourt]$ makepkg -s 16:07:05 ==> Making package: yaourt 0.10.2-1 (Fri Oct 28 17:06:24 BST 2011) 16:07:06 ==> Checking runtime dependencies... 16:07:06 ==> Installing missing dependencies... 16:07:06 error: target not found: package-query>=0.7 16:07:06 ==> ERROR: 'pacman' failed to install missing dependencies. 16:07:18 Dependencies on other AUR packages 16:07:19 So great 16:07:22 So simple 16:08:03 I think a couple of the helpers use that 16:08:10 Not sure though 16:08:37 The idea of writing my own on top of libalpm As God Intended is annoyingly prominent at this point :P 16:09:27 "man libalpm" is uh 16:09:31 It references a bunch of section manpagse 16:09:33 That don't exist 16:13:40 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 I wish that was my typical hyperbole 16:14:44 I don't use bash nor yaourt's completion :-P 16:15:50 elliott: perldoc does that too 16:15:59 although hitting control-C at a judiciously timed moment 16:16:00 helps 16:16:43 Damn 16:16:57 How do I get my bot to use netcat? 16:17:12 noidentd-git is now onto pkgrev=5 :P 16:17:28 FireFly: If you upgrade, you'll get an EXCITING NEW NOTHING. 16:17:38 I want some sort of two way pipe? 16:17:41 Omgz 16:17:46 Taneb: nc -e 16:17:53 elliott: Why is bash a dep 16:17:55 Taneb: nc -e 'piet mybot' irc.freenode.net 6667 16:18:02 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 Deewiant: install -D -m755 noidentd.rc.d "$pkgdir/etc/rc.d/noidentd" 16:18:15 unless you're using a version of nc whose author things -e is a massive security bug 16:18:18 ais523_: Well, it's not that better; if FIFOs weren't gross they'd be better 16:18:20 because it can easily be used to make a reverse shell 16:18:30 e.g. if tie was installed on the system :-) 16:18:35 elliott: So it's a makedep? 16:18:45 Deewiant: No? /etc/rc.d/noidentd is a bash script 16:18:50 It runs at startup/etc. 16:18:59 So it's a runtime dependency 16:19:07 Hmm 16:19:19 nc: invalid option -- 'e' 16:19:19 This is nc from the netcat-openbsd package. An alternative nc is available 16:19:19 in the netcat-traditional package. 16:19:24 Deewiant: BTW, the official package-bug-checker-thing told me to put it there 16:19:40 elliott: Yeah but it's not always right 16:19:48 Taneb: install netcat-traditional, echo '#!/bin/sh' >mybot; echo 'piet mybot.piet' >>mybot; chmod +x mybot 16:19:53 nc -e 'piet mybot' irc.freenode.net 6667 16:19:55 Deewiant: How's it wrong here 16:20:04 Deewiant: An rc.d script is just as much a runtime thing as a /usr/bin executable 16:20:10 elliott: I know, I'm just thinking 16:20:25 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 elliott: Most rc.d scripts of mine don't seem to depend on bash or sh 16:20:59 Deewiant: See shebang 16:21:14 elliott: I just mean the packages themselves 16:21:18 Well 16:21:22 That sounds like a bug to me 16:21:32 They don't run without bash 16:21:37 OK, sure, you can just not use the rc.d script 16:21:42 But you could just "not use" something in /usr/bin too 16:21:46 It's still a missing dependency 16:21:48 Have you answered the telephone by: "I'm sorry, you must have a wrong number. I don't have a telephone." 16:21:52 elliott: You depend on /etc/rc.d/functions but not initscripts 16:21:57 if it's Debian, then scripts are allowed to assume that "essential" packages are installed, and I think that includes dash 16:22:02 elliott: (As, presumably, do all/most of these packages) 16:22:09 Deewiant: Oh, that's another bug 16:22:10 zzo38: I don't think so; however, it might even be correct if you answered a payphone like that 16:22:14 or someone else's telephone 16:22:14 elliott: Fair enough :-) 16:23:21 noidentd-git W: Dependency bash included but already satisfied 16:23:22 noidentd-git W: Dependency included and not needed ('initscripts') 16:23:28 -!- ive has quit (Ping timeout: 240 seconds). 16:23:34 Hmmmmmmm 16:23:42 Deewiant: I wonder why it's complaining about that, it should see the filename if it sees bash 16:23:51 Unless it just uses special-case hacks 16:23:51 elliott: I told you it's not always right 16:24:50 enigma includes different floors ! 16:24:51 Deewiant: https://aur.archlinux.org/packages.php?ID=53492 16:24:51 There we go 16:24:55 ais523_: :D 16:25:14 -!- elliott has quit (Client Quit). 16:25:18 -!- elliott has joined. 16:25:21 ais523_: I suppose so. In which places could I find a payphone? 16:26:03 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 Deewiant: Tell me I'll regret writing my own libalpm ditty 16:27:12 I need it :( 16:27:15 elliott: You'll regret it 16:27:18 Deewiant: Why 16:27:29 I dunno, you told me to say that 16:27:38 oh 16:27:40 Unconvincing 16:27:49 I can't believe python is actually python3 on Arch 16:31:43 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 Deewiant: You're not going to decide values for them dynamically based on static analysis? 16:32:40 ... no. 16:33:05 Feel free to file a feature request if this ever gets that close to being finished 16:33:19 Deewiant: how many bits is a char? 16:33:38 ais523_: Undecided 16:33:45 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 C1X 16:33:58 Deewiant: You're not going to get anywhere interesting just by picking weird rangse 16:33:59 ranges 16:34:02 almost 100 years old? boring 16:34:28 I'd say plain int should be equivalent to short, and between 17 and 31 bits wide 16:34:38 as that's going to catch more programs than making it unusually large 16:34:46 elliott: Where did I say that this is the only DS9K thing I'll do 16:34:48 probably sizeof(int) == 3 is the value to go for 16:34:50 char should be as big as a short, int as small as a short 16:34:56 Deewiant: Well, fair enough 16:35:00 sizeof has no relation to the min/max values 16:35:16 I'd go for 17-bit chars, shorts ant ints 16:35:16 Deewiant: it does for the unsigned types, doesn't it? 16:35:19 s/ant/and/ 16:35:22 ais523_: Does it? 16:35:26 And then 129-bit longs 16:35:32 this is from memory, and I'm far from 100% confident 16:35:39 shorts being equal to ints seems a bit forgiving 16:35:41 All of them one's-complement-with-trap 16:35:42 If you can do that 16:36:00 I just need these values so that I can give types to integer literals :-P 16:36:03 All even bits are padding. 16:36:12 hmm, what about sizeof(short)==2, sizeof(int)==3, sizeof(long)==something that isn't representable in an int? 16:36:26 sizeof is not a matter of interest to me right now 16:36:35 Unless sizeof and the min/max truly are dependent 16:36:37 Deewiant: well, it determines the bounds that are possible on the integers 16:36:49 you can't have a max-min more than 2 to the power of sizeof * CHAR_BIT 16:36:59 You can have less, though. 16:37:07 yes, but not in all cases 16:37:15 unsigned char you definitely have to use every bit 16:37:15 Can't I freely pad the sizeof 16:37:18 I'm not sure about unsigned int 16:37:19 Except for chars 16:37:31 nor about signed char 16:38:10 Sigh, AUR Haskell packages do shared objects but not profiling 16:38:16 "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 For signed integer types without exception. 16:38:38 (And also there is a sign bit.) 16:39:44 Right, there are N value bits thus giving the possible values 0 through 2^N - 1 16:40:17 But with padding the sizeof can be anything bigger 16:40:28 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 fizzie: "Some combinations of padding bits might generate trap representations" 16:41:26 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 Oh, right. But you can't have a value range of, say, [-22222, 33333]. 16:41:43 No, I can't. 16:42:44 (That footnote is duplicated at least in this C1X draft, amusingly.) 16:43:02 Prime powers of two for the elegance, maybe. 16:46:51 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 "if there are M value bits in the signed type and N in the unsigned type, then M <= N" 16:48:22 Could have signeds represent [-n,n] and unsigneds represent [0,n], then. 16:51:55 11-bit chars, 17-bit shorts, 19-bit ints, 37-bit longs, and 67-bit long longs 16:54:22 Right, I've got a hat on 16:54:37 If I act like Gregor, maybe I'll get some of Gregor's skills 16:55:58 ?hoogle Ord a => (a,a) -> a -> Bool 16:55:58 Data.Ix inRange :: Ix a => (a, a) -> a -> Bool 16:55:59 Text.Regex.Base.RegexLike extract :: Extract source => (Int, Int) -> source -> source 16:55:59 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 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 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 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 So it would be wrong to use sidereal zodiac mode with it if you wanted the standard right ascensions values. 17:21:08 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 Deewiant: What was this all about, incidentally? Were you writing a DS9K simulator? 17:22:49 fizzie: I'm glacially writing a DS9K implementation of C, in Haskell 17:25:16 Ah. 17:25:21 What is a DS9K? 17:25:49 "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 OK. 17:28:13 -!- ive has joined. 17:30:58 Hmm. *Clearly* the DS9K should have each pointer type with distinct representation. 17:31:30 yeah yeah been there donr that 17:31:31 -!- Ngevd has quit (Ping timeout: 258 seconds). 17:34:51 pikhq_: I suppose it should 17:37:45 -!- ais523_ has quit (Ping timeout: 265 seconds). 17:50:11 -!- azaq23 has joined. 17:53:41 Sigh, AUR Haskell packages do shared objects but not profiling 17:53:43 I retract this 17:55:47 -!- Ngevd has joined. 17:58:14 elliott, so why are you using arch linux? 17:58:31 elliott, I mean you don't really seem to be the type to enjoy arch linux 17:58:46 Vorpal: It's way better than Gentoo/Debian/Solaris/DragonflyBSD 17:59:03 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 Vorpal: But honestly, the real reason is that it has a newer ghc than Debian 18:00:28 elliott, please don't tell me you are using this on the vps!? 18:00:50 No. That's Debian stable as always. 18:01:01 elliott, speaking of which, how did you solve the haskell issue on there? 18:01:04 or ghc issue rather 18:01:10 I didn't 18:01:15 -!- ais523 has joined. 18:01:19 so what did you do instead? 18:01:55 Used a cron plugin for bukkit 18:01:58 ouch 18:02:04 It's ok, it uses cron4j 18:02:12 which is a feature-for-feature reimplementation :P 18:02:32 this is like the only place I can think of where that is useful 18:04:16 :P 18:04:30 i think the advantage is, it can call java code 18:04:32 rather than executables 18:04:46 elliott, I mean, there are far better interfaces for scheduling systems to embed in your application than a crontab file 18:04:59 Meh, they're flexible 18:05:03 well yeah 18:05:04 It has a programmatic API too 18:05:25 makes sense 18:06:18 elliott, have fun with arch. #archlinux is, while not friendly, acceptable. 18:06:31 I don't use distro irc 18:06:40 good choice 18:06:46 it is an automated faq dispensal mechanism 18:06:50 but with more yelling 18:06:54 quite 18:06:54 for all it 18:07:05 Maybe I should join #ubuntu, I assume it's the best place. 18:07:10 elliott, the arch linux wiki tends to be surprisingly good 18:07:14 anyway, the large selection of haskell packages in aur has me happy 18:07:21 the wiki is nice 18:07:31 rc.d/rc.conf/inittab/etc. is acceptable 18:07:34 so eh 18:07:36 i'm happy 18:07:44 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 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 $ aptitude search '^libghc.*-dev$' | wc -l 18:08:26 232 18:08:26 (Sadly they're all from the third century BCE.) 18:09:10 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 fizzie: of -uptodate- packages 18:09:40 Vorpal: (a) I have a proper issue with it: It's not a service management system. 18:09:47 elliott, there is that too 18:09:52 (b) Meh, I don't have enough daemons for that to matter much, but it's imperfect. 18:10:00 DAEMONS=(syslog-ng @network @alsa @noidentd crond) 18:10:03 http://p.zem.fi/zpkb <- freenode top5 when I /list'd, but this was quite a long while ago. 18:10:18 fizzie: /list is not impressive, you know. 18:10:28 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 #haskell is up there nowadays, at least top 20 18:10:53 The 8th in that listing. 18:11:29 Vorpal: I have a decent init/service manager time, just haven't been bothered to implement it :) 18:11:36 Ditto for package manager. 18:11:58 elliott, anything wrong with nixos package manager? 18:12:09 Yes 18:12:12 For one, it's C++ 18:12:18 oh okay, apart from that? 18:12:49 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 I don't think it implements my higher-order package model 18:13:13 elliott, higer-order packages? How does that work? 18:13:26 Simple, packages take all their configuration as parameters 18:13:39 elliott, like compilation flags? 18:13:39 Configuration includes, e.g. what specific packages to use to satisfy a generic dependency 18:13:49 hm 18:13:50 Vorpal: Sure, and package-specific stuff 18:13:55 build-profiling-libs, etc. 18:14:13 elliott, so that includes stuff like the entire httpd config? Or would that not be in that? 18:15:11 Vorpal: Well, the httpd package would only take "package global" config 18:15:17 i.e., roughly "compile-time" stuff 18:15:20 right 18:15:24 But my system also subsumes configuration management 18:15:30 mhm 18:15:31 So yes and no 18:16:02 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 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 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 And it also underlies the configuration management. 18:17:48 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 Yes, it's similar, but typed, not just a constant list of values 18:18:12 yeah 18:18:21 Configuration management eaxmple: e.g. Say foo has a configuration option that can be a cc, any cc 18:18:30 yeah 18:18:35 You might have a "package" foo.cc :: cc -> pkg 18:18:42 So you'd install (foo.cc gcc) 18:18:45 Or (foo.cc clang) 18:18:45 etc. 18:18:47 yay type signatures 18:19:11 elliott, kind of nice. 18:19:19 Vorpal: ...my secret wish is that packages will turn out to generalise into /services/ as well 18:19:25 there's the same dependency management 18:19:30 "installation" is starting 18:19:37 "uninstallation" is stopping 18:19:38 etc. 18:19:46 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 httpd recommends httpd.service 18:20:04 httpd.service depends on httpd 18:20:07 and, i dunno, dbus.service 18:20:09 etc. 18:20:09 hm 18:20:23 bootup = installing the configured "system.service" or w/e 18:20:53 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 (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 take an extra-config string 18:21:07 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 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 sure 18:22:41 something like the heredoc stuff in bash would actually be nice there 18:22:42 could source it from a file, even 18:22:46 or that 18:22:48 probably cleaner 18:22:57 esp. for syntax highlighting 18:23:01 snap 18:23:05 was about to say that XD 18:23:12 Vorpal: oh, and this model also does binary packages really well 18:23:18 oh? 18:23:29 since a package specifies a /precise/ configuration, a binary package can be substituted iff it has the exact same configuration 18:23:46 because rebuilding would literally give you the same bits (modulo compilers not being deterministic etc.) 18:23:47 elliott, exact same down to CFLAGS? 18:24:01 Vorpal: sure -- if you specified different CFLAGS, you want them to be used... 18:24:34 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 and maybe "pkg install foo --some-popular-option" would use a binary package too 18:24:49 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 that would be kind of neat 18:24:57 it also means that self-depending packages can be bootstrapped 18:25:02 you just force one level of source building 18:25:09 and the next level goes to the binary to satisfy the dependencies 18:25:10 like accepting -mtune=generic but doing -march=core2 or whatever if you compile it /anyway/ 18:25:25 in a config I mean 18:25:25 Vorpal: sure, that's basically a frontend issue 18:25:30 right 18:26:00 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 and that'll use the binary packages if they have -fmagic 18:26:21 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 ...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 hm the base-line on x86-64 is actually SSE2 I think? 18:26:44 but in the common case it still uses all-binaries etc. 18:27:22 and ofc the same benefits nix gives you 18:27:32 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 i.e. purely functional -> rollback support, mostly-centralised configuration management 18:27:46 Vorpal: well, it all works out if you pick the right packages 18:27:50 Vorpal: once musl gets C++ support... 18:27:50 heh 18:27:59 musl is glibc-compatible to a T 18:28:04 hm 18:28:17 well by support I mean "works with libc++" 18:28:54 elliott, what about binary blobs that depend on certain stuff. Say, df, nwn, or even the amd or nvidia drivers? 18:29:09 What of them? They don't take cflags options :-) 18:29:30 There'd be no built-in options, everything would be specified by "sensible default" builders like autotools, etc. 18:29:34 well the drivers do, they use a glue file between the blob and the kernel. Because of how modules wokr 18:29:37 work* 18:29:43 Well, right 18:30:07 Vorpal: Oh, and multiarch basically works perfectly like this 18:30:13 hm 18:30:21 Assuming a Nix-style store layout, I haven't quite decided how it's reflected to the FS yet 18:30:35 But basically they just install normally and you overly them onto the right /usr/lib/ directory 18:30:39 s/overly/overlay/ 18:30:46 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 (This thing basically depends on a good union-fs, I think) 18:30:57 Vorpal: If you customise shit, shit might break 18:31:01 ah... 18:31:06 Vorpal: Not every combination of USE flags will work with a Gentoo package 18:31:10 I mean, it should be fine 18:31:26 elliott, I'm quite amazed at that nix actually works. 18:31:26 But if you use a different libc, shrug 18:31:43 it is quite complicated to make such a system work as well as it does 18:31:47 Vorpal: Actually, Nix's design should make things break *less*. 18:32:04 -!- clog has joined. 18:32:15 pikhq_, yes. But getting stuff like the boot-loader config version selection and what not to work is quite impressive. 18:32:16 Vorpal: Well, the nice thing about this design is that it's so generic there's barely anything to it :) 18:32:18 There's absolutely no way for you to have a breaking ABI change actually break packages. 18:32:40 brb phone 18:32:43 Unlike the usual scheme, where it can *and does* happen, unless you pay a lot of attention. 18:32:53 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 Well, fsvo huge 18:33:22 But it looks like a language and an stdlib, which is far preferable to Debian 18:33:36 Which is like the copy-and-paste coding of the package specification world 18:34:10 Vorpal: Anyway, when you start tweaking with things like the libc, you blur the line between distro and LFS tool 18:34:13 I think that's OK 18:34:40 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 packages. 18:34:52 So you could load up a systemd repo on top of it, or whatever. 18:34:58 And have that integrate with the packages. 18:35:33 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 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 zzo38: Get all lists of pairs of (A,B); use "lookup" appropriately 18:37:34 Vorpal: Oh yeah, I think a killer feature that arises out of this model can be described in one line: 18:37:51 Vorpal: cabal :: cabal-package-description -> pkg 18:38:18 You can define systematic translations of other types into packages; another packaging format is just another type. 18:38:46 back 18:39:10 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 Which is like the copy-and-paste coding of the package specification world <-- hah, perfect description 18:40:13 elliott: And how do I do that? 18:40:35 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 zzo38: Well... you can't. You can do all finite ones. 18:40:47 Vorpal: Yeah, it was an example. 18:40:49 while upstart has a really nice syntax 18:40:59 elliott: That is OK; I only need finite ones. 18:41:05 upstart's syntax + systemd would be perfect 18:41:12 zzo38: Well, a binary tree should do it 18:41:46 -!- copumpkin has changed nick to trololololo. 18:41:55 zzo38: You have ValuesOf a => ValuesOf [a], right? For finite lists 18:42:06 And (ValuesOf a, ValuesOf b) => ValuesOf [(a,b)] 18:42:11 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 So just get the values of [(a,b)] and use 18:42:13 elliott: Yes, I have those 18:42:14 :t lookup 18:42:14 forall a b. (Eq a) => a -> [(a, b)] -> Maybe b 18:42:31 actually just the source packages 18:42:33 (Nothing corresponds to an unhandled pattern) 18:42:47 Actually, I do not have ValuesOf a => ValuesOf [a] yet but I will put it on 18:42:48 (you could use a cartesian product or something if you don't want those i guess...) 18:42:53 Vorpal: Well, yes :) 18:43:03 Vorpal: But the point is that you don't need to deal with any external package managers. 18:43:13 You can just write an interpreter for them one and for all. 18:43:20 elliott, automated translation of debian source packages would be.... interesting, but probably impossible 18:43:24 Like cabal2arch and so on, but properly-typed, with real infrastructure. 18:43:38 Vorpal: Well, you could do it, it just wouldn't integrate with any of the configuration or building 18:43:45 obviously 18:43:47 Vorpal: Remember, it can look like a compiler /or/ an interpreter :) 18:44:01 elliott, the benefit would however be that you would get a HUGE package repo for free. 18:44:14 Yeah. I don't think it's worth it for Debian packages though. 18:44:17 Just too much cruft. 18:44:26 If you used enough of them all the advantages of the system would disappear. 18:44:56 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 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 You just tell the system what packages you want, and that corresponds to the dependency specification of your system package 18:45:26 And it just keeps that package installed 18:45:29 Vorpal: Yes, indeed. 18:45:44 Vorpal: Still, with the abstraction this system can offer, hand-writing packages shouldn't be too painful. 18:45:50 hm 18:46:19 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 Because you can just implement handling for GNU-style packages once and reuse that elsewhere 18:46:44 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 Yeah. 18:47:03 I'd almost feel more like integrating inst(1) support, though :-) 18:47:17 elliott, I'm not familiar with what inst(1) is 18:47:40 My fun Python script that takes a URL to a source distribution and installs it into /opt/pkgname. 18:47:46 It was /incredibly/ surprisingly successful. 18:47:52 heh 18:47:59 elliott, link? 18:47:59 It could handle bash, perl, perl modules, C-INTERCAL, emacs, ... 18:48:13 Although I had to fix the version parsing just for c-intercal 18:48:20 of course 18:48:29 elliott, what about clc-intercal? 18:48:30 elliott: could it handle itself? 18:48:38 Vorpal: Didn't try that, valued sanity a bit too much :P 18:48:43 ais523: It was a Python script, so... no :-) 18:48:43 hah 18:48:51 elliott, well, got a link to it? 18:48:53 Vorpal: http://sprunge.us/WCXI?python 18:48:54 elliott: CLC-INTERCAL's build system is reasonably sane atm, I think 18:48:55 Just found it 18:48:55 thanks 18:49:02 its version numbering isn't, ofc 18:49:06 elliott, that is all!? 18:49:19 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 does it still work on C-INTERCAL, btw? 18:49:36 Vorpal: Try it on something (you can replace /opt with something else) 18:49:36 elliott, what about nethack 18:49:40 Hmmm 18:49:42 Give it a shot 18:49:45 I wouldn't count on it 18:49:56 elliott: it won't work on vanilla NetHack, that requires manual configuration 18:49:59 elliott, I very much doubt it, don't you need to manually copy a makefile to the root dir or something? 18:49:59 it may well work on AceHack, though 18:50:02 Darn 18:50:03 and then edit a config.h 18:50:04 ais523: Link to AceHack tarball 18:50:05 or something 18:50:12 elliott: err, I don't think there is one 18:50:19 ais523: How do I obtain AceHack 18:50:23 from the repo 18:50:25 ais523: Link 18:50:35 :P 18:50:35 darcs get http://patch-tag.com/r/ais523/acehack 18:50:54 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 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 Vorpal: Yeah, chrooting or FUSE and the like would have followed 18:51:14 the build system there comes from SLASH'EM and I haven't looked at it much 18:51:15 that does it 18:51:17 i died again 18:51:19 [elliott@dinky inst]$ darcs get http://patch-tag.com/r/ais523/acehack 18:51:19 bash: darcs: command not found 18:51:20 Whoops 18:51:22 elliott, you should start working on it again 18:51:24 monqy: Oh hey 18:51:42 Vorpal: I might, if it doesn't work on AceHack :) 18:52:08 * elliott installs darcs 18:52:09 elliott, well, I meant chrooting or fusing it or whatever. Not sure fuse would have worked though, unless you fused / somehow 18:52:19 elliott, install darcs with inst 18:52:29 That would definitely not work. 18:52:35 elliott, why not? 18:52:52 Haskell build system is totally different... although darcs may be old enough to have makefiles 18:52:57 heh 18:52:59 -!- Ngevd has quit (Quit: Leaving). 18:53:13 ais523: Is it a big repo? 18:53:21 not as large as some 18:53:28 let me see if I can df it 18:53:30 Would --lazy or --partial or w/e help 18:53:31 umm, du it 18:53:39 and probably 18:53:49 72 # I hate ais523 18:53:50 what? 18:53:53 elliott, ^ 18:54:02 Vorpal: that's the C-INTERCAL Version Number Memorial Version Number Parsing Function 18:54:06 oh 18:54:10 which I had to completely restructure because of its negative components 18:54:12 I play Brogue 18:54:18 elliott: 47MiB, apparently 18:54:23 it's soooooo anoying 18:54:39 that should only take a few minutes if the server can max out the bw 18:54:54 I don't even know if 47MiB is big or small nowadays 18:54:58 I'm a little out of touch with file sizes 18:55:14 heh 18:55:23 [elliott@dinky inst]$ rm -r acehack/_darcs 18:55:23 [elliott@dinky inst]$ tar czf acehack.tar.gz acehack 18:55:23 [elliott@dinky inst]$ ls -lh acehack.tar.gz 18:55:23 -rw-r--r-- 1 elliott users 3.5M Oct 28 19:54 acehack.tar.gz 18:55:28 time to upload thi so inst can download it 18:55:30 s/thi/this/ 18:55:33 heh 18:55:41 elliott, you need a local-testing thingy 18:55:42 fuck it, I'll just patch inst to do files 18:55:53 99 if configure == 'Makefile.PL': 18:55:53 100 # I hate Perl programmers. 18:55:53 101 return [] 18:55:54 err 18:56:03 elliott: do you have a webserver running on the system? 18:56:07 you could just download from localhost 18:56:15 oh good, curl supports file:/// 18:56:22 Vorpal: perl shit breaks with -j iirc 18:56:30 elliott, ouch. 18:56:52 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 elliott: AceHack probably also breaks with -j, because I haven't redone the build system yet 18:56:58 Broken* 18:57:03 just used someone else's 18:57:04 ais523: ugh, ok, I'll hack it out 18:57:09 and I don't trust it to handle parallel make correctly 18:57:17 ais523, switch to tup 18:57:32 File "./inst", line 85 18:57:32 print 'Perl program; no configuration available. Sorry!' 18:57:33 ^ 18:57:33 SyntaxError: invalid syntax 18:57:33 what. 18:57:43 elliott, python 3? 18:57:46 oh 18:57:49 arch 18:57:52 yes 18:57:54 most fucking ridiculous decision 18:58:01 should be print('…')? 18:58:02 elliott, switch to python2 in the shebang 18:58:04 yeah 18:58:10 actually fuck it 18:58:12 124 if not path.startswith('http://') and not path.startswith('ftp://'): 18:58:13 125 print >>sys.stderr, 'Unsupported protocol.' 18:58:13 126 sys.exit(1) 18:58:13 i'll just switch to print() 18:58:20 how do you print to a file in python3 :P 18:58:21 elliott, YOU FAIL AT GOPHER! :P 18:58:25 Vorpal: oh snap so i do 18:58:27 WILLFIX 18:58:28 elliott, buggered if I know. 18:58:44 oh, print(foo, file=blah) 18:58:58 elliott, I doubt curl handles gopher btw, doing a system() on lynx might be your best bet 18:59:10 elliott: wow that syntax looks ugly to me 18:59:19 ais523, I think it is a named parameter 18:59:28 even though it's one character off the conventional Perl for the same thing 18:59:30 Yes, there are other URI schemes than just http:// and ftp:// 18:59:30 print(foo, file => blah) 18:59:38 actually, that looks somewhat ugly too 18:59:42 You should include gopher:// 18:59:52 And if you want to access local files, file:/// 18:59:56 half way through I realise that 2to3 is at hing that exists 19:00:13 elliott, 2to3 works surprisingly way in my experience 19:00:14 And possibly you might want to support https:// 19:00:29 and sftp://? And rsync://? 19:00:54 and smb://, afp://, nfs:// (does that exist?) 19:00:55 elliott: wouldn't 4to6 be more useful? 19:01:00 If you are using those 19:01:01 ais523: give me a version number for acehack 19:01:07 elliott: 3.6.0alpha 19:01:08 I don't know what all those things are 19:01:12 ais523, ... stop it, you are not oerjan 19:01:25 [elliott@dinky inst]$ ./inst file:///home/elliott/inst/acehack-3.6.0alpha.tar.gz 19:01:26 * Downloading acehack 3.6.0alpha... 19:01:26 ######################################################################## 100.0% 19:01:26 that was quick 19:01:31 reasonably sane numbering scheme? 19:01:40 ais523: SIGH @ darcs doesn't get permissions 19:01:50 Path to inst? 19:01:55 elliott: indeed 19:01:58 pikhq_: ? 19:02:05 ais523: does sh ./perl-program work? i.e., does sh do shebangs? 19:02:07 elliott: Hand me a URL for inst. 19:02:19 pikhq_: http://sprunge.us/WCXI?python 19:02:19 elliott: sh doesn't parse shebangs; perl does, though 19:02:28 as in, perl ./x.sh will pass it to the shell if x starts #!/bin/sh 19:02:31 ais523: ah, i'll just run perl then 19:02:37 if configure == 'Makefile.PL': 19:02:37 print('Perl program; no configuration available. Sorry!') 19:02:37 else: 19:02:37 run('perl', './' + configure, '--help') 19:02:41 best thing i've ever written 19:02:42 elliott, what if perl is not installed? 19:02:46 that feature was apparently invented for just that situation 19:03:17 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 ais523: Vorpal: OK, here goes nothing 19:03:31 [elliott@dinky inst]$ ./inst file:///home/elliott/inst/acehack-3.6.0alpha.tar.gz 19:03:31 * Downloading acehack 3.6.0alpha... 19:03:31 ######################################################################## 100.0% 19:03:31 * Configuring acehack 3.6.0alpha... 19:03:31 [elliott@dinky inst]$ 19:03:37 I guess it just... decided that was enough? 19:03:39 elliott, what about... building? 19:03:43 that was surprisingly fast 19:03:52 it does need to be compiled, and is unlikely to compile that instantaneously 19:03:52 elliott, or did you forget what the syntax were? 19:04:00 Vorpal: no, something is wrong :P 19:04:06 brb 19:04:08 print >>sys.stderr, '* Building %s...' % (package,) 19:04:10 2to3 19:04:11 i'm upset 19:04:28 -!- Phantom_Hoover has quit (Ping timeout: 240 seconds). 19:04:48 here goes 19:05:01 I think now I made the function of equality of functions. 19:05:12 f == g = and $ uncurry (==) <$> zip (f <$> allValues) (g <$> allValues); 19:05:26 ais523: oh, it, er, still quits after configuring 19:05:30 I hope this isn't Python 3's fault 19:05:37 try it on GNU hello just to check 19:05:42 got a link? 19:06:20 f == g = (f <$> allValues) == (g <$> allValues); 19:06:30 ftp://ftp.gnu.org/gnu/hello/hello-2.7.tar.gz 19:06:50 hello exists to be the exemplary example of packaging practices 19:07:01 and also, the exemplary example of things to practice packaging /on/ 19:07:18 what exactly is the point of a separate exec bit in the permissions on *nix 19:07:39 Vorpal: to determine what files can and can't be executed? 19:07:39 the only case I can think of where it makes sense would be for a suid -r+x 19:07:44 flood time: 19:07:46 [elliott@dinky inst]$ time ./inst ftp://ftp.gnu.org/gnu/hello/hello-2.7.tar.gz 19:07:46 * Downloading hello 2.7... 19:07:46 ######################################################################## 100.0% 19:07:46 ######################################################################## 100.0%* Configuring hello 2.7... 19:07:46 * Building hello 2.7... 19:07:47 * Installing hello 2.7... 19:07:49 Password: 19:07:51 * Installed hello 2.7. 19:07:53 ais523, yes but why not just tie it into +r 19:07:53 real0m25.532s 19:07:55 user0m7.696s 19:07:56 Vorpal: +r-x? 19:07:57 sys0m4.226s 19:07:59 [elliott@dinky inst]$ ls opt/hello-2.7 19:08:00 that's a really plausible combination 19:08:01 bin share 19:08:03 [elliott@dinky inst]$ opt/hello-2.7/bin/hello 19:08:05 Hello, world! 19:08:07 curl output got a bit messed upt here 19:08:10 ais523, and why does it matter that it is executable 19:08:12 really 19:08:16 ais523: ok, acehack is messing something up :) 19:08:20 Vorpal: tab-completion on things to execute? 19:08:22 elliott: it doesn't surprise me 19:08:31 redoing the build system isn't a high priority, but is on the mental list 19:08:31 ais523: it shouldn't be able to crash inst silently 19:08:35 -!- Phantom_Hoover has joined. 19:08:35 that's a bug in inst 19:08:38 ais523, but why would something other than a bin directory be in PATH? 19:08:50 Vorpal: doesn't need to be at the start of the line 19:08:57 if I type ./tab tab 19:09:05 then I want a list of all the executables in the current directory 19:09:06 checking whether to enable xlogfile... yes (file xlogfile) 19:09:06 checking whether to enable wizmode... yes (user wizard) 19:09:06 checking for owner of installed files... configure: error: in `/tmp/inst-work-c6g7hf/tree/acehack': 19:09:06 configure: error: test for user games failed 19:09:06 See `config.log' for more details. 19:09:09 ais523: help 19:09:11 ais523, hm true 19:09:23 elliott: it seems that it defaults the user who owns the scorefile to "games" 19:09:28 and that that user doesn't exist on the system 19:09:38 if status > 0: 19:09:38 if verbose: 19:09:38 sys.stderr.write(open(work + '/build.log').read()) 19:09:38 print('\nThis log has been written to %s/build.log.' 19:09:38 % (work,), file=sys.stderr) 19:09:39 sys.exit(1) 19:09:43 wait, why would I only print errors when verbose? 19:09:44 * elliott fixes 19:10:00 oh, hmm 19:10:01 I see 19:10:20 How can you have a beautiful ending without making beautiful mistakes? 19:10:24 I'm not sure if that's a bad default, or a case where automatic installation isn't possible 19:10:32 ais523: it's ok: inst takes configure options 19:10:39 ais523: inst pretends to be the package configure, in fact 19:10:42 you can pass it --help 19:10:48 elliott: --with-user=anything --with-group=anything 19:10:52 thanks 19:10:55 where anything should be appropriate 19:10:57 elliott, does it cache the downloaded package or does it re-download it every time? 19:11:06 umm, --with-owner 19:11:09 not --with-user 19:11:10 Vorpal: re-download for now :) but this is from file:/// 19:11:15 right 19:11:38 OK, let's try this again. 19:11:52 [elliott@dinky inst]$ time ./inst file:///home/elliott/inst/acehack-3.6.0alpha.tar.gz 19:11:52 * Downloading acehack 3.6.0alpha... 19:11:52 ######################################################################## 100.0% 19:11:52 * Configuring acehack 3.6.0alpha... 19:11:52 Command failed with status 1. A log has been written to /tmp/inst-work-jrdpdx/build.log. 19:11:54 real0m5.194s 19:11:55 user0m3.256s 19:11:57 sys0m1.010s 19:11:59 that's more reasonable 19:12:05 yep 19:12:06 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 what was the error? 19:12:16 Vorpal: oh, I know full well 19:12:25 Vorpal: Debian uses daemons to watch that, rather than humans 19:12:27 ais523: the one i pasted above 19:12:39 elliott: I mean, in /tmp/inst-work-jrdpdx/build.log 19:12:40 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 ais523, that might be hard for some packages. 19:12:49 elliott, XD 19:12:49 ais523: it's just configure's output 19:12:53 elliott: well, yes 19:12:54 checking whether to enable wizmode... yes (user wizard) 19:12:54 checking for owner of installed files... configure: error: in `/tmp/inst-work-jr 19:12:54 dpdx/tree/acehack': 19:12:54 configure: error: test for user games failed 19:12:54 See `config.log' for more details. 19:12:55 elliott, what about the kernel? I bet that will be more 19:13:02 elliott: OK, that's bizarre 19:13:06 ais523: howso? 19:13:10 that's what you saw before 19:13:15 you didn't react to it oddly then... 19:13:18 ok, let's try this with the options ais523 gave 19:13:22 heh 19:13:24 ah, I thought you'd done it with the options 19:13:29 and was wondering why it was ignoring them 19:14:02 failed again with same error 19:14:05 $ ./config.status --config 19:14:05 [elliott@dinky inst]$ time ./inst file:///home/elliott/inst/acehack-3.6.0alpha.tar.gz --with-owner=anything --with-group=anything 19:14:06 '--enable-wizmode=ais523' '--with-owner=ais523' '--with-group=ais523' '--prefix=/home/ais523/acehack/build' 19:14:15 elliott: well, "anything" probably isn't a valid owner either 19:14:17 elliott, you need to fill in relevant values for anything 19:14:18 ais523: oh 19:14:19 dur :P 19:14:23 i thought that was a wildcard 19:14:26 elliott, now hit any key 19:14:30 [any key] 19:14:32 I still don't know how to make the list of all functions. 19:14:32 not that one! 19:14:38 XD 19:14:53 ais523: same even with --with-owner=elliott --with-group=elliott 19:14:59 hmm, bizarre 19:15:02 I guess it's an Ace bug 19:15:03 zzo38, nm path-to-ELF-file-that-isnt-stripped.o ? 19:15:06 but this possibly isn't a good time to look into it 19:15:17 oh, wait 19:15:19 Vorpal: Not what I meant 19:15:21 ais523: does perl pass along command line args? 19:15:24 perl ./configure foo bar 19:15:26 to shell scripts 19:15:31 elliott: I don't know, but it should be easy enough to check 19:15:37 I meant in Haskell, like [a -> b] 19:15:44 elliott: yes, it does 19:15:46 hmm, yes 19:15:47 darn 19:15:52 that's not the problem then 19:15:58 oh 19:15:59 DURRR 19:16:02 what? 19:16:07 def run_configure(*args, **kwargs): 19:16:07 global configure 19:16:07 prefix = kwargs['prefix'] 19:16:07 if configure == 'Makefile.PL': 19:16:07 run_silent('perl', configure, 'INSTALL_BASE=' + prefix) 19:16:07 else: 19:16:09 run_silent('perl', './' + configure, '--prefix=' + prefix) 19:16:13 noticable lack of ACTUALLY USING THE ARGUMENTS 19:16:15 yep 19:16:18 yeah 19:16:23 how did that slip past m 19:16:23 e 19:16:35 zzo38: just enumerate all possible files, in length-then-asciibetical order 19:16:43 and discard the ones that don't describe exactly one function 19:16:46 then remove duplicates 19:16:52 configure: error: test for group elliott failed 19:16:52 lol 19:16:56 ok elliott:users it is 19:17:08 [elliott@dinky inst]$ time ./inst file:///home/elliott/inst/acehack-3.6.0alpha.tar.gz --with-owner=elliott --with-group=users 19:17:09 * Downloading acehack 3.6.0alpha... 19:17:09 ######################################################################## 100.0% 19:17:09 * Configuring acehack 3.6.0alpha... 19:17:09 * Building acehack 3.6.0alpha... 19:17:10 elliott, I bet it will install to /var too 19:17:10 woo! 19:17:17 Vorpal: ugh 19:17:22 ais523: does it go outside --prefix 19:17:24 elliott, normal nethack would 19:17:26 ais523: Files? It isn't files. 19:17:34 --localstatedir=DIR modifiable single-machine data [PREFIX/var] 19:17:39 phew 19:17:39 elliott: not unless it's buggy 19:17:39 ais523, ah nice 19:18:01 zzo38: but a file can describe a function; and it's easier to enumerate files, then to enumerate functions 19:18:19 elliott, btw I would switch cfunge to tup if only where was a nice configuring system that fit seamlessly with tup 19:18:24 and no not kconfig 19:18:36 elliott: I'm reasonably sure it doesn't go outside the prefix, as I've installed it as non-root before 19:18:38 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 to inside my home dir 19:18:49 Vorpal: yeah well i've considered working on something like that 19:18:53 Vorpal: but it should still be kconfig-based 19:18:54 as in the format 19:19:09 [elliott@dinky inst-work-1_vxz8]$ ls 19:19:09 acehack-3.6.0alpha.tar build.log tree 19:19:09 [elliott@dinky inst-work-1_vxz8]$ ls tree 19:19:09 acehack 19:19:09 this is what it looks like in the work dirs, btw 19:19:12 ais523: yay, it failed 19:19:20 make[1]: *** No rule to make target `rumors.c', needed by `rumors.o'. Stop. 19:19:34 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 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 elliott: I wonder why /that/ one? it's not the first to be compiled 19:19:52 or fuck linux, the point is, it differs 19:19:54 Vorpal: autoconf actually works for this with tup :p 19:20:10 zzo38: it's probably a bad idea 19:20:17 elliott, but I haven't seen any guide to how to make autoconf fit with tup 19:20:21 there are an infinite number of possibilities 19:20:24 Vorpal: pikhq_ did it 19:20:30 ais523: http://sprunge.us/DcHH 19:20:33 (short) 19:20:37 ais523: I am using only finite types, though. 19:20:38 pikhq_, got a link to details on how to fit autoconf with tup? 19:20:40 Vorpal: don't see autoconf as a magic black box; learn how it works 19:20:48 ais523, that sounds like a lot of work 19:20:51 zzo38: oh, in that case, it's finite, just incredibly large 19:20:51 And only functions that halt. 19:20:56 Vorpal: but it's the only way to use it correctly 19:21:13 elliott: it's as if there's a file missing from the tarball 19:21:20 let me make sure it's in the repo 19:21:22 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 ais523: possible, darcs was a bit funny about it 19:21:25 Yes, I think for (x -> y) it will be $y^x$ so yes it will be large 19:21:28 I'll re-check out 19:21:49 yep, it's in the repo all right 19:22:35 elliott: fhpxref! 19:22:43 perhaps something autocorrected "rumors.c" to "rumours.c"? 19:23:01 ais523: ok, it's going again 19:23:06 elliott: so, uh, wasn't there some sort of Homestuck IRC channel? 19:23:12 ah, my acehack tarball is bigger now 19:23:15 that's reassuring 19:23:35 tswett: I would put the probability of that at somewhere around p=9. 19:23:37 Out of 1. 19:24:18 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 tswett: Yes. What's your PayPal. 19:24:51 elliott: read the bet again 19:24:54 Since your net gain is (-1)*9 + (-1000000)*(-8) = 7999991, if I calculate correctly. 19:25:00 ais523: I know what the bet says. 19:25:02 oh, right 19:25:16 -!- sllide has joined. 19:25:23 [elliott@dinky inst]$ time ./inst file:///home/elliott/inst/acehack-3.6.0alpha.tar.gz --with-owner=elliott --with-group=users 19:25:23 * Downloading acehack 3.6.0alpha... 19:25:23 ######################################################################## 100.0% 19:25:23 * Configuring acehack 3.6.0alpha... 19:25:23 * Building acehack 3.6.0alpha... 19:25:23 what a bizarre way for probabilities to work 19:25:24 * Installing acehack 3.6.0alpha... 19:25:26 Password: 19:25:28 * Installed acehack 3.6.0alpha. 19:25:30 real2m23.732s 19:25:31 yay 19:25:32 user2m7.545s 19:25:34 sys0m7.546s 19:25:36 [elliott@dinky inst]$ ls opt/acehack-3.6.0alpha 19:25:38 2 minutes for a full rebuild isn't bad 19:25:38 acehackdir bin 19:25:42 ais523: so the answer is "yep, inst does acehack, given a system with the right groups" 19:25:42 Well, 9 is a bizarre probability. 19:25:50 ais523: hold on, we haven't made sure it works yet 19:25:55 ais523: also, wtf kind of dirname is acehackdir? 19:26:00 that doesn't fit in any filesystem standard 19:26:04 also, "acehack's configure file creates a new directory directly under /usr" 19:26:16 ais523: yes, that's a good bug title 19:26:17 * ais523 mentally yells at the SLASH'EM devs 19:26:47 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 I need to do proper moving of files to the right place 19:26:55 you mean /run 19:26:55 elliott: do you happen to remember the server this channel was on? 19:27:02 What am I kidding. I can find it as long as it was mentioned in here. 19:27:04 Ever. 19:27:05 elliott: there is no /run 19:27:09 ais523: you are wrong 19:27:14 really? 19:27:22 ais523: recently accepted addition, replacing /var/run 19:27:26 $ ls /run 19:27:27 as well as some other parts of /var I think 19:27:27 ls: cannot access /run: No such file or directory 19:27:29 ah, interesting 19:27:32 ais523: it's in latest ubuntu 19:27:34 and debian 19:27:35 and arch 19:27:37 and everything 19:27:37 also, "acehack's configure file creates a new directory directly under /usr" <--- .... what? 19:27:42 so I'd need to have a fallback 19:27:43 ais523, ever heard of /etc? 19:27:44 Vorpal: it's a bug, OK? 19:27:51 and no, /etc is not the right place to put it either 19:27:52 ais523, ah 19:28:08 ais523: Vorpal: http://i.imgur.com/qguK0.png 19:28:23 that's what it's meant to look like, at least 19:28:25 ais523: recently accepted addition, replacing /var/run <-- well, that is new. is it FHS? 19:28:29 Vorpal: yes 19:28:34 well 19:28:36 to be published 19:28:39 elliott, when did that happen. None of my systems have it 19:28:47 Vorpal: recently 19:28:53 this year 19:29:10 ais523: cool, it's a full moon 19:29:14 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 thanks acehack 19:29:24 Vorpal: no, it does make sense 19:29:34 elliott, yes but not wrt my partitions 19:29:34 Vorpal: what doesn't make sense is /var containing both volatile and non-volatile data 19:29:34 elliott: lucky! 19:29:47 Vorpal: see http://wiki.debian.org/ReleaseGoals/RunDirectory 19:29:52 elliott, / is on an SSD, /var is not 19:29:55 Vorpal: further evidence is that /var is on a different filesystem to /var/run on this system 19:30:08 ais523, oh, tmpfs? 19:30:13 makes sense I guess 19:30:25 yep 19:30:25 since it is mostly pid files and sockets 19:30:26 Vorpal: run on /run type tmpfs (rw,nosuid,nodev,relatime,size=10240k,mode=755) 19:30:30 /run _is_ a tmpfs 19:30:42 elliott, right 19:30:46 that works then 19:31:04 ais523: I can confirm that AceHack works 19:31:17 yay 19:31:40 elliott, fully? Does saving and exiting work? 19:31:54 elliott, does score file work if you die? 19:32:05 (easier to check than ascending!) 19:32:06 Vorpal: it tries to write an insurance lockfile as soon as you start playing 19:32:11 and that goes to the same place as save files 19:32:14 Vorpal: I'm dying now 19:32:18 so it'd be shocking if one worked but not the other 19:32:19 I prayed a few times 19:32:24 elliott, hah 19:32:41 ais523, well, it is quite possible. Disk full for example 19:32:49 Vorpal: and that's inst's fault how? 19:32:52 ais523, no 19:32:56 but I meant in general 19:33:16 wow, my god sends the shittiest death threats 19:33:24 oh? 19:33:37 well i've currently outrun it for like a hundred turns :P 19:33:47 what is it? 19:33:51 elliott, no disintegration beam? 19:34:00 the couatl of amaterasu omikami 19:34:05 btw, once you get a negative prayer effect, you'll get nothing but negatives until you atone 19:34:07 elliott, sam? 19:34:08 * elliott prays again with 1 hp for shits and giggles 19:34:09 ah, right 19:34:22 oh well, i died 19:34:40 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 elliott, sam? 19:35:02 hi 19:35:06 ... 19:35:10 elliott, I asked if you played sam 19:35:13 Vorpal: no, it's in vanilla too 19:35:18 ais523, heh 19:35:23 the timeout's on positive effects 19:35:23 Vorpal: yes, I just accepted the defaults 19:35:28 ah I see 19:35:31 elliott: the defaults are random each time 19:35:34 elliott, did the score work if you look at it? 19:35:54 how do you check scores without playing again? 19:36:03 good question, I never did 19:36:09 elliott: there's a scores option in the main menu 19:36:15 ah, thanks 19:36:20 yep 19:36:40 eventually, I'll make the game return to the main menu after you die or win 19:36:46 what distros use systemd btw? 19:36:47 probably via self-exec() 19:36:47 ais523: I think you should probably default to something else if games doesn't exist 19:36:53 elliott: so do I, but I'm not sure what 19:37:01 ais523: root? user running ./configure? 19:37:01 root is a security risk 19:37:04 ais523, self-exec()... Won't that mess with the sgid? 19:37:08 user running configure might make sense 19:37:09 (probably latter) 19:37:17 Vorpal: fedora 19:37:19 and i think suse 19:37:21 so, nobody 19:37:30 elliott, right, so two horrible distros 19:37:35 Vorpal: I don't see why not; you can exec an sgid file even if you already have group perms 19:37:37 well, linus uses fedora :) 19:37:43 and even if you couldn't, you can just drop them first 19:38:11 *you could just drop them first 19:38:16 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 incidentally, I think inst could be legitimately useful if it spit out a package rather than doing the installation immediately 19:38:35 elliott, I thought he switched some time ago? Might misremember 19:38:40 Vorpal: real gid, yes; I don't think that's used for anything, though 19:38:41 it'd be like checkinstall, except not terrible 19:39:47 have i noticed that monqy is here yet 19:39:49 because hi monqy 19:39:57 elliott, I think it is quite useful already. I tend to install stuff I install manually to ~/local//package-name// 19:40:30 well, it's useful :) but it doesn't handle the failure case much 19:40:31 elliott, you did way above 19:40:41 when it works, it works brilliantly 19:40:59 * pikhq_ tends to install things in ~/local/stow/packagename-version/ 19:41:13 pikhq_, what about tup + autoconf. I never saw a reply to my question about that 19:41:20 Vorpal: What about it? 19:41:24 stow: because I want _two_ package managers in my life 19:41:38 pikhq_, how is it done. I'm no autoconf wizard, not do I feel like becoming one just for that,. 19:41:40 s/,// 19:41:49 Vorpal: hmm, now i'm wondering if the configuration management system could be a build system too :) 19:41:50 elliott: I'm also currently using shell scripts to build. So, more like 1. 19:41:55 there's dependencies, and constraint solving, and configuration... 19:41:57 elliott, stow being? 19:42:06 wow that was blindingly fast 19:42:07 Vorpal: gnu stow 19:42:10 I just sent around 100 emails in a few seconds 19:42:12 Vorpal: It's actually really, really simple. You have autoconf replace variables in a Tup file of some sort. 19:42:13 as referenced at * pikhq_ tends to install things in ~/local/stow/packagename-version/ 19:42:26 ais523, you started spamming? 19:42:37 Vorpal: no, although I think the module I'm using was designed for spambots 19:42:41 I'm sending personalised receipts 19:42:46 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 for submissions 19:42:49 https://en.wikipedia.org/wiki/GNU_Stow <-- "this page has been deleted", fuck you 19:43:25 Vorpal: the site describes it 19:43:31 elliott, right 19:43:38 Vorpal: it basically merges a bunch of DESTDIR installs into a single tree 19:43:41 with links 19:43:56 Vorpal: It's actually really, really simple. You have autoconf replace variables in a Tup file of some sort. <-- oh okay 19:44:02 (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 pikhq_, what about any config.h or such? 19:44:16 I wrote an autoconf script for jettyplay 19:44:26 ais523, what is jettyplay? 19:44:27 so that it would be easily picked up by autobuildy sytems 19:44:32 Vorpal: GUI ttyrec player 19:44:34 written in Java 19:44:34 ais523: tarball link plz 19:44:37 hm I see 19:44:47 elliott: I don't think I have online tarballs of it 19:44:50 just jar files 19:44:51 darn 19:44:58 it was basically just written for debhelper 19:45:02 heh 19:45:14 oh, i might as well ask - 19:45:26 what is debhelper? Another one of their automated package construction tools? 19:45:29 Vorpal: yes 19:45:34 it's debian's main package construction tool 19:45:37 i believe 19:45:41 Vorpal: There's some command to tell autoconf to do the config.h substitution. 19:45:46 elliott: I can nc you the tarball that got produced when I did the local equivalent of apt-get source 19:45:51 if you can open a port inbound 19:45:59 ais523: umm, maybe, but not this second 19:46:02 fair enough 19:46:14 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 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 pikhq_, hm as long as it works with tup 19:46:39 Vorpal: I know how to write extensible software :) 19:46:44 Vorpal: Not as nicely as it *could*, but it does work. 19:47:05 elliott: 7z is close, but not *quite* there. 19:47:12 It doesn't handle tarbombs. 19:47:26 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 You can use the l option of 7z to display the list 19:47:41 you can handle tarbombs automatically by untarring in an empty directory, then removing one level of directory structure if necessary 19:47:48 ais523: that's the idea 19:47:55 zzo38: Not helpful if you want it to be automatic. 19:47:58 I suppose I could just do tar -> unzip -> unrar 19:48:02 OK 19:48:05 so you can do the tarbomb protection and unified unarchiver separately 19:48:05 tar detects compression, after all 19:48:12 elliott, pretty sure 7z handles zip and rar as well as tar.gz 19:48:13 elliott: really? 19:48:21 ais523: yep, "tar xf foo.tar.blah" works just fine 19:48:22 I thought you had to give an appropriate option character 19:48:23 ais523: GNU tar and Busybox tar do, at least. 19:48:24 you're welcome 19:48:28 good to know 19:48:31 elliott, actually 7z might just unpack the .gz level of a tar.gz, not the tar level as well 19:48:38 elliott, I know the windows 7-zip does that 19:48:39 7z is so windowsy :( 19:48:42 I'll still add the z because my tab-complete likes it, though 19:48:46 elliott, there is that yes 19:48:55 Yes, 7z does just unpack the .gz level 19:49:00 You have to unpack the .tar separately 19:49:06 That's moronic. 19:49:08 I have the command-line 7z 19:49:09 yes 19:49:21 hmm, what about, say, if there's a .jar in a .zip 19:49:26 you don't want to unpack two levels then 19:49:36 You have to unpack all levels separately. 19:49:36 ais523: That itself is pretty moronic. :) 19:49:39 indeed, but tar.gz is quite a special case 19:49:44 I'd say, stop unpacking as soon as you see any files that aren't compressed 19:49:50 even if there are compressed files in the directory too 19:49:51 And I like it unpacking all levels separately I prefer this way. 19:49:54 what about .gz.tar? 19:49:55 pikhq_, not really, if you want to distribute a collection of .jars as one file, how would you do that 19:50:02 elliott: my suggestion handles .gz.tar 19:50:05 Although it could be an option to unpakc multiple levels maybe there should be that one. 19:50:08 elliott, what about anything packed by Xilinx? 19:50:16 ais523: are we talking about the same .gz.tar? 19:50:22 Vorpal: from my experience with Xilinx, it's probably insane 19:50:27 ais523, yes 19:50:28 elliott: gzip each file individually, then tarball the result? 19:50:31 ais523: yep 19:50:35 you'd see that /all/ the files are compressed/archived 19:50:41 so you'd decompressarchive them all one level 19:50:46 if there's a mix, you don't decompressarchive any of them 19:51:03 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 it's basically a heuristic for detecting whether the files are meant to stay compressed or not 19:51:10 Vorpal: that's impressive 19:51:15 I think it should unpack only one level by default, but have an option to select how many levels you want 19:51:18 ais523, might misremember the .rar level, could have been another tar 19:51:21 or something 19:51:28 Vorpal: hmm, where should I put the source directories for arch packages I create myself? 19:51:34 I just created a haskell-groom/ dir with cabal2arch 19:51:36 elliott: /usr/src? 19:51:40 but am not sure where to put it for permanent storage 19:51:43 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 19:51:44 ais523: plausible 19:51:56 elliott, hm? ~/src/system/foo/PKGBUILD is what I use 19:52:01 elliott, but that is my system 19:52:06 elliott, or what do you mean 19:52:10 was just wondering if there was a standard location 19:52:18 elliott, if you find one, tell me 19:52:25 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 elliott, doubtful, abs is updated by rsync 19:52:39 jettyplay-0.1~alpha1/src/jettyplay/InputStreamableFileContentsWrapper.java 19:52:48 ah, the joys of Java 19:52:58 ais523, what a horribly long class name 19:53:09 my homedir uses a reasonably simple and consistent filing system 19:53:09 just to help me find things quickly 19:53:12 it's about "what will ais523 remember" more than anything else 19:53:25 yeah I do the same, modulo person who is to remember 19:53:29 Vorpal: it's a wrapper around FileContents so that it implements InputStreamable 19:53:46 I'm not entirely sure that it could be easily shortened and still describe what it does that accurately 19:53:46 except I end up with lot of temporary crap in ~ that I forget to remove 19:53:59 Vorpal: also, what AUR helper do you use, if any 19:54:01 like whatever.mp4 from youtube-dl and so on 19:54:13 except I end up with lot of temporary crap in ~ that I forget to remove 19:54:17 this is what my hierarchy-free system solved 19:54:22 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 heh? 19:54:32 well, I accidentally deleted all the files in ~ a while ago 19:54:34 elliott, yaourt. I know there are more modern ones. But don't fix what isn't broken. 19:54:34 but didn't lose much 19:54:39 yaourt is so broken :P 19:54:46 (I didn't delete any of the /directories/; it was a non-recursive rm * in ~) 19:54:54 elliott, WFM. YMMV 19:55:10 elliott, anyway I use grub 1 because I don't fix what isn't broken 19:55:19 besides on my setup it would be risky to switch 19:55:19 --arch user 19:55:28 so, conclusions: elliott is trying out Arch, is annoyed at its package management system 19:55:31 both my laptop and my desktop use somewhat complicated grub setups 19:55:37 my laptop because dm-crypt 19:55:41 my desktop because mdraid 19:55:43 ais523: more than trying 19:55:48 settled on? 19:55:53 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 elliott, heh 19:56:11 you move things from Downloads to the appropriate Keep so that they don't get mercilessly wiped out 19:56:18 it's pretty good at forcing you to decide what to do with a file 19:56:29 elliott: I keep both Downloads and Documents relatively clean 19:56:30 and no files other than config and the like go in ~/ 19:56:42 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 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 ~/other is a mess 19:57:03 hmm, is there a way to get yaourt to use the PKGBUILD in a current directory rather than looking at aur... :) 19:57:04 I create a new top-level directory whenever I have something that can't reasonably be classified into the existing ones 19:57:10 Vorpal: you should try ~/keep :P 19:57:13 I can assert it's THE BEST. 19:57:15 if something ends up important enough, it gets a top-level directory of its own 19:57:24 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 just makepkg -c 19:57:32 Vorpal: yes, but I need to install the deps 19:57:38 elliott, ah 19:57:39 elliott: do you download to /tmp by default? because I do, and it saves a lot of trouble about download clutter 19:57:41 Vorpal: if I do it explicitly, it'll count as an explicit install 19:57:54 I'd rather keep the explicit install list only be things I actually wanted to install as a top-level goal 19:57:59 elliott, then sudo pacman -U foo.whatever.is.the.current.compression.format 19:58:00 hmm... maybe makepkg -s will do it 19:58:08 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 elliott, --asdeps? 19:58:11 nope, it's an AUR dependency 19:58:19 hm 19:58:19 Vorpal: oh, that exists? 19:58:19 someone sad my name while i was gone (i was gone) 19:58:20 thanks 19:58:25 elliott, for pacman, not sure for yaourt 19:58:26 (((bacck now))))) 19:58:34 )hi( 19:58:35 elliott, might be asdep too, check exact spelling 19:58:52 hi monqy 19:59:06 elliott, upload any generally useful PKGBUILD you create to AUR. 19:59:09 monqy: yaourt -S noidentd-git... do you DARE............. 19:59:13 Vorpal: ALREADY DONE 19:59:23 Vorpal: but this one is just an auto-generated newer version of a haskell lib 19:59:28 0 creative input from me at all 19:59:29 elliott, I will update the ick one tomorrow unless something unexpected happens 19:59:31 I can't replace the AUR evrsion 19:59:36 s/ev/ve/ 19:59:44 elliott, flag the existing one as outdated 19:59:51 planning to 20:00:08 does that notify the maintainers? 20:00:13 not sure how that works, since it's maintained by the arch-haskell group 20:00:16 im bad at dareing... 20:00:18 elliott, can be done for normal packages from the front page btw, search for the package and mark it 20:00:27 elliott, and it notifies by email iirc 20:00:41 monqy: do you know how whenever you connect to freenode it waits for a few seconds before giving the motd....... 20:00:45 elliott, and no idea if it is maintained by a group 20:00:53 monqy: do you know how that evil ~ is infesting the start of your username in whois......... 20:00:55 elliott, I would assume it does, otherwise what use would it be 20:00:56 oh yeah and then it puts a squiggle on my username yeah that 20:01:06 elliott, I wasn't even aware a group could maintain an AUR package 20:01:10 monqy: noidentd.... solves this...... with elliott hird quality code 20:01:13 Vorpal: it's a separate team account 20:01:17 teMPTING 20:01:21 elliott, hm. No idea how that works 20:01:26 monqy: only one ... config option... 20:01:34 rc.d....... support........... 20:01:36 but before i try it: i amg oing to get aurget (unlesss it's: bad) 20:01:40 elliott, identd thingy won't work because of NAT 20:01:43 for me at least 20:01:49 monqy: i dunno it... felt kinda unreliable to me 20:01:51 that might be my bad impressions 20:01:52 oh 20:01:56 i have trust issues with software 20:01:57 is yaourt better 20:01:57 by all means try it 20:02:03 it was certainly sleek-feeling 20:02:08 because i already have yaourt so 20:02:10 Vorpal: i am sure monqy has the power... of nat..................... or something 20:03:17 the problem with these aur helpers is that they're so obviously thin wrappers over other tools 20:03:22 they feel so shoddy :p 20:03:31 or not so thin wrappers in the case of yaourt 20:03:36 thick wrappers 20:05:07 uh 20:05:55 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 monqy: have you...enjoyed....the magiceke., 20:08:42 Vorpal: I hate you, now I feel like having a go at writing that configuration manager. :/ 20:08:48 wow 20:09:00 12 hours in, and my latest and greatest markov model generator 20:09:00 elliott, err, what did I say? 20:09:02 i've been letting yaourt do its thing over there becase ut's slow and forgot about it 20:09:05 remembering now: 20:09:06 has not even finished the first 4 datasets.... 20:09:13 Vorpal: YOU ASKED ME QUESTIONS 20:09:16 elliott, oh okay 20:09:18 CakeProphet: this is because perl sucks 20:09:38 elliott: I'm not really sure what's so different about this one to make it this much slower... 20:09:46 the regex is even precompiled this time. :P 20:10:10 monqy: (the config file... is /etc/conf.d/noidentd...) 20:10:18 (the code... is https://github.com/ehird/noidentd/blob/master/noidentd.c...) 20:10:34 ehird: noitdentd blog master 20:10:45 thankey ou 20:11:25 instaled it (loeking at config nwo) 20:11:39 I wonder if I could write a C program to do this correctly 20:11:43 before this script finishes 20:11:46 and then that program 20:11:48 so i guess i put monqy in there eh 20:11:50 finishes before this script finishes. 20:12:20 do i do anything else or just let it do its magic now 20:12:25 next time i connect, I mean 20:12:26 monqy: well you are "swell" 20:12:31 oh swell 20:12:34 so you would put swell in there toget the same thing now 20:12:35 but monqy 20:12:36 is fine too 20:12:39 and you would then be monqy 20:12:41 pick your favourite... 20:12:41 hm 20:12:43 CakeProphet, what sort of regex? Any backrefs? 20:12:51 i'll be swell 20:12:53 or i could change it 20:12:56 i used to be chap 20:13:04 oh i thought swell was your name or something 20:13:04 there was another one i wanted to try but i forget it 20:13:13 ok this fan is worrying m 20:13:13 CakeProphet, http://swtch.com/~rsc/regexp/regexp1.html 20:13:14 e 20:13:16 swell is a good name but not mine 20:13:17 it starts like full blast 20:13:21 then half a second later cuts immediately 20:13:24 linux what are you doing 20:13:44 oh, ghc is hogging cpu 20:13:53 Vorpal: no it's just a character class followed by a + 20:13:54 Vorpal: he's using perl so he can hardly just switch regexp engines 20:14:15 Vorpal: should be linear time, with single words (thus very small n's) 20:14:16 elliott, you could implement a different regexp engine as a perl package! 20:14:22 elliott, thought that isn't what I meant. 20:14:26 monqy: anyway once you save that you need to start it 20:14:34 elliott, what I meant with that link was: "maybe this would explain your issue" 20:14:36 monqy: add @noidentd to your DAEMONS array is the best idea 20:14:44 and "sudo rc.d start noidentd" until reboot........ 20:14:46 that starts it 20:14:51 (it uses no resources ever) 20:14:56 (constant memory and time always) 20:15:00 well the main difference is that I switched from 20:15:14 $word =~ $not_this_character_class 20:15:15 to 20:15:19 startd 20:15:29 $word =~ $this_character_class_one_or_more_times 20:15:48 monqy: and then......... 20:15:51 which I would think should be exactly the same or maybe a bit faster? 20:15:52 monqy: reconeocneocetecte 20:15:55 CakeProphet, why even use perl for this... 20:15:55 righte.. 20:15:58 notice faster connect... happier life 20:16:01 happier world 20:16:03 happier oisdjf 20:16:06 Vorpal: not sure, it's what I started with. :P 20:16:12 -!- monqy has quit (Quit: hello). 20:16:16 hello monqy 20:16:27 -!- monqy has joined. 20:16:31 bye monqy oh 20:16:33 it didn't work 20:16:35 crys 20:16:37 monqy: do you have a fierierweall 20:16:45 perhaps 20:16:53 monqy: can you... forward port 113....... 20:16:53 probably 20:17:05 i;ll try 20:18:33 maybe I should rewrite this part in Haskell or something, which would force me to not use a horrible format. 20:18:38 for storing the data. 20:18:47 CakeProphet: haskell n-gram (c) me 20:18:59 although mine is about ~999999% more advanced so GO AHEAD I GUESS 20:19:10 oh no i actually can't because someone did password changeing and did not tell me 20:19:25 monqy: that person is...mean tell them of,e 20:19:35 tell them, stop change paswioerd 20:19:41 elliott: it is? 20:19:53 the best part is he probably forgot the new password too 20:19:55 so we have to reset it 20:19:56 again 20:19:59 crys in hole 20:20:04 I thought yours wasn't quite so advanced, or is this a new thing? 20:20:05 monqy, ask him to not change the password? 20:20:11 monqy, or change it before he does 20:20:46 monqy: im sit in hole 20:20:50 oh wait I bet I know why this is going slower. 20:20:51 creying in symphony 20:20:55 there's a reverse lookbehind. 20:21:02 CakeProphet, why did you do that 20:21:10 CakeProphet, of course that is going to be slow 20:21:14 cake "clever" prophet 20:21:23 cake "just woke up" prophet :P 20:21:33 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 CakeProphet, you didn't code it when you just woke up 20:21:39 so duh 20:21:48 it tries very hard to use no resources :P 20:21:52 uh, well, in English I want to avoid 's at the end of words 20:22:01 Vorpal: I wasn't thinking about efficiency at the time. :P 20:22:05 elliott, 50 bytes? Including libc? 20:22:11 Vorpal: that's shared 20:22:13 Vorpal: ISN'T PREMATURE OPTIMIZATION BAD OR SOMETHING? 20:22:20 DONALD KUHNUTH? 20:22:30 valgrind said like 30 bytes still reachable on exit, anyway :P 20:22:34 so add like twenty on that because 20:22:37 elliott, right 20:22:43 well it's actually more than that, it's at least... 20:22:53 so say, a few kB 20:23:00 ...at least 240 because of the buffers 20:23:08 plus ten times struct pollfd 20:23:19 plus like six pointer-sized values :P 20:23:25 but yeah, barely anything 20:23:26 elliott, plus some hidden buffers in libc. 20:23:27 I'm not really sure how to restrict words that end with 's without making it a negative lookbehind 20:23:31 but it's probably possible. 20:23:32 Vorpal: uh, doubt it 20:23:36 elliott, hm okay 20:23:38 Vorpal: for stdio i guess 20:23:41 yep 20:23:46 Vorpal: but i'm using berkeley sockets/poll/recv/send 20:23:48 so not for the sockets 20:23:57 elliott, but stdin/stdout will be open and initialised 20:24:01 and have buffers 20:24:07 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 even if you don't use them 20:24:12 maybe i should close stdio, i don't use them after startup 20:24:20 i could rewrite that stuff to use write() :) 20:24:31 elliott, maybe you should use newlib 20:24:42 musl :p 20:25:05 elliott, bare metal. as a TSR hidden from linux. Somehow 20:25:19 what's that above the kernel debugging thing 20:25:20 SMI? 20:25:22 guys what would happen if GNU merged with Donald Knuth 20:25:22 (note: above statement made no sense) 20:25:27 or below the kernel i guess 20:25:32 and crerates the unstopeaable DONALD GNUTH 20:25:33 yeah I think SMM 20:25:35 elliott, hm... yeah System Management Mode 20:27:17 CakeProphet: let 's do its thing 20:27:21 CakeProphet: 's is great 20:27:36 `macro 20:27:41 UH 20:27:55 `macro 20:27:59 CESIUM'S 20:28:02 yes good 20:28:29 uh cesium's 20:30:09 -!- oerjan has joined. 20:30:26 So what does macro do? 20:30:28 `macro 20:30:29 `macro 20:30:30 `macro 20:30:36 Mmacro: : commitBuffer: invalid argument (Invalid or incomplete multibyte or wide character) 20:30:36 JFK'S 20:30:43 `wacro 20:30:44 ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: wacro: not found 20:30:45 UPTON'S 20:31:22 Mmacro: : commitBuffer: invalid argument (Invalid or incomplete multibyte or wide character) 20:31:23 good word 20:31:34 HEY OERJAN CAN I INTEREST YOU IN- dammit you already have an identd. 20:31:43 fancy that. 20:31:54 oerjan that is immoral. 20:32:02 wat 20:32:08 immoral. 20:32:15 Patriots use noidentd. 20:33:03 and a bouncer and a cloak, i presume 20:33:12 *MWAHAHAHA* 20:33:51 NO BOUNCER HERE 20:33:54 https://github.com/ehird/noidentd/blob/master/noidentd.c 20:33:55 NOIDENTD 20:33:58 SOFTWARE OF PATRIOTS 20:34:13 oerjan, was that a dagger and cloak pun? 20:35:26 -!- azaq23 has quit (Quit: Leaving.). 20:37:02 derpa derpa 20:37:05 ...no. 20:37:37 oerjan, IT COULD HAVE BEEN! 20:37:38 olsner: I have a lbirary called derpa 20:37:43 DARPA 20:37:49 https://github.com/copumpkin/derpa 20:38:05 copumpkin, no that is a library 20:38:09 is it a library if nobody uses it OH SNAEPEPPEPEPE 20:38:11 derp 20:38:13 SPNEAPNEPNWEPFWEFPEPF 20:38:13 not a lbirary as you stated above 20:38:14 EPRJOETJG 20:38:14 H 20:38:22 copumpkin: that is awesome 20:38:26 the joke is nobody uses agda 20:38:26 eprjoetjgh 20:38:29 thank you! 20:38:44 guys what would happen if GNU merged with Donald Knuth 20:38:50 dfgd 20:38:50 gnothing good, i predict 20:38:53 copumpkin: or did you just upload it now because I mentioned it? 20:39:04 olsner: nope, check the dates on it 20:39:09 * oerjan declares the logs too long to read today 20:39:46 copumpkin: I would need, like, proof that it was called derpa before today 20:39:53 olsner: lol 20:40:06 elliott, I just realised why DDG will never be a success. 20:40:25 proof seems to be slightly lacking though, afaik you just uploaded this half a minute ago 20:40:38 https://github.com/copumpkin 20:40:40 elliott, try saying it as a verb. Very awkward: "ddging" or "duckduckgoing"? 20:41:19 copumpkin updated gist: 1286093 October 14, 2011 20:41:19 There is no largest prime 20:41:20 cutting-edge mathematical research 20:41:29 elliott: STFU 20:41:31 that was difficult :P 20:41:36 the joke is that nobody uses Agda :D 20:41:43 FUCK YOU 20:41:44 * oerjan declares the logs too long to read today <-- but... but... there is AWESOME stuff in it! 20:42:05 nobody uses agda? 20:42:31 There is no largest prime <-- where did copumpkin prove that? 20:42:44 elliott's been stalking me again 20:42:47 https://gist.github.com/1286093 20:42:47 I want to see this front edge of the science of mathematics 20:42:58 copumpkin: no, olsner mentioned derpa's upload time :P 20:43:05 I PROVED YOU INNOCENT 20:43:12 and then went in search for agda-mocking material ofc 20:43:18 :'( 20:43:27 copumpkin, elliott, come on, that proof is huge 20:43:35 elliott: is that gist based on derpa? 20:43:39 yeah copumpkin is stupid go do some booklearning from euclid 20:43:42 Vorpal: it's euclid's proof 20:43:55 it's just that the usual statement of euclid's proof doesn't go into the details 20:44:02 agda forces us to 20:44:06 which is both good and bad, I guess 20:44:09 (afaict it isn't) 20:44:19 it isn't based on derpa, no 20:44:21 copumpkin, well of course, it assumes a human is reading it and can think 20:44:51 burrrrrrn 20:44:54 maybe i should learn agda 20:44:55 Vorpal: well, sure, but it invokes a limited form of the fundamental theorem of arithmetic 20:45:00 that most people don't mention 20:45:02 monqy: then you will become nobody 20:45:08 an exciting prospect 20:45:12 so it's interesting to see what things it actually needs 20:45:47 it's like how most presentations of category theory completely gloss over what equality/equivalence means 20:46:13 copumpkin, because it is in the standard library of maths basically. 20:46:27 there is no /need/ for it when talking to a human 20:46:34 Vorpal: you still need to call standard library functions ;) 20:46:42 you can't just leave them out and hope the compiler figures them out 20:46:46 copumpkin, yes, we do that by saying "=" 20:46:49 that is how we call it 20:46:55 copumpkin: why are you wasting your time 20:46:55 huh? 20:47:11 I mean invoke, not name 20:47:12 copumpkin, or rather, writing "=" and saying "equals" 20:47:45 copumpkin, that is how we invoke them. Example. "5 = 4+1", there, I invoked the standard library of arithmetics. 20:47:55 Vorpal: this is really stupid 20:47:56 yes, you invoked addition by writing addition 20:48:01 elliott, yes. 20:48:04 you wrote the symbol + 20:48:05 congratulationse 20:48:09 copumpkin, exactly what I was saying. :P 20:48:16 where does euclid's proof mention the fundamental theorem of math? 20:48:16 = = + --vorpal 20:48:18 elliott, try saying it as a verb. Very awkward: "ddging" or "duckduckgoing"? <-- just call it "quacking" and a day. 20:48:19 where is this going. why is this going. 20:48:19 arithmetic 20:48:25 it doesn't 20:48:26 oerjan, awesome 20:48:27 `addquote where is this going. why is this going. 20:48:29 698) where is this going. why is this going. 20:48:32 * shachaf likes "the fundamental theorem of math" 20:48:33 people are implicitly invoking it because it doesn't work otherwise 20:48:39 that'd be like me writing x = 4 7 20:48:46 and hoping the compiler can figure out that a + belongs there 20:48:47 698 quotes? wow 20:48:49 I don't know if there was any context, but I hope not. 20:48:54 `quote 697 20:48:57 697) 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 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 oerjan: hey which one in the logs was which :P 20:51:19 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 leaving things implicit increases perceived clarity 20:51:30 copumpkin, ah okay 20:51:32 because it's a one-line proof 20:51:43 elliott: what? 20:51:45 but decreases actual clarity, because you don't know what's actually being used behind the scenes 20:51:56 of course, agda takes it to the other extreme 20:51:57 01:12:38: goDown x <|> goRight x <|> (goUp >>= goNext) 20:51:57 01:16:23: (goRight x >>= goBottom) <|> goUp x 20:52:03 oerjan: which one of those does parents first :P 20:52:22 the former 20:52:28 thx 20:53:09 -!- ive has quit (Ping timeout: 258 seconds). 20:53:43 copumpkin: i presume it is used when you conclude that there is a prime dividing p1...pn+1 20:53:51 yep 20:54:35 that's a pretty trivial induction compared to the full theorem though, i think 20:55:56 *full fundamental theorem 20:56:46 also it's the fundamental theorem of arithmetic, i think, not math. there is also a different fundamental theorem of algebra. 20:57:11 (which says that every non-constant complex polynomial has a root) 20:57:34 and there may be others in other fields 20:58:03 also, one of calculus 20:58:35 `quote fundamental 20:58:37 567) I didn't realise nickel apparently can't be shaped into a screw because of some fundamental feature of dwarven physics. \ 663) 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 `quote 663 20:58:46 663) 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 (that's the one which says essentially that differentiation and integration are opposites) 20:59:31 http://en.wikipedia.org/wiki/Fundamental_theorem has quite a list :P 21:00:08 "fundamental theorem of poker" :P 21:01:49 -!- GreaseMonkey has joined. 21:03:23 oerjan: sigh, infinite loop :( 21:04:38 what, with one of my suggested goNexts? 21:05:04 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 goNext x = goDown x <|> goRight x <|> (goUp x >>= goNext) 21:05:13 where goDown (Node tag (x:xs) :> up) = Just (x :> Branch tag [] xs up) 21:05:13 goDown _ = Nothing 21:05:13 test xx = case goNext xx' of Nothing -> xx'; Just go -> test go 21:05:13 where xx' = test' xx 21:05:14 test' (Text s :> up) = Text "bork bork bork" :> up 21:05:16 test' x = x 21:05:18 test infinite loops here on my document 21:05:35 *Main Text.Groom> test (toCtx (Node (Tag "abc" []) [])) 21:05:35 Node (Tag "abc" []) [] :> Top 21:05:35 *Main Text.Groom> test (toCtx (Node (Tag "abc" []) [Text "x"])) 21:05:35 [hang] 21:05:37 eek. hm. 21:06:51 elliott: bug! 21:07:04 oerjan: 21:07:06 *Main Text.Groom> goNext (Node (Tag "abc" []) [Text "x"] :> Top) 21:07:06 Just (Text "x" :> Branch (Tag "abc" []) [] [] Top) 21:07:06 *Main Text.Groom> goNext (Node (Tag "abc" []) [Text "x"] :> Top) >>= goNext 21:07:06 Just (Text "x" :> Branch (Tag "abc" []) [] [] Top) 21:07:08 bug :) 21:07:20 elliott: will you stop bloody spamming while i'm trying to read :P 21:09:54 elliott: oh i see 21:10:05 yes goNext is wrong when going up 21:11:05 hm 21:11:22 it needs a goRight, which may itself fail 21:11:42 hm 21:11:52 not as simple as (go Up x >>= goRight >>= goNext)? :) 21:11:56 no. 21:12:00 didn't think so :P 21:12:10 oerjan: if it helps I already have 21:12:15 goLeft = moveLeft >=> selectLeft 21:12:15 goRight = moveRight >=> selectRight 21:12:18 where 21:12:22 selectLeft :: Cursor -> Maybe TreeCtx 21:12:22 moveLeft :: TreeCtx -> Maybe Cursor 21:12:34 selectLeft (Branch name (l:ls) rs up) = Just (l :> Branch name ls rs up) 21:12:34 moveLeft (r :> Branch name ls rs up) = Just (Branch name ls (r:rs) up) 21:12:39 and analoguously for right 21:12:53 we need climbRight x = goRight x <|> (goUp x >>= climbRight) 21:12:57 ok 21:13:00 makes sense 21:13:04 hmm, random thought, we have no danes here do we? 21:13:41 (well obviously not, everyone here is finnish, norwegian, swedish or from hexham) 21:14:01 and then goNext x = goDown x <|> climbRight, maybe 21:14:27 *and then goNext x = goDown x <|> climbRight x, maybe 21:14:40 olsner, excuse me there is only one person from Hexham here. 21:14:43 *Main Text.Groom> goNext (Node (Tag "abc" []) [Text "x"] :> Top) 21:14:43 Just (Text "x" :> Branch (Tag "abc" []) [] [] Top) 21:14:43 *Main Text.Groom> goNext (Node (Tag "abc" []) [Text "x"] :> Top) >>= goNext 21:14:43 Nothing 21:14:44 looks good 21:14:47 time to try it on the larger tre 21:14:48 tree 21:14:59 Phantom_Hoover: all of you are the same person!? 21:15:02 yay 21:15:04 oerjan: works :) 21:15:34 i assume climbRight will fail if it reaches the top, which is probably what you want 21:15:50 oerjan: that would correspond to reaching the end of the tree 21:15:55 yeah 21:17:23 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 it feels like the kind of thing you should be able to abstract into a loop only involving the one function 21:18:46 oerjan: maybe forcing goNext is the right thing though :P 21:20:38 -!- pumpkin has joined. 21:22:08 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 could've been a swede from scania? 21:22:59 O_o 21:23:01 oerjan: hm I wonder how you remove nodes this way 21:23:05 I'm trying to remove all text nodes but 21:23:06 -!- copumpkin has quit (Ping timeout: 244 seconds). 21:23:12 test' (Text s :> up) = select{Left,Right} up 21:23:13 both fail 21:23:20 (i.e. yield Nothing as soon as Text is hit) 21:23:45 elliott: oh right a removal tends to leave you on a Cursor in spirit... 21:23:59 which might not have anything either before or after it, or even both 21:24:00 oerjan: oh wait, what we need is goNext for /Cursors/, i think 21:24:09 yeah 21:24:26 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 ok, so moveNext :/ 21:24:36 this is a tricky one 21:24:38 elliott: well actually that's just your moveRight isn't it 21:24:48 I don't think so 21:24:49 or hm 21:24:52 moveRight :: TreeCtx -> Maybe Cursor 21:24:52 moveRight (l :> Branch name ls rs up) = Just (Branch name (l:ls) rs up) 21:24:52 moveRight _ = Nothing 21:24:54 look ma, no ascension 21:25:16 ok so what's needed is 21:25:19 Cursor -> Maybe TreeCtx 21:25:23 so it's actually selectNext 21:25:26 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 hm 21:25:37 selectRight is downwards movement 21:25:51 oerjan: oh so I actually want (TreeCtx -> Cursor), not (TreeCtx -> TreeCtx)? 21:25:56 and _then_ the main loop can to the goNext :: Cursor -> Maybe TreeCtx 21:26:12 misnaming >:E 21:26:14 that's moveNext 21:26:19 ok 21:26:34 goFoo :: TreeCtx -> Maybe TreeCtx -- looks like moveFoo >=> selectFoo at least for left/right 21:26:39 selectFoo :: Cursor -> Maybe TreeCtx 21:26:42 moveFoo :: TreeCtx -> Maybe Cursor 21:26:55 ok so I need to write moveNext 21:27:03 well I think the eqivalent of goDown is just moveRight 21:27:07 erm 21:27:08 selectRight 21:27:11 selectRight (Branch name ls (r:rs) up) = Just (r :> Branch name ls rs up) 21:27:19 elliott: goNext = moveRight >=> selectNext 21:27:37 I agree, I'll define selectNext first though 21:27:54 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 ...oops 21:28:19 oerjan: ? 21:28:25 yes it does, darn 21:28:37 ok i can't figure out selectNext 21:28:42 because I don't know what climbRight should be 21:29:20 i think... 21:29:40 you actually need a moveNext, which just goes to the next _Cursor_ 21:30:08 moveNext :: TreeCtx -> Maybe Cursor -- are you sure you mean this? 21:30:08 moveNext = moveDown <|> climbRight 21:30:31 ok, but what does climbRight look like here :P 21:30:42 *+x /g 21:31:21 wat 21:31:31 climbRight x = moveRight <|> (goUp >>= climbRight) 21:31:34 argh 21:31:40 climbRight x = moveRight x <|> (goUp x >>= climbRight) 21:32:04 oh wait hm 21:32:12 also, there isn't a moveDown. 21:32:12 a moveRight cannot actually fail 21:32:17 there can be though 21:32:23 oerjan: um sure it can 21:32:27 moveRight :: TreeCtx -> Maybe Cursor 21:32:27 moveRight (l :> Branch name ls rs up) = Just (Branch name (l:ls) rs up) 21:32:27 moveRight _ = Nothing 21:32:27 . 21:32:30 consider (l :> Top) 21:32:44 * elliott thinks oerjan has completely muddled up the naming scheme. 21:33:05 oh. but in that case yo don't need to try anything further. 21:33:27 so climbRight = moveRight, simply 21:33:30 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 oerjan: oh, huh 21:33:41 no wait hm 21:33:44 >_< 21:34:00 Top is actually tricky 21:34:39 if it has a non-Tag as its element 21:35:06 oerjan: that can never happen in reality :) 21:35:07 because then there doesn't actually _exist_ a Cursor for inserting it 21:35:09 if that reassures you 21:35:14 there is _always_ a root tag 21:35:22 I would express this in the types if I could think of a non-ugly way to do it 21:35:49 ok in that case moveRight cannot fail for our use case 21:36:06 well the edit part 21:36:34 moveNext = moveDown <|> moveRight 21:36:58 if there isn't a down direction, you're not at the root tag, so the moveRight must succeed 21:37:12 you realise that moveNext can fail? 21:37:16 e.g. being at the root tag 21:37:17 but ko 21:37:33 ok 21:37:33 but you never apply it to the root tag when parents are done first 21:37:42 um 21:37:43 what is moveDown 21:38:00 but you never apply it to the root tag when parents are done first 21:38:04 you apply it to the root tag first thing... 21:39:02 oerjan: if I come back tomorrow will you have the answers :P 21:42:08 moveDown (Node tag children :> up) = Just (Branch tag [] children up) 21:43:06 i think. 21:43:51 elliott: oh hm moveNext cannot fail at the root tag, because it has children. 21:44:02 yeah, I'm gonna sleep on this :P 21:44:03 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 Hello! 22:57:06 -!- nooga has quit (Ping timeout: 252 seconds). 22:57:17 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.