00:00:37 <oklopol> oottelen vastaustasi = i wait for your answer
00:01:00 <AnMaster> how did I end up reading "answer" as "shower"
00:01:13 <oklopol> well i read your shower as showel
00:01:35 <AnMaster> oklopol, at least the edit distance was less there
00:01:35 <uorygl> oklopol: so this makes "kulli kädes oottelen vastaustas" seem like two separate sentences.
00:01:48 <uorygl> Where one of them is just a noun phrase. :P
00:02:14 <oklopol> uorygl: wielding my dick i'm waiting for your answer
00:02:44 <oklopol> but usually you'd say "odottelen vastaustasi pippeli kdess"
00:03:08 <oklopol> the original was a poetic word order, so to speak
00:03:35 <oklopol> (i gave you a third name for penis, you can never have too many)
00:03:44 * uorygl quickly runs through his flash cards again.
00:04:44 <oklopol> i think it's more like a nipple but yeah
00:04:55 <uorygl> So "tit" is definitely right.
00:05:28 <oklopol> ks can be done with other things too, although it's not used much
00:05:33 <uorygl> I'm not doing all that well with these.
00:06:06 <oklopol> have you chosen random words from a dicitonary?
00:06:32 <uorygl> I'm taking content words off of http://fi.wikipedia.org/wiki/Koira
00:07:23 <uorygl> How would you say "the dog bone explodes"?
00:07:34 <AnMaster> * uorygl quickly runs through his flash cards again. <-- why do you speak about memory cards all the time...
00:07:46 <uorygl> AnMaster: because I use them for language learning.
00:08:05 <alise> AnMaster: not flash USB drives
00:08:13 <AnMaster> alise, what does he mean then?
00:08:25 <alise> word in certain language + meaning
00:08:27 <AnMaster> alise, that means compact flash card or such to me
00:08:28 <alise> used for memorising a language
00:08:38 <uorygl> http://en.wikipedia.org/wiki/Flashcard
00:08:45 <oklopol> you have cards with words on both sides
00:08:48 <uorygl> "A flashcard or flash card is any of a set of cards bearing information, as words or numbers, on either or both sides, used in classroom drills or in private study."
00:08:51 <alise> An example for a French student of English learning "enough", which in French is assez (pronunciation given in IPA):
00:08:52 <alise> A: enough, /ɪˈnʌf/
00:08:56 <oklopol> i would've assumed it's flashcard in swedish
00:09:20 <cheater99> can we at least talk klingon or something
00:09:30 <cheater99> all this swedish chef stuff is getting old
00:09:37 <AnMaster> oklopol, I never heard of this concept, and a glosbok is quite different
00:09:40 <uorygl> Finnish isn't Swedish chef stuff.
00:10:00 <uorygl> "Score: 10 of 20 = 50%"
00:10:12 <AnMaster> cheater99, please make a difference between Swedish and Finnish next time
00:10:18 <AnMaster> you managed to insult both sides
00:10:28 <uorygl> Mmkay, "koiran luu räjähtää". "Koiran" is the genitive there, yes?
00:10:54 <uorygl> Do compounds like that always use the genitive like that?
00:11:10 <oklopol> uorygl: the bone of the dog
00:11:36 <oklopol> we use normal genitive with body parts
00:12:04 <alise> "I do not believe that John Wiles has actually provided a proof with integrity, but more a proof checked by friends in the know" --crackpot saying he's proved FLT
00:12:18 <AnMaster> cheater99, ...........................
00:12:57 <cheater99> you can see that i spaced those dots in approximately a quadratic progression
00:13:12 <uorygl> oklopol: when you stick words together without a space in between, what do you do with the first word, case-wise?
00:13:30 <oklopol> uorygl: usually nothing, rarely genitive
00:13:34 <cheater99> and this is very related to the topic of the channel
00:13:34 <AnMaster> cheater99, anyway my answer is: stop trolling
00:13:42 <uorygl> oklopol: so you usually just use the stem?
00:13:57 <oklopol> yes, but koiran luu is not a compound, it's just "the bone of the dog"
00:14:02 <cheater99> AnMaster, i am not trolling - i just found your remark about finnish/swedish pride a bit funny that's all =)
00:14:14 <uorygl> oklopol: can you make compounds with a word in between?
00:14:15 -!- FireFly has quit (Quit: swatted to death).
00:14:24 <AnMaster> cheater99, they are different language families
00:14:56 <cheater99> AnMaster, believe it or not i know that
00:15:35 <oklopol> uorygl: the rules for whether there's a space are rather complicated in general, but for two nouns there's usually no space
00:15:37 -!- BeholdMyGlory has quit (Read error: Connection reset by peer).
00:17:25 <uorygl> So if you really wanted to say "dog bone", it would be... hm, I don't know what the stem of "koira" is. Is it "koira", "koir", or something else?
00:18:05 <oklopol> you never drop anything from "koira"
00:18:17 <oklopol> no wait plural partitive is koiria
00:18:56 <oklopol> if you carved stuff out of bones, you could call one of your products the "koiraluu"
00:19:04 * Sgeo_ finds another way to watch his movie
00:20:15 -!- kar8nga has quit (Remote host closed the connection).
00:20:22 <SgeoN1> It's Megavideo though, which means being interrupted by "hey, you've watched too much video"
00:20:30 <oklopol> also i think koiranluu is a bone you can buy for your dog to eat
00:21:05 <SgeoN1> I think maybe I shouldn't be saying all this stuff in a logged channel
00:21:11 <uorygl> Aiee, why the n/lack of space?
00:21:14 <oklopol> i hate megavideo, it's the best streaming service there is, but also the only limited one
00:21:28 <oklopol> uorygl: that's the rare no-space genitive compound.
00:22:14 <SgeoN1> "best", as in losses enforcement of copyright?
00:23:45 <alise> SgeoN1: dude the authorities are not going to get you for piracy
00:23:52 <alise> chill the fuck out and stop worrying :P
00:24:01 <oklopol> koiraluu will always make sense, either it has some specific meaning or it'll be used in context, koiranluu just usually sounds wrong, except when it happens to have a meaning (like in this case), koiran luu will always make sense, it's just the bone of a dog, it can have a more specialized meaning like in this case "dog bone", but it will always also be usable as a generic the bone of a dog.
00:24:19 <oklopol> that makes sense only if you swap a noun variable where luu and koira are :)
00:24:26 <SgeoN1> My dad instilled a sense of paranoia about that stuff
00:25:10 <SgeoN1> Then again, he's also paranoid about forwarding ports and running servers/hosting games
00:25:23 <uorygl> I guess I should learn how to say stuff like "man".
00:25:47 <SgeoN1> He once made me wipe my HD after I installed a chat seover of some kind
00:26:59 <alise> SgeoN1: Your dad is a fool. Uh, of sorts.
00:27:36 <uorygl> The United States just isn't a good country for Sgeo.
00:28:17 <coppro> alise: Do you know of an X server framework that implements a basic forwarding X server?
00:28:50 <oklopol> uorygl: why would you want to learn finnish?
00:29:07 <uorygl> oklopol: because it's spoken in Scandinavia and it's not Indo-European.
00:29:14 <oklopol> also what did you end up deciding to do with your life?
00:29:22 <uorygl> I still haven't decided.
00:29:37 <oklopol> i guess i was sort of expecting that answer
00:29:43 * uorygl looks up Finnish conjugation.
00:29:55 <uorygl> Kävelen, kävelee... that's enough for now. :P
00:29:59 <alise> uorygl is going to become a professional eliezer yudkowsky fanboy
00:30:06 <oklopol> are you moving to scandinavia, otherwise i might want elaboration on the reason
00:30:09 <alise> uorygl: stop using two spaces after a sentence
00:30:17 <alise> uorygl: it's typewriter legacy
00:30:32 <uorygl> oklopol: I might move there eventually. :P
00:30:53 <oklopol> i don't seem to be able to behave in finnish
00:31:28 <oklopol> uorygl: if you do, please choose math :P
00:31:49 <uorygl> Why? Is there lots of demand for math in Scandinavia?
00:32:26 <oklopol> well no but i would insisting on us meeting (if you learned finnish and therefore moved here), and it would be most useful for me if you were a math enthusiast.
00:32:48 <uorygl> Great. Let's plan to meet... how does May 29, 2014 sound?
00:33:03 <uorygl> Great, I'll add it to my calendar. :P
00:33:03 <alise> oklopol: i will totally meet you earlier
00:33:09 <alise> like in the next couple of years
00:33:10 <oklopol> unfortunately i don't really have anything to store dates in
00:33:15 <alise> you'd be so interesting.
00:33:28 <uorygl> I'll have to remind you 30 minutes before and then 5 minutes before.
00:33:32 <oklopol> or maybe i'm not interesting
00:33:40 <oklopol> and you'll be really disappointed
00:33:49 <alise> i want to write a little spreadsheet program
00:34:00 <oklopol> my gf just told me i was really odd a few days ago because i wanted to lick my knee all the time
00:34:30 <alise> wow i am going to do that now
00:34:35 <alise> did it to my clothes but close enough
00:34:57 <uorygl> Let's see, May 29, 2014 is a Thursday.
00:35:58 <oklopol> nah i can probably leave early
00:36:15 <pikhq> You could change jobs by then.
00:36:19 <uorygl> Sure, where at the uni?
00:36:33 <oklopol> where i'm doing my research, turku university
00:36:45 <oklopol> main building, 4th floor of math dep
00:36:56 <oklopol> i'm not sure about room number tho
00:37:37 <oklopol> i guess university of turku is the name but anyway
00:38:37 <uorygl> There, now my calendar contains two events. :P
00:38:42 <uorygl> One of them is in June, the other is in 2014.
00:39:17 <uorygl> I made that appointment in June a few weeks ago.
00:39:26 <AnMaster> oklopol, I feel sorry for your gf
00:39:44 <uorygl> I asked, "How far ahead can I make an appointment?" They said, "As far ahead as you like, I guess."
00:40:04 <uorygl> I should have cackled evilly upon hearing that I had this unlimited power, but instead, I just made an appointment four weeks from that time.
00:41:48 <uorygl> I should have also made an appointment eight weeks from that time, as I knew when I would be available.
00:41:50 <pikhq> "4 minutes after the End"
00:41:52 <oklopol> CAN THE NUMBER OF SECONDS INTO THE SPECIFIED MINUTE BE IRRATIONAL
00:42:19 <uorygl> The number of minutes into the specified hour must be a non-integer dyadic fraction.
00:44:05 <uorygl> Mies kävelee. That's easy enough. And, uh...
00:44:20 <AnMaster> uorygl, you should have made an appointment in year 31827372 or such
00:44:36 <uorygl> The campus recreation center.
00:44:53 <uorygl> To create a new exercise plan.
00:45:40 <uorygl> Darn, I could have answered whatever I wanted. I should have said, "To reconsider the allocation of recreation among the students to take into account the fact that nobody really *needs* recreation".
00:46:42 <oklopol> what do exercise and recreation have to do with each other
00:46:56 <uorygl> Now I wonder where I'm walking to.
00:46:58 <oklopol> recreational is a branch of mathematics
00:47:00 <uorygl> oklopol: don't ask me.
00:47:12 <alise> uorygl: you are forced to exercise or something? :p
00:47:21 <oklopol> ooh, you're gonna need illative
00:47:49 <uorygl> I am forced to exercise if I want to reap the benefits of exercise without resorting to some means by which I can reap the benefits of exercise without exercising.
00:48:35 <alise> uorygl: you're so annoying
00:48:38 <alise> i hope our visits to oklopol don't clash
00:48:50 <uorygl> Let's see. With the words I supposedly know, I can say...
00:49:20 <alise> http://man.cat-v.org/unix_WWB/1/sexist
00:49:21 <uorygl> I walk into the starting time, I walk into the animal, I walk into the stone, I walk into the shape...
00:50:36 <alise> http://man.cat-v.org/unix_8th/6/atc ;; one of the most geeky games imaginable
00:51:01 <uorygl> I don't know the illative cases of those.
00:51:42 <oklopol> some sort of lengthening or vowel + n
00:51:49 <oklopol> plus all sorts of fun details
00:52:06 * alise attempts to find the spreadsheet program in unix 8th edition
00:52:37 <uorygl> Minä kävelen alkuaikaan. Minä kävelen eläimeen. Minä kävelen kiveen.
00:52:44 <uorygl> So my guess for "shape" would be "muotoon".
00:52:55 <uorygl> Yep! Minä kävelen muotoon.
00:53:10 -!- Tritonio_GR has quit (Quit: Leaving.).
00:53:38 <alise> http://man.cat-v.org/unix_8th/1/visi
00:53:48 <AnMaster> <alise> http://man.cat-v.org/unix_8th/6/atc ;; one of the most geeky games imaginable <-- nah, tried it, not realistic IMO
00:54:00 <uorygl> Koira kävelee luun suuhun.
00:54:15 <uorygl> It doesn't make much sense. :P
00:54:44 -!- SgeoN1 has quit (Read error: Connection reset by peer).
00:55:47 <AnMaster> alise, yeah, I prefer simulations
00:56:44 <cheater99> http://profile.ak.fbcdn.net/v223/334/56/n100000035296412_1208.jpg
00:57:15 <uorygl> Now I'm kind of thirsty, and I want to talk about drinking, but that's really a vocabulary issue.
00:57:58 -!- coppro has quit (Read error: Connection reset by peer).
01:09:29 <oklopol> i don't think starting time is alkuaika
01:10:06 <oklopol> uorygl: doesn't make sense but it's meaningful
01:10:53 * alise tries to find the actual cover of tri repetae
01:12:41 <oklopol> i AnMaster's the word cover to be the topological term
01:13:18 <oklopol> okay i thought cover in the sense new version of old thing
01:14:18 <alise> "incomplete without surface noise." -- the cover
01:14:28 <alise> ("complete with surface noise." -- cover of vinyl version)
01:18:50 <alise> I propose we term what is usually called axioms, plus information about axioms, axiomata
01:18:56 <alise> Why: it sounds nice
01:27:09 -!- pikhq has quit (Read error: Connection reset by peer).
01:27:46 -!- bsmntbombdood has quit (Ping timeout: 248 seconds).
01:32:53 -!- pikhq has joined.
01:33:40 -!- coppro has joined.
01:44:52 <pikhq> http://sprunge.us/cgih
01:45:01 <pikhq> I should make this cleaner.
01:46:01 <Sgeo_> Metavideo, fuck you and your 72min limit
01:46:35 * oklopol is about to run out of his 72
01:47:47 <alise> pikhq: ima write one of them
01:47:51 <alise> looks funerifierous
01:48:16 <uorygl> oklopol: starting time isn't alkuaika?
01:49:01 <oklopol> well what kind of starting time?
01:49:08 <alise> BF = (Add n, Move n, Loop x, In, Out) ;; I want a dynamic language with adts
01:49:13 <uorygl> The point at which a long process began.
01:49:16 * pikhq should futz with the
01:49:37 <oklopol> okay if it's long then maybe
01:49:59 -!- Oranjer has joined.
01:50:08 <oklopol> i was thinking like starting time in a race or something, maybe it doesn't mean that usually
01:52:28 <alise> opt (Loop [Add (-1)] : xs) = opt $ Clear : xs
01:52:28 <alise> opt (Loop [Add 1] : xs) = opt $ Clear : xs
01:52:30 <alise> pikhq: it's more general than this
01:52:46 <alise> you need the extended euclidean algorithm to figure out whether a loop like that terminates, iirc
01:53:06 <alise> pikhq: btw you could write your optimiser simpler as repeated application until fixpoint of the optimisation function and no recursion :P
01:53:51 <uorygl> What sort of starting time is the time I began sneezing?
01:53:58 <alise> opt (Loop x : xs) = Loop (opt x) : opt xs
01:54:06 <alise> Loop [Add 2, Add (-1)]
01:54:14 <uorygl> As in the starting time of one particular sneeze.
01:54:15 <alise> optBF (Loop x : xs) = optBF $ Loop (optBF x) : xs
01:54:48 <alise> pikhq: also use Set n instead of Clear
01:54:55 <oklopol> alkuaika is more like for eras and the like
01:55:19 <oklopol> "tieteen alkuaikoina..." when science wazs younngg
01:55:24 <pikhq> alise: This is intended to first achieve feature-parity with a C program I wrote that does the same thing, and then go from there.
01:56:18 <uorygl> The starting moment, eh?
01:56:46 <oklopol> in finnish it sounds nonsilly.
01:57:12 <oklopol> it's not exactly moment, hetki is a point in time, moment is, i guess, an interval
01:57:23 <oklopol> although they do have overlap, it's the usual translation
01:58:03 <uorygl> oklopol: Zack M. Davis says, "[Recreational] is _not_ [a barnch of mathematics]! Algebra, analysis, and topology are branches of mathematics. 'Recreational' is a diminituve applied to problems that are perceived as being
01:58:22 <uorygl> "easier or more 'fun' than 'serious' mathematics. The distinction has everything to do with the ideology of professionalism and nothing to do with the theorems themselves."
01:58:41 <alise> *Main> optBF [Add 42, Move 0, Add (-3)]
01:58:43 <uorygl> And "And doesn't it make more sense as, 'What's the difference between (...)?'"
01:59:16 <oklopol> okay, i haven't been exposed to diminutive usage, but i was joking
01:59:17 <uorygl> Hm, shouldn't he have said "'What's the difference between (...)?'?"?
01:59:40 <pikhq> alise: Trying to do this better than me? :P
01:59:53 <alise> pikhq: EVERYTHING WILL BE SUPERIOR
02:00:03 <alise> pikhq: you know how far along esotope is btw? :P
02:00:19 <pikhq> Esotope does quite a bit.
02:00:22 <uorygl> Hey, I don't seem to be thirsty any more.
02:00:29 <uorygl> oklopol, how would you say "I don't seem to be thirsty"?
02:01:23 <oklopol> literally en vaikuttaisi/nyttisi olevan janoinen
02:01:41 <oklopol> which i suppose i would use in a situation where i'd say that
02:02:17 <oklopol> in your case you'd probably leave out the seem, "oho, jano lhti" or something :P
02:02:58 <uorygl> Hm, how about something easier. "The dog seems to be glowing."
02:03:13 <alise> pikhq: Esotope COMPILES THE REGULAR LOOPING HELLO WORLD TO A PRINT STATEMENT.
02:04:11 <pikhq> alise: Yes, I'm well aware.
02:04:17 <pikhq> It's pretty crazy.
02:04:50 <pikhq> alise: However, it still has pointer loads *all the freaking time*.
02:04:54 <pikhq> Because GCC sucks.
02:04:58 <alise> lol i keep trying to look at the repository for esotope but i can't stop staring at mearie.org's pretty design instead
02:05:11 <alise> it optimises array references into variables when it can!
02:05:30 <uorygl> oklopol: so what's "hehkuvan"?
02:05:50 <oklopol> from hehkua, which is glow i think
02:06:22 <uorygl> How do you get to "hehkuvan" from that?
02:06:24 <oklopol> but nytt hehkuvan is actually a rather special construction, i'm not even sure what case hehkuvan is in
02:06:36 <pikhq> Esotope's design is pretty hard to grok, though.
02:07:12 <uorygl> Wiktionary says "active present participle sg. in genitive".
02:07:40 <oklopol> first -va, hehkuva is something that glows, then that's genitive
02:07:40 <pikhq> Maybe I should just give it an x86 asm backend.
02:07:47 <uorygl> So that word is inflected *and* declined? >.>
02:08:08 <uorygl> Er, conjugated *and* declied.
02:08:08 <oklopol> well the verb is made into a noun sort of thing, then genitive is added
02:08:16 <uorygl> Conjugated *and* declined, even.
02:09:03 <alise> pikhq: would be a good idea.
02:09:14 * uorygl ponders "The dog seems to walk".
02:09:37 <oklopol> but i see no reason why it would actually be that meaning, i would've guessed it's some old form that verbs used to be in more often, but nowadays just for "nytt"
02:10:05 <oklopol> because with that interpretation it's "shows something that glows"
02:10:08 <uorygl> "Koira näyttää kävelvän"? Em...
02:11:09 * uorygl attempts to type ä a bunch of times and ends up with this: aääaäaäaäaäaääääääääaääääääää
02:11:41 <uorygl> Oh, look, "kävellä" is conjugated "kävelee" in the third person singular. :)
02:12:51 <uorygl> So is "The dog seems to lift" "Koira näyttää nostavan"?
02:13:06 <uorygl> The word "nostavan" seemed to pop into my head for some reason, and then it turned out to be correct. :)
02:13:23 <uorygl> I mean, it came to mind, and then it turned out to seem correct, and then it further turned out to actually be correct. :P
02:15:05 * uorygl peeks at the third-person singular of "syödä".
02:15:47 <uorygl> It looks like "The dog seems to eat the bone" is going to be "Koira näyttää syövän luun".
02:16:15 <oklopol> except probably "koira nytt syvn luuta"
02:16:42 <uorygl> Good ol' partitive case.
02:16:50 <oklopol> because i can't imagine it seeming to eat the whole bone in one go
02:17:04 <uorygl> Finnish is such a strange language, why would anyone want to learn it. :P
02:17:35 * pikhq is looking at a side-by-side diff between known-working and known-broken output.
02:17:43 <oklopol> "Koira näyttää syövän luun" <<< this can also mean "the dog shows the bone of the cancer"
02:17:45 * pikhq cannot figure out WTF is going on
02:18:09 <uorygl> Perhaps I went to DeviantArt once, saw the work of a Finnish artist, and thought, "I like this stuff. I want to learn Finnish". :P
02:18:48 <pikhq> It's like I've got completely and utterly different control flow happening.
02:19:25 -!- sebbu2 has joined.
02:20:59 <oklopol> to understand a man's art, you have to understand his brainage, to understand a man's brainage, you need to learn finnish.
02:21:13 <oklopol> because finnish is the language of understanding
02:21:22 -!- sebbu has quit (Ping timeout: 258 seconds).
02:21:22 -!- sebbu2 has changed nick to sebbu.
02:21:33 <uorygl> Brainage: Train Your Brain in Minutes a Day!
02:22:13 <pikhq> This particular optimisation might be easier if I compile into Jumpfuck and optimise that.
02:22:23 <oklopol> Vliaikainen takuu palkinto - aivojumppaa puhelimeesi. Voita uusi iPad. Onko tm uusi iPad sinun? Ultra cool iPad.
02:22:42 <oklopol> i can give you all the spam i seeas homework
02:23:04 <oklopol> at least one of the sentences should be simple
02:23:19 <alise> oklopol: write a finnish/lojban pidgin
02:23:26 <alise> whenever you don't know a lojban word or it doesn't have one, use the finnish one
02:23:30 <alise> also, you can combine lojban and finnish words into one
02:24:17 <oklopol> but wouldn't that be really gay
02:24:44 <oklopol> btw i have no idea what "Vliaikainen takuu palkinto" means
02:24:51 <oklopol> you can tell me if you know
02:26:05 <pikhq> HOW THE HECK IS THIS DAMNED THING GETTING "Set 0 : Add 1"?
02:26:39 <uorygl> ¡Ay, my Internet cut out.
02:26:57 <uorygl> What's that case meaning "as a ..."?
02:27:23 <uorygl> Here we go, the essive.
02:27:27 <alise> oklopol: just try it plz
02:27:30 <pikhq> Screw it; I'm redoing the optimiser slightly.
02:27:33 <alise> pikhq: not sufficiently reoptimising
02:27:40 <alise> then reiterate until fixpoint
02:27:40 <pikhq> alise: Fixed point, BTW? Good idea.
02:27:44 <alise> slower, yes, who cares
02:27:52 <alise> lost kng is biggest program, if it takes 3 minutes, who cares
02:28:07 <alise> you could divide & conquer actually
02:28:31 <alise> divide program into 2n pieces, fixpoint each, then combine every 2
02:28:36 <oklopol> you'd actually use the translative case :)
02:28:41 <alise> and fixpoint on them
02:28:42 <alise> then combine every 2
02:28:44 <alise> and fixpoint on them
02:28:48 <alise> until there is only one piece left
02:28:55 <alise> i.e., we optimise small clusters, then fix the "seams" at the edges
02:29:01 <uorygl> Wait, there actually is something called a translative case?
02:29:31 <uorygl> So "I can give you all the spam I see as homework" would translate "as homework" using the translative?
02:29:33 <oklopol> yes it's the illative to essive's inessive
02:29:57 <oklopol> yeah it's sort of "for homework"
02:30:07 <oklopol> i give this stuff to you so that it becomes homework
02:30:22 <oklopol> so not really at all for i guess
02:30:22 <uorygl> Huh. What is this peculiarity to?
02:30:49 <uorygl> (Yay for using prepositions in strange ways.)
02:30:56 <pikhq> alise: Hrm. Actually, I'm having a thinko on how to do this. Care to explain what you think so I feel less stupid?
02:31:04 <oklopol> well see if you give something then translative, when it is something it's essive.
02:31:17 <oklopol> you give it to be homework, and then it is your homework
02:31:24 <pikhq> "fix . opt' $ xs" seems wrong somehow.
02:31:46 <alise> pikhq: simple -- also that wouldn't work:
02:31:52 <oklopol> if you told me you've been given something as homework, there would be no change going on, and you'd use the essive, "minulla on lksyn hauskanpitoa"
02:31:53 <alise> opt (foo : bar : xs) = foobar : xs
02:31:54 <uorygl> opt' xs is a function whose fixed point you want to find?
02:32:02 <pikhq> Like I said, seems wrong.
02:32:09 <alise> opty x = if opt x == x then x else opt x
02:32:15 <alise> (you can bind it elsewhere if you wish)
02:32:17 <alise> pikhq: one exception,
02:32:19 <alise> opt (x:xs) = opt xs
02:32:23 <alise> opt (x:xs) = x : opt xs
02:32:28 <alise> that should be the only recursion
02:32:32 <alise> basically chop out all recursions
02:32:37 <alise> apart from that one
02:33:15 <oklopol> FOR EVERY TOTAL COMPUTABLE FUNCTION f : N -> N THERE IS SOME n SUCH THAT n AND f(n) PERFORM THE SAME OPERATION.
02:34:44 <alise> oklopol: HEY THAT'S NOT TRUE MAN
02:34:51 <alise> oklopol: f(n) = S(n)
02:34:53 <alise> WHERE IS YOUR GOD NOW HUH
02:35:13 <uorygl> S(S(S(S(S(S(S(S(S(S(...
02:35:19 <alise> fix(f) = n s.t. [f(n) = n] = n s.t. [S(n) = n] = disproven beyotch
02:35:21 <uorygl> Hmm, but that doesn't count.
02:35:22 <alise> uorygl: that's not a natural
02:35:34 <uorygl> The successor function simply has no fixed point!
02:35:35 <oklopol> WELL UMM THE TURING MACHINES THAT n AND f(n) HAPPEN TO INDEX IN OUR GDEL NUMBERING, I SUPPOSE THAT'S A BIT IMPORTANT
02:35:44 <alise> I would so end my proofs with "Q.E.fuckin'.D." were I ever to be published
02:35:49 <alise> oklopol: WELL YEAH I GUESS THAT IS TRUE LOL.
02:35:51 <oklopol> actually that's not at all important really
02:36:03 <alise> oklopol: ONLY IF YOU CONSTRUCT YOUR GOEDEL NUMBERING LIKE THAT
02:36:27 <oklopol> but yeah you can't make a total computable function that checks how many things a tm prints and prints one more
02:36:28 <pikhq> alise: Also, don't you mean opty x = if opt x == x then x else opty x
02:36:39 <alise> pikhq: read that again
02:36:44 <uorygl> Yeah, what if your Gödel numbering says "if it's odd, output A and subtract one; otherwise, output B; in any case, continue"?
02:36:47 <alise> then amend the recursion
02:37:19 <alise> pikhq: opty x = ... else opty x
02:37:40 <oklopol> the gdel numbering means a surjection from naturals to the set of all turing machines
02:37:47 <uorygl> Clearly it's supposed to be opt (opty x). :P
02:37:55 <uorygl> I guess not every Turing machine immediately outputs one of those.
02:38:17 <pikhq> "opty x = if opt x == x then x else opt x" doesn't quite seem right, though.
02:38:25 <uorygl> Right, it's opty (opt x).
02:38:45 <pikhq> Wait. Find the fixpoint of *that*. Okay.
02:39:05 <alise> oklopol: but you can easily have a goedel numbering where n+1 always outputs something different to n
02:39:13 <alise> the numbering doesn't have to be computable does it :)
02:39:22 <uorygl> Surely the numbering does have to be computable.
02:40:06 <uorygl> Because otherwise the stuff we've said is true would be false. :P
02:40:17 <alise> oklopol: but you can easily have a goedel numbering where n+1 always outputs something different to n
02:40:20 <alise> even if it's computable
02:40:23 <pikhq> Now to figure out where my type error's from.
02:40:26 <alise> i assert this conjecture without proof or knowledge
02:40:28 <alise> I'm just asserting it
02:40:30 <alise> pikhq: lern2haskel
02:40:46 <pikhq> alise: It's been a while, okay?
02:40:57 <uorygl> alise: well, then, you must be wrong. :P
02:41:02 <oklopol> err yes the fixed point theorem requires the gdel numbering is computable
02:41:15 <alise> SHUT UP I DENY YOUR THEOREMA
02:41:32 <alise> now make a computable algorithm to find the fixed point bitch
02:42:07 <pikhq> "Couldn't match [BF] -> [BF] against inferred [BF]" Clearly, I am being stupid about something.
02:43:01 <alise> oklopol: also is it only for N -> N? you sure
02:43:12 <coppro> pikhq: that's a function
02:43:20 <coppro> it's trying to match it to a non-function
02:43:23 <oklopol> alise: yes, any total computable function from turing machines to turing machines
02:43:35 <alise> pikhq: fix :: (a -> a) -> a
02:43:45 <alise> pikhq: so opt'' should be ([BF] -> [BF]) -> [BF] -> [BF}
02:43:46 <alise> pikhq: so opt'' should be ([BF] -> [BF]) -> [BF] -> [BF]
02:43:51 <alise> pikhq: protip: you don't want fix
02:43:59 <alise> pikhq: just write a fucking recursive function
02:44:02 <pikhq> alise: Yes, it works without fix
02:44:12 <Sgeo_> http://www.fark.com/cgi/comments.pl?IDLink=5351459
02:44:17 <pikhq> See, I was being stupid.
02:44:22 <Sgeo_> I would not have been able to tell you which president resigned
02:44:24 <alise> oklopol: goedel reals <3
02:44:49 <Sgeo_> Mind you, I didn't go and say "I don't think any presidents resigned"
02:45:08 <Sgeo_> alise, I know that now
02:45:12 <alise> i didn't know but... i'm not american, and nixon was _basically_ impeached
02:45:31 <alise> (in my fantasy land)
02:45:37 <alise> hey nixon's middle name is milhous(e)
02:46:10 <oklopol> let h be the computable function, then let f(x) = h(x(x)), now f(f) = h(f(f)), where x(y) means x is curried with y
02:46:50 <oklopol> i guess i couldn't just googled that without using my half-asleep brain
02:47:31 <oklopol> you need total-computable gdels so that currying works, i think
02:48:23 * Sgeo_ posts his confession in the thread
02:48:43 <pikhq> And... WTF is it doing.
02:49:42 <pikhq> No, it's doing "+[-]+" -> [Add 2]
02:49:57 <pikhq> Rather than [Set 1]
02:50:10 <alise> Sgeo_: if you want to become intelligent howsabout not reading fark
02:50:17 <alise> pikhq: look at the code i suggest.
02:50:26 <alise> `addquot <pikhq> And... WTF is it doing. <pikhq> :( <Sgeo_> Is it sexing?
02:50:27 <alise> `addquote <pikhq> And... WTF is it doing. <pikhq> :( <Sgeo_> Is it sexing?
02:50:35 <HackEgo> 168|<pikhq> And... WTF is it doing. <pikhq> :( <Sgeo_> Is it sexing?
02:50:43 <HackEgo> 8|<Warrigal> GKennethR: he should be told that you should always ask someone before killing them.
02:50:58 <HackEgo> 114|<Eeyore> I used to have salt licks for my horses. They would make cool abstract sculptures with them.
02:51:03 <HackEgo> 120|<Sgeo|web> Where's the link to the log? <lament> THERE'S NO LOG. YOUR REQUEST IS SUSPICIOUS AND HAS BEEN LOGGED.
02:51:21 <HackEgo> 14|<reddit user "othermatt"> So what you're saying is that I shouldn't lick my iPhone but instead I should rub it on my eyes first and then lick my eyeballs?
02:51:25 <HackEgo> 113|<xan> if you watch jaws backwards it's a movie about a giant shark that throws up so many people they have to open a beach
02:51:28 <HackEgo> 70|<pikhq> Gregor is often a scandalous imposter. It's all the hats, I tell you.
02:51:32 <HackEgo> 90|<oklopol> hmm, this is hard
02:51:34 <HackEgo> 103|<oklofok> i use dynamic indentation, i indent lines k times, if they are used O(n^k) times during a run of the program
02:51:38 <HackEgo> 56|<oklopol> i'm my dad's unborn sister
02:51:41 <HackEgo> 140|<fax> oklopol geez what are you doing here <oklokok> ...i don't know :< <oklokok> i actually ate until now, although i guess i also did other things...
02:51:58 <HackEgo> Runs arbitrary code in GNU/Linux. Type "`<command>", or "`run <command>" for full shell commands. "`fetch <URL>" downloads files. Files saved to $PWD are persistent, and $PWD/bin is in $PATH. $PWD is a mercurial repository, "`revert <rev>" can be used to revert to a revision. See http://codu.org/projects/hackbot/fshg/
02:52:05 * pikhq see no way for that to happen
02:52:07 <alise> nobody's changed it...
02:52:22 <alise> http://codu.org/projects/hackbot/fshg/index.cgi/file/4bc215bfa512/bin/quote
02:52:34 <alise> selected too many times and got corrupted and/or just lock is stuck?
02:52:38 <alise> `sqlite3 quotes/quote.db
02:52:44 <alise> `run sqlite3 quotes/quote.db 2>&1
02:53:25 <pikhq> I think HackEgo broke.
02:57:47 <pikhq> "add ecx, -1;add ecx, -1"
02:57:55 <pikhq> HOW DID IT DO THAT
02:58:51 <pikhq> Would seem to only be doing that in loops. That's actually helpful.
02:59:36 <pikhq> Or, it would be if THAT MADE ANY SENSE
03:02:17 <pikhq> (and yes, I *am* recursing into loops)
03:04:47 * pikhq attempts to find a test case
03:10:22 <alise> pikhq: just use BFoptimlangijgj
03:10:27 <uorygl> oklopol: how do you determine where to put empty lines?
03:13:02 <uorygl> Perhaps the distance between lines should be proportional to the probability of a page fault.
03:13:26 <pikhq> Near as I can tell, there exists a way for the optimiser to *not* recurse into a loop.
03:13:31 <pikhq> opt' (Loop x : xs) = Loop (opt' x) : xs
03:13:43 <alise> pikhq: silly rabbit
03:13:46 <pikhq> How, pray tell, is it possible to not recurse?
03:13:48 <alise> opt' (Loop x : xs) = Loop (opty x) : xs
03:13:56 <alise> trix are for kids#
03:14:07 <alise> Fuck fuck fuck fuck fuck fuck fuck fuck fuck fuck fuck fuck fuck fuck fuck, fuck fuck
03:14:15 <pikhq> alise: Still not recursing!
03:14:24 <alise> recurse an anus then paste the code
03:14:44 <pikhq> http://sprunge.us/ieEV
03:15:17 <alise> you fail out of operation bitch.
03:15:25 <alise> opt :: [BF] -> [BF]
03:15:26 <alise> opt (Loop x : xs) = opt $ xs
03:15:37 <alise> your program is structured shittily, dude
03:15:54 <alise> actually i think you should be banned from coding
03:15:57 <alise> clean this shit up
03:16:09 <pikhq> Any other suggestions?
03:16:20 <alise> pikhq: http://esolangs.org/files/brainfuck/impl/bf2c.hs
03:16:24 <alise> make it look more like this.
03:16:42 <alise> (which is actually really elegant haskell code)
03:16:47 <alise> (and was state of the art until esotope)
03:17:04 <alise> in fact, just modify the code there to output asm
03:17:10 <alise> it already optimises multiplication and shit, and does for loops
03:17:34 <pikhq> That's actually a really good idea.
03:19:20 <alise> what, just modifying that or doing those optimisations?
03:19:22 <alise> I presume the former
03:20:10 <alise> it has some weirdness, like it uses hugely negative numbers as tape locations to indicate program doing io and stuff
03:20:15 <alise> but those are way outside the array range anyway
03:20:21 <alise> i'd change the list import to Data.List, though
03:20:31 <alise> pikhq: thankfully the backend is very abstracted
03:20:40 <uorygl> There's this pillow near me that has sixteen colored circles, arranged in a square.
03:20:45 <alise> just modify after -- output to -- main
03:20:51 <uorygl> I just realize that the colors of the circles correspond to the Gaussian integers modulo 5.
03:21:02 <pikhq> Just rewriting the output section.
03:21:40 <alise> imo bf2c.hs is the nicest BF compiler yet, because it's -- well, not close to esotope, but it does a lot of very important optimisations -- and the code is really, really elegant
03:22:01 <alise> 2002 vintage haskell :)
03:22:59 <alise> http://academic.research.microsoft.com/Author/2851361.aspx this guy likes sudoku a lot
03:23:06 <alise> same bertram felgenhauer, I wonder? probably.
03:23:36 <alise> pikhq: also, the license on that code is a little ambiguous
03:23:43 <alise> "GPL", but since it was published 2002 it's GPL2 with nigh-on uncertainty
03:23:54 <alise> i suggest leaving that line as-is
03:24:06 <alise> oh, that's not all the changes
03:24:06 <alise> -- act as a simple filter; read brainfuck code from stdin and
03:24:07 <alise> -- write C code to stdout.
03:24:15 <alise> change C code to "assembly" :P
03:24:49 <pikhq> alise: By the GPL license, just saying "GPL" means "any version, at your choice".
03:25:00 -!- dbc has quit (Ping timeout: 276 seconds).
03:25:03 <alise> pikhq: i don't believe the gpl license has the power to dictate what arbitrary text means when it uses a name
03:25:12 <alise> but, uh, just leave the line there :P
03:25:22 <coppro> no, but convention does
03:25:41 <pikhq> alise: It's part of the versioning text...
03:25:46 <coppro> if you can reasonably assume he means any version of the GPL, then it does
03:26:02 <alise> coppro: ok lawyer :P
03:26:06 <coppro> (provided for normal mistake law to apply if not)
03:26:08 <pikhq> Of each and every such version of the GPL.
03:26:36 <coppro> the actual text of the GPL is irrelevant
03:27:22 <coppro> it could say "the term 'pumpernickel' means 'GPL'" and it wouldn't matter; what would matter is if people actually used 'pumpernickel' that way
03:27:35 -!- Tritonio_GR has joined.
03:27:49 * pikhq notes that the Term outputting code will be slightly annoying to do in assembly
03:28:09 <alise> pikhq: that's the price to pay for optimisation~
03:28:39 <alise> pikhq: just make it instead "spitOutTermCommandsSoThatTheyAppearInSomeFuckingAwesomeRegisterHellsYeah"
03:29:34 * pikhq shall see about loading into esp
03:31:10 -!- oklopol has quit (Ping timeout: 265 seconds).
03:34:59 <alise> Reads ASCII data as input. Produces a portable graymap with pixel val‐
03:35:00 <alise> ues which are an approximation of the "brightness" of the ASCII charac‐
03:35:00 <alise> ters, assuming black-on-white printing. In other words, a capital M is
03:35:00 <alise> very dark, a period is ver light, and a space is white. Input lines
03:35:00 <alise> which are fewer than width characters are automatically padded with
03:36:33 <pikhq> Another advantage: it'll be possible to compile LostKng without 3G of RAM handy.
03:50:12 <pikhq> Laziness prevaileth!
03:50:25 <alise> I wanted to see it
04:26:05 -!- lament has joined.
04:49:06 -!- Tritonio_GR1 has joined.
04:49:57 -!- Tritonio_GR has quit (Ping timeout: 265 seconds).
04:49:58 -!- MizardX has quit (Read error: Connection reset by peer).
04:59:50 -!- coppro has quit (Remote host closed the connection).
05:01:46 -!- sshc_ has joined.
05:02:06 -!- alise has quit (Quit: Leaving).
05:05:25 -!- sshc has quit (Ping timeout: 265 seconds).
05:06:57 -!- coppro has joined.
05:07:59 -!- sshc has joined.
05:11:33 -!- sshc_ has quit (Ping timeout: 264 seconds).
05:18:45 -!- sshc_ has joined.
05:21:54 -!- sshc has quit (Ping timeout: 248 seconds).
05:26:27 -!- poiuy_qwert has left (?).
05:28:34 -!- Tritonio_GR1 has quit (Read error: Connection reset by peer).
06:03:45 -!- lament has quit (Ping timeout: 264 seconds).
06:04:29 <Sgeo_> "There is currently none, but the sources are commented. If you need help, read comments. If you still need help, ask your friends. For more help, visit some discussion forum. If you are completely despaired, create your own forum. If you are ready to commit suicide, well, drop me a mail (ollydbg at t-online de). Set subject to PaperBack, or you will be considered spam and filtered out. Allow 4 to 6 weeks for delivery."
06:16:38 -!- Oranjer has left (?).
06:52:44 -!- AnMaster has quit (Quit: ZNC - http://znc.sourceforge.net).
06:52:58 -!- AnMaster has joined.
07:30:50 <coppro> Does anyone know what the first number in an X display specification is? (:0.0). I know that the second is the screen and the first somehow specifies the display; is it a port-related thing?
07:32:42 <pikhq> That number is added to some constant that I don't recall to get the actual TCP port.
07:33:25 <pikhq> Also, doesn't necessarily go over TCP; xlib on local host will generally do it all via shared memory, for instance.
07:33:52 <coppro> that's not fundamental to the protocol, though
07:34:11 <pikhq> No, that's just a common optimisation.
07:34:37 <pikhq> Strictly speaking, more of an *extension* to the protocol than anything else.
07:35:04 <pikhq> Which works well because what sort of mad-man doesn't use xlib or xcb?
07:35:24 <pikhq> (or a library that indirectly uses either one)
07:35:45 <coppro> pikhq: someone implementing a server
07:36:12 <pikhq> coppro: For a client.
07:36:32 <pikhq> Someone implementing a server is just moderately mad because there's a *lot* of stuff to X.
07:37:23 <coppro> yeah, I'm definitely moderately mad
07:37:44 <coppro> I want a server that allows me to run a program on it and forward it to another server, and then disconnect and/or reconnect it as necessary
07:37:57 <coppro> possibly to a different server
07:38:50 <pikhq> Oh, so you're reimplementing that xdetach thing that's not been maintained in ages?
07:38:55 <pikhq> Thank you thank you thank you.
07:41:21 <coppro> XD-tach is the working name
07:49:32 <coppro> I'm going to be using Erlang since it feels very right
07:55:40 -!- Gracenotes has quit (Ping timeout: 240 seconds).
07:59:11 -!- oerjan has joined.
07:59:59 -!- clog has quit (ended).
08:00:00 -!- clog has joined.
08:17:09 -!- Sgeo_ has quit (Ping timeout: 245 seconds).
08:22:52 -!- bsmntbombdood has joined.
08:37:16 -!- Sgeo has joined.
09:00:14 -!- coppro has quit (Read error: Connection reset by peer).
09:11:24 -!- kar8nga has joined.
09:19:44 -!- tombom has joined.
09:34:41 -!- oerjan has quit (Quit: leaving).
09:53:40 -!- lament has joined.
09:54:21 -!- BeholdMyGlory has joined.
09:54:22 -!- BeholdMyGlory has quit (Changing host).
09:54:22 -!- BeholdMyGlory has joined.
09:58:26 -!- lament has quit (Ping timeout: 260 seconds).
09:59:02 -!- FireFly has joined.
10:04:31 -!- oklopol has joined.
10:15:44 -!- Phantom_Hoover has joined.
10:26:55 <oklopol> i'm intrigued by both your messages.
10:27:15 <oklopol> can you elaborate on both in one sentence
10:30:15 <Phantom_Hoover> I heard sounds not dissimilar to a dog coming from my fireplace and the entry made by Finland to Eurovision was awesome.
10:37:02 <oklopol> okay what was the awesome one?
10:39:12 <oklopol> well i'm not sure where you're from so
10:40:54 <oklopol> well uk us what's the diff :DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
10:43:27 -!- kar8nga has quit.
10:43:32 -!- kar8nga has joined.
10:43:39 <oklopol> i don't think that's elkeliset's best work
10:44:27 <oklopol> okay the ending is awesome
11:00:03 -!- kar8nga has quit (Remote host closed the connection).
11:02:10 -!- kar8nga has joined.
11:41:05 -!- coppro has joined.
11:42:23 <coppro> xd-tach progressed tonight!
11:42:24 <coppro> it can now connect to an X server and then drop the connection
11:42:59 <coppro> my detachable X server
11:45:31 <coppro> I'll probably implement a third of the protocol myself before dropping it and switching to Xnest
11:47:53 <coppro> (although Xnest doesn't do everything I want it to
12:26:25 * Phantom_Hoover still doesn't get how you can have Windows programs that can't be removed in Windows
12:29:02 <Phantom_Hoover> `translate Arbeit sukzessive beantworten mchte, soweit mglich:
12:32:21 -!- CakeProphet has joined.
12:32:48 <CakeProphet> ...it's been a while. I don't even know if anyone remembers me. :P
12:34:05 <CakeProphet> You probably weren't around a few years ago
12:34:20 <cheater99> is this some attempt at grassroots politics
12:34:45 <CakeProphet> -ahem- no. I was just thinking about a modification to bf, and so I thought now would be a good time to refrequent this channel.
12:35:50 <CakeProphet> I was also wondering... has anyone seen a modification of bf to emulate a non-deterministic or probabilistic (or quantum) Turing machine?
12:37:05 <CakeProphet> Phantom_Hoover: well I'm in rough draft stages at the moment... but essentially it's like usable brainfuck with inter-algorithm communication.
12:38:11 <CakeProphet> So you make a set of named super-bf programs... and then declare how their inputs and outputs connect, and they all run concurrently. Another important addition is that there's now three, yes /three/, pipelines for both input and output
12:39:08 <CakeProphet> two are generally equivalent... but are labelled "data" and "control" to signify the semantics they're intended for... and then the third is "system", which communicates with a global environment
12:39:43 <CakeProphet> rofl. I'm going with Cook for the moment... but maybe Alan.
12:40:05 <CakeProphet> the idea is that you can construct /useful/ programs
12:40:21 <CakeProphet> out of a series of running turing machines configured with better IO support.
12:40:45 <CakeProphet> having data and control are so that raw data can be seperated from control protocols cleanly
12:40:54 -!- rodgort has quit (Ping timeout: 245 seconds).
12:41:47 <CakeProphet> but yeah, I guess semantically system plugs up to an invisible "system" thread that implements a protocol that I've yet to specify, but would allow individual threads to request system information, kill themselves, kill the process, etc... system stuff.
12:42:11 <CakeProphet> so you could make libraries out of turing machines... by documenting the protocol they use.
12:43:07 <CakeProphet> also it's not quite like pipes in the sense that you can multiplex... there's nothing forbidding you from having one of your channels being broadcasted to multiple threads
12:43:48 <CakeProphet> or, a less useful case, reading a multiplexed stream being send by multiple threads as your input channel
12:44:25 <CakeProphet> so it's kind of like graph instead of a straight line
12:45:48 <CakeProphet> conceivably you could get like GUI support or something. It would be a good way to define an operating system entirely with abstract bf-like turing machines. Actually I think there was a project trying to do just that a while back; maybe I can borrow some ideas
12:47:43 <CakeProphet> I was also considering making the superset of bf I'm using non-deterministic
12:48:05 <cheater99> hey.. will bcrypt always generate hashes starting with $2a$? or will it sometimes generate ones starting with $2$?
12:50:32 -!- rodgort has joined.
12:51:30 <CakeProphet> I've always loved old-school internet protocols like TELNET
12:51:51 <CakeProphet> so... this is going to be a lot of fun for me. Drafting up protocols to system resources and such
12:52:41 <cheater99> you could learn MPI and just use tht
12:52:56 <cheater99> and then make an erlang-controlled cluster of brainfucks
12:53:04 -!- kar8nga has quit (Remote host closed the connection).
12:55:35 <cheater99> but it's useful and makes for a slim slim slim chance someone else will actually use your shit.
12:56:20 <CakeProphet> Once I finish a naive compiler, I might implement a scheduler that manages a bunch of soft threads. I bet you could actually use source code analysis to devise a very optimal scheduler
12:56:26 <CakeProphet> since the source code for bf is so simple.
12:58:50 <CakeProphet> and no. I don't really care if it gets used. I just want to see if the inclusion of those three channels, and maybe non-determinism, gives bf more utility.
12:59:57 <cheater99> you determine utility through community exposure
13:04:02 <coppro> Telnet is barely a protocol
13:04:20 <CakeProphet> this does not negate its awesomeness though.
13:04:34 <CakeProphet> it's like a meta-protocol, really. It's a way to make agreements about your protocol.
13:05:12 <coppro> Netcat With Bells and Whistles On
13:08:32 <CakeProphet> Once I figure out the full specs for this and get a semi-not-embarassing compiler
13:09:27 <CakeProphet> I will need to have something to test its utility
13:10:34 <CakeProphet> well yeah, that's how it'll be implemented probably.
13:11:52 <CakeProphet> and then for the system channel I'll just dump in the runtime code that handles the protocol
13:12:18 <Phantom_Hoover> Although you could directly multiplex pipes if you weren't going for portability.
13:14:43 <CakeProphet> the piping semantics will be implemented by the compiler. A bunch of tape arrays and queue arrays with soft threads.
13:15:13 <CakeProphet> I think OS threads and processes are too heavyweight to run what easily get up to 20-30 individual turing machines
13:22:33 <CakeProphet> you could have a channel for each alphabetic character. lowercase is read, uppercase write. :D
13:23:05 <CakeProphet> but I think there's a word for that. Unecessary.
13:27:21 <CakeProphet> they're probably off being cooler than us.
13:27:59 <cheater99> there's only one person i look up to
13:30:53 <oklopol> yeah i'm being totally awesome
13:31:06 <oklopol> been awake for 3.5 hours, done nothing.
13:32:57 -!- alise has joined.
13:33:13 <cheater99> i have invoked you to tell you exactly one thing
13:33:17 <cheater99> and it is that lena won eurovision
13:33:25 <CakeProphet> actually I'm pretty awesome. I'm using a command line IRC client right now.
13:33:30 <alise> oh, not CakeProphet
13:33:39 <CakeProphet> if it's on command line, it's immediately cooler than any GUI equivalent
13:34:00 <alise> what an idiotic thing to say
13:34:35 <alise> apparently, i am in a grumpy mood
13:34:44 <alise> 04:48:05 <cheater99> hey.. will bcrypt always generate hashes starting with $2a$? or will it sometimes generate ones starting with $2$?
13:34:48 <alise> i think the paper answers that
13:34:52 <alise> though i do not recall
13:35:52 <CakeProphet> I think my first development project for Cook will be an interactive interpreter. Don't even ask me how, but it will be amazing.
13:36:28 <alise> the .ps i linked you
13:36:42 <alise> can't find it now :))
13:37:05 <cheater99> it's ok, i save everything i get from you in a personal spot on the hard drive
13:37:59 <CakeProphet> hmmmm.... actually I think I could make a hash table in what is currently Cook/Alan/Drainfuck.
13:38:54 <CakeProphet> kind of boring... but more professional, or something.
13:40:47 <CakeProphet> hmmm... a hash table would actually be kind of hard to do.
13:41:26 <cheater99> oklopol, i know dude, they should make a dinosaur comic about it
13:41:58 <CakeProphet> you would need a hash algorithm process... which would be the easier part I think
13:42:27 <CakeProphet> and then you'd need a generic array process... that allows read/write of a 256-index array through a protocol of some kind.
13:43:12 <CakeProphet> ....unfortunately I'm not a very good BF programmer, so I wouldn't even know how to approach most of this.
13:45:11 <alise> BF modifications are usually not the most elegant of things.
13:45:25 <alise> separate the core concept into its own language.
13:46:14 <CakeProphet> well... the core concept is to have a basic turing machine language that can actually do something useful through a well-organized set of protocols and could IO facilities between them.
13:46:26 <alise> fractran =: (*{~1 i.~[@(=<.)@:*)
13:46:29 <alise> ^ fractran interp in J
13:46:34 <alise> oklopol: J is awesome
13:47:04 <Phantom_Hoover> Adapting BF has the major advantage of giving you a sizeable body of code to use, though.
13:47:33 <alise> oklopol: haha wow you can even enter input in "fraction" form
13:47:33 <alise> conwayPrimer =: 17x 78x 19x 23x 29x 77x 95x 77x 1x 11x 13x 15x 15x 55x
13:47:34 <alise> % 91x 85x 51x 38x 33x 29x 23x 19x 17x 13x 11x 14x 2x 1x NB. example program
13:49:56 <alise> http://1.618034.com/blog_data/math/formula.7231.png ;; the only true way to view fractran programs.
13:51:06 <alise> the golden ratio is a nice number
13:51:20 <alise> it's just the output of a latex.php :P
13:51:29 <alise> which doesn't rule out porn i guess
13:51:41 <alise> cheater99: it's the first digits of the golden ratio
13:52:02 <cheater99> as mathematician i don't memorize numbers sorry
13:54:06 <CakeProphet> hmmm... I just got a pretty good idea for a macro language
13:54:10 <oklopol> 3.141592653589793238462643383279502884197169399375105820974944
13:54:43 -!- CakeProphet has quit (Remote host closed the connection).
13:55:45 <alise> cheater99: he didn't, i'm almost certain
13:56:06 <alise> also, i don't remember numbers, but recognising 1.618 is innate if you've ever used the golden ratio...
13:56:17 <alise> or would you ask what the significance of "3.14.com" is too?
13:56:21 <oklopol> i also learned the next 60 or so but i seem to have forgotten them 8|
13:56:22 <alise> cheater99: oklopol is not human
13:56:22 <Deewiant> oklopol: I remember that exact amount of digits by heart
13:56:45 <alise> then you're just a hypercorrecting mathematician trying desperately not to seem like a non-mathematician who uses *NUMBERS!*
13:56:50 <oklopol> cheater99: that's pretty cool
13:57:09 -!- Gracenotes has joined.
13:57:42 <cheater99> given that a human being can only know the significance of a finite amount of numbers, the probability that he will know the significance of a random real number is zero.
13:57:45 -!- CakeProphet has joined.
13:58:23 <CakeProphet> so I was going to give this language macros, complete with parameters and all that
13:58:44 <CakeProphet> and I just realized... you could actually make textual substitution operators, and then define some really high-level bf macros
13:58:50 <oklopol> cheater99: depends on the probability measure
13:59:01 <CakeProphet> like an operator that changes a parameters >'s to <'s
13:59:18 <cheater99> oklopol, my measure is probably 9"
13:59:24 <CakeProphet> so you can have a memory location getter as a macro parameter
13:59:45 <CakeProphet> and then use the replace operator to return the code back to its original position before the macro was invoked
14:00:20 <oklopol> cheater99: do you mean your dick?
14:00:51 <oklopol> i consider no measure better than the other, because i'm not a real number enthusiast
14:01:18 <CakeProphet> alright, here's another thing I was wondering about... ever considered a non-deterministic brainfuck?
14:01:38 <cheater99> there's a lot of use for non-deterministic musical sequencers
14:01:59 <cheater99> write a non-deterministic brainfuck musical sequencer and you'll be an hero
14:02:03 <CakeProphet> non-deterministic as in being able to specify branch points
14:02:03 <oklopol> my penis is marginally above average in size
14:02:25 <oklopol> well length, it's a lot thicker than average i hear
14:02:25 <CakeProphet> so you can spawn a whole copy of the current state into multiple divergent branches.
14:02:26 <cheater99> oklopol, average depends on the population
14:02:43 <cheater99> oklopol, are you saying it's like a soup can?
14:02:58 <cheater99> there's this old interview with henry rollins
14:03:04 <CakeProphet> #esoteric -- a place for serious discussion
14:03:09 <cheater99> with some annoying twit asking him stupid questions
14:03:34 <alise> oklopol: what's the j thing for inverting a word
14:03:44 <oklopol> i don't remember that either
14:03:47 <cheater99> and he says henry fucked some girl somewhere and she said his dick was like a soup can
14:04:24 <Deewiant> en.wikipedia.org/wiki/J_(programming_language)
14:05:09 <alise> so ^. is already taken
14:07:01 <CakeProphet> ...the > to < idea would actually be pretty cool. You could specify memory locations for a macro to work on. You give it the location relative to your current position, and then it can replace all >'s to < in your macro parameter to refer and return back to its last position
14:07:12 <alise> The power of this formalism comes from viewing numbers as products of prime powers. For example, if the input is 2x 3y, the following list gives output 5xy, essentially multiplying x by y:
14:07:15 <alise> this doesn't seem to work :((
14:13:29 <alise> >700 KiB/s on torrents, man, living near the exchange is awesome
14:14:57 -!- Phantom_Hoover has quit (Ping timeout: 265 seconds).
14:15:52 <alise> I wrote a meta-language that compiles down to Fractran. It allows for functions (simple Fractran and sequences of other functions), and a while loop and if statement (for convenience!). The code for that can be found here.
14:16:02 <alise> ^ from the "making of" of the fractran self-interp
14:16:44 <alise> http://www.math.uiuc.edu/~beder/interpreter.frp fractran interp in it
14:17:06 <alise> I don't recommend actually trying to run the Fractran interpreter (alas). I tested many of its components, and, for example, the function IncrementPrimes, which takes a pair of primes and returns the next two primes, takes about 8 minutes to run, using my silly C++ interpreter (no need to post that :). Plus, it goes (at least) quadratically in the number of function calls - doubling the number of function calls makes it take at least four times as long (more
14:17:07 <alise> if there are while loops or if statements). So I'm guessing that running the interpreter will take at least days, if not years :(
14:17:14 <alise> can't even run 1+1 :)
14:17:41 <alise> @Nick, I figured out the problem - my conversion to Fractran ignored integer overflow (stupid C++). I translated the last step to Python, and re-uploaded the main Fractran code. You'll notice that it's got much bigger numbers! Jesse Beder Nov 22 '09 at 0:23"
14:17:57 <alise> heh, there's at least two fractran self-interps
14:18:36 <alise> http://stackoverflow.com/questions/1749905/code-golf-fractran/1773868#1773868
14:18:37 <alise> http://stackoverflow.com/questions/1749905/code-golf-fractran/1802570#1802570
14:19:06 <CakeProphet> perhaps you should attempt to compile to Haskell for efficiency. -sagenod-
14:19:42 <alise> CakeProphet: always a good idea
14:19:50 <alise> cheater99: because fuck you if you don't think it is
14:20:32 <cheater99> promises in love you can't hold :-(
14:20:43 <pineapple> alise: without wanting to get fucked... what does it let you do?
14:20:54 <alise> http://www.esolangs.org/wiki/Fractran
14:21:00 <alise> Conway made it, it's awesome, nuff said
14:21:11 <alise> nobody is at any risk of being fucked.
14:21:31 <cheater99> i wish my browser would run efficiently
14:21:45 <alise> too much math? Seriously?
14:22:12 <alise> cheater99: i'm web 2 point izzo so i chromium in your face :|
14:22:18 <CakeProphet> I'm a programmer... I write programs to do that.
14:22:21 <alise> CakeProphet: yeah we don't have computers to run programs any more
14:22:24 <alise> after the great War
14:22:32 <alise> between Machines and the People
14:22:35 <cheater99> alise: is chromium faster for facebook than firefox is?
14:22:48 <alise> cheater99: chromium is faster than * than firefox is
14:22:56 <alise> = chrome if you're not on loonix
14:23:03 <CakeProphet> Chrome is in general faster for everything. Though the linux release is occasionally buggy.
14:23:30 <alise> CakeProphet: i'm using the linux release
14:23:41 <pineapple> alise: ok... so i get the awesomeness, or at least, i get parts of it... but i can't get a feel for program flow
14:23:43 <CakeProphet> I think it was the beta that was buggy. Imagine that
14:23:50 <alise> pineapple: well it's not easy :P
14:23:52 <CakeProphet> It's been running fine for me as well... now.
14:24:30 <pineapple> alise: i get that feeling about most esolangs :-(
14:26:09 * CakeProphet will need to practice with bf in order to make bitchin' libraries for whatever-this-language-is-going-to-be-called
14:26:28 <oklopol> have you considered anotherderivativefuck
14:26:43 <oklopol> :DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
14:27:17 <oklopol> brainboringderivative has a pun in it too?
14:27:19 <CakeProphet> but it's sort of the whole point. Unless I can find another way to make a really simple turing machine.
14:27:38 <oklopol> i can make a reeeeally simple turing machine
14:27:50 <oklopol> consider the turing machine that never does anything
14:29:52 <CakeProphet> but yeah... would anyone like to help me figure out how an NP-fuck would work?
14:30:57 <CakeProphet> there'd be a bracket structure to specify two or more branch points...and some way to indicate success
14:31:03 <oklopol> ? puts a random number 0-255 on the tape
14:31:12 <CakeProphet> ...that's not what I mean by non-deterministic
14:31:13 <oklopol> when a ! is encountered the cell must be nonempty
14:31:41 <oklopol> well obviously i mean the nondeterministic kind of random
14:32:03 <CakeProphet> :P but I mean the NP-complete kind of non-deterministic
14:32:33 <oklopol> that's it, although you may want to hone it a bit
14:33:04 <oklopol> basically all you need is to be able to say "take any element of this set" "at this point you need to have chosen such elements from sets that property X is true"
14:33:32 <cheater99> does anyone here use massive amounts of tabs in their browser?
14:33:46 <oklopol> so basically the program will continue running an all paths, and we say it runs in time n if the longest run of all those branches is of length n
14:34:03 <CakeProphet> so you would need a way to specify a branch point right? I thought you left that out.
14:34:40 <oklopol> drop something on the tape that makes sure the next ! doesn't fail
14:34:54 <oklopol> well 256, but that doesn't really matter
14:35:02 <alise> <oklopol> when a ! is encountered the cell must be nonempty
14:35:05 <alise> i didn't know cells could be empty
14:35:05 <oklopol> you can do 0/1 but i'd use a binary tape then too
14:35:18 <alise> <cheater99> does anyone here use massive amounts of tabs in their browser?
14:35:24 <alise> about 15-20-30 tabs per window, about 10 windows
14:35:31 <alise> then my browser freezes and i start again
14:35:32 <oklopol> i don't care if it's ridiculous, i just care if it's pure and beautiful
14:35:57 <CakeProphet> could you solve an NP-complete somewhat sanely with that?
14:36:19 <alise> CakeProphet: no because it will be NP
14:36:22 <cheater99> alise: it swaps out any tab you don't look at for t time
14:36:25 <alise> and P=NP hasn't been solved yet :P
14:36:28 <oklopol> yes, say given an instance of sat you just go over the cells representing the variables
14:36:35 <cheater99> alise: and you can make a whitelist too
14:36:38 <oklopol> and then you run a program that fails if it's not satisfied
14:36:38 <alise> cheater99: no i use chromium and I like having so many useless tabs
14:36:44 <alise> i need window gc though :P
14:36:47 <cheater99> alise: it is the most amazing firefox plugin ever conceived by man.
14:36:53 <alise> CakeProphet: well if you don't like mathematics...
14:36:54 <oklopol> go over the cells representing variables, and use ? to drop some value for them
14:37:03 <alise> CakeProphet: "good luck"
14:37:09 <cheater99> i want to solve the riemann hypothesis
14:37:11 <alise> cheater99: make it a metacity plugin and i'm in
14:37:20 <alise> yeah i want to solve the fucking goldbach and collatz conjectures with the same proof
14:37:20 <oklopol> you can solve any problem in NP in polynomial time with that
14:37:31 <alise> cheater99: gnome's window manager
14:37:43 <alise> technically it's emerald i guess since ubuntu enables compiz...
14:37:49 <CakeProphet> oklopol, ah okay... so ! will terminate branches that don't satisfy the condition.... and you can proceed from there. I like that.
14:37:56 <CakeProphet> the 256 branches is still pretty ridiculous
14:38:05 <oklopol> althought you don't think of them as branches in math
14:38:25 <CakeProphet> ....that's why I'm better at programming than math. :P
14:38:30 <oklopol> you just think of it as a different kind of computation in which you can guess stuff correctly
14:38:53 <oklopol> but anyway for many purposes the branching characterization is best
14:38:59 <CakeProphet> I always think of it as branching, as its slightly easier to understand I think.
14:39:49 <cheater99> what's the magic formula for insert ... on duplicate key update?
14:40:03 <cheater99> i'm trying to do 'insert into dupkey (id, val) values (1, 'hi') on duplicate key update;' but it doesn't work :(
14:40:07 <CakeProphet> ? - picks the number(s) you're looking for
14:40:24 <oklopol> CakeProphet: the other useful way is to think in terms of witnesses, sometimes, basically that you need to be able to check solutions to some puzzle or something
14:41:06 <oklopol> you can "solve" a problem in NP if given *some* infinite sequence (or bounded if you like) you can use it to solve the problem in P
14:41:18 <alise> cheater99: #sql or sth
14:41:32 <cheater99> alise, be a darling and look it up plox
14:41:47 <cheater99> alise: i just got trolled in #mysql because someone doesn't know the difference between the www and the internet
14:42:27 <CakeProphet> oklopol, so... if you had a arbitrary number of non-deterministic brainfuck derivitives with two input instructions and two output structures.... could you sanely implement an interface to a hash table?
14:42:44 <cheater99> <cheater99> i don't have www access this very second... what's that magic formula for insert .. on duplicate key update? <threnody> cheater99: you're on irc <cheater99> threnody, are you saying i should be trying this in a mysql client and then it'll work?<threnody> cheater99: you are connected to the internet
14:42:45 <cheater99> <cheater99> the internet is not the www
14:42:45 <cheater99> <cheater99> i hope you realize this now that i pointed it out
14:46:52 <CakeProphet> oklopol, the interface is simple enough... you'd just have a protocol that had a start and end delimeter for th string key, and the string data would go inbetween. You'd have a lock operator so you could lock the hash tables channel while you input your string... and it would merrily chug out the value from the hash table in the data channel
14:48:30 <CakeProphet> the hash table itself, of course, would just be sitting on the a tape somewhere, with a hash function either seperately implemented in a different thread or in the same one if you're a badass bf hacker (which I'm not)
14:50:33 <CakeProphet> my goal is to make it self-interpreting... and then write an IRC bot that could dynamically load in processes into its runtime environment and connect them dynamically. This is incredibly impossible though
14:50:57 <CakeProphet> a simple IRC bot would be feasible, as would some kind of interpreter... but not both, at once, dynamically
14:54:29 <alise> interpet NP with a P P NP
15:00:25 * CakeProphet will specify integers in base 256 and provide a standard library fr manipulating them :)
15:07:21 <alise> Fractran is listed as TC on the wiki; is there any proof?
15:07:30 <alise> oh, I think there was an interpreter for some non-Fractran language
15:07:56 <CakeProphet> well... conway's game of life is turing complete
15:08:06 <oklopol> you can compile minsky machines to fractran pretty easily i think
15:08:36 <oklopol> i've seen some of the gol gadgets
15:09:31 <oklopol> but i haven't really given it much scrutiny
15:11:27 <oklopol> http://www.rendell-attic.org/gol/utm/picture.htm utm
15:12:31 <oklopol> yes probably 99% of that is just wire
15:12:54 <oklopol> well that's the utm, the first one is just some random turing machine
15:13:22 <oklopol> hard to tell much from the pics, because i don't recognize the purpose of anything but gliders
15:13:25 <alise> <CakeProphet> well... conway's game of life is turing complete
15:13:51 <alise> CakeProphet: the tm is boring, the UTM + universal constructor is more interesting
15:14:01 <alise> + the self-replicating-and-destroying computer spaceship (discovered recently; HUGE period)
15:14:09 <alise> + lightspeed communication with agars :)
15:15:27 <CakeProphet> alise, and no... I was referring to the TM implementation
15:15:37 <alise> so? fractran != GoL
15:17:49 -!- Slereah has quit.
15:19:22 <CakeProphet> the people who made this UTM should get a prize or something.
15:20:08 -!- hiato has joined.
15:21:03 <cheater99> remember how i said i would write dinosaur comics that they should make a comic about Lena
15:21:19 <cheater99> well, i'm just reminding you of this
15:21:35 <cheater99> it will be key in understanding what happens during the rest of your life
15:21:44 <alise> No. No it will not.
15:22:35 <alise> You're more than a little creepy :)
15:23:58 <oklopol> eeeeeveryone is creepy in their own way
15:25:14 <CakeProphet> we have far more tabs than the average person open at a given time, apparently.
15:25:37 * CakeProphet is only running 9 right now. Had several more when he was learning how to identify and pick mushrooms.
15:25:54 <alise> oklopol: yeah but you also have your windows set to entirely white consolas on black
15:25:58 <oklopol> i used to have like 50 million on average but i guess the internet is less interesting nowadays
15:26:03 <alise> from the windows theme to every single page in IE
15:26:09 <alise> so basically you're not normal :D
15:26:20 <oklopol> alise: actually currently i don't because i've switched computers, maybe that's why i'm not using internet much
15:26:31 <alise> oklopol: how could you abandon my work
15:26:42 <alise> it was like the most awesome windows could possibly get
15:26:43 * CakeProphet thinks everything has a better UI when it's done in ncurses
15:26:46 <alise> oklopol: but you still have the files right???
15:26:52 <alise> CakeProphet: yes, poor imitations of GUIs >>>> GUIs.
15:27:00 <alise> if you like command-line stuff at least respect what a command-line program is
15:27:09 <oklopol> alise: maybe. if i get it unboomed for long enough to get them
15:27:11 <CakeProphet> ...I don't actually like command line stuff
15:27:13 <alise> i.e. NOT a W.I.M.P. user interface
15:27:18 <CakeProphet> my old client was attached to firefox, which I no longer use
15:27:26 <CakeProphet> so I downloaded this thing for convenience
15:27:45 <alise> let me guess irssi
15:27:55 <alise> either that or weechat
15:28:24 <CakeProphet> I searched "irc client" in apt-cache... it was the first one to come up. :)
15:28:38 <alise> CakeProphet: just use irssi.
15:28:56 <alise> It's probably the most popular IRC client.
15:29:23 <alise> Although if you like the ircII style maybe this "pork" thing which I looked up is better.
15:29:28 <alise> You could just use BitchX though
15:29:47 <alise> http://upload.wikimedia.org/wikipedia/commons/6/61/Debianwithgnomedesktop.png Hey, pork on BitchX's wiki page.
15:29:47 <CakeProphet> chatzilla was the shit... it should be standalone
15:30:09 <CakeProphet> it apparently has perl scripting or some nonsense
15:30:13 <alise> http://chatzilla.rdmsoft.com/xulrunner/
15:30:22 <CakeProphet> I tried it earlier but it segfaulted, decided not to try again.
15:30:37 <alise> (customised to not look like shit)
15:30:40 <CakeProphet> might have something to do with me knowing absolutely nothing about perl
15:31:22 <alise> CakeProphet: my present IRC vehicle: http://imgur.com/herQr.png
15:31:48 -!- adam__ has joined.
15:31:53 -!- CakeProphet has quit (Quit: i <3 pork (http://dev.ojnk.net)).
15:31:58 -!- adam__ has changed nick to CakeProphet.
15:32:05 -!- CakeProphet has quit (Changing host).
15:32:05 -!- CakeProphet has joined.
15:33:20 <CakeProphet> they're almost exactly the same in interface.
15:34:19 <alise> then alt-2 to get back
15:34:23 <alise> (esc 1/esc 2 if that doesn't work)
15:34:50 <CakeProphet> ...I didn't read the second bit about alt-2 before I did alt-1
15:34:57 <CakeProphet> but I kind of caught the pattern, I guess.
15:35:57 <alise> yeah it's one channel per window type dealie
15:36:05 <alise> I think /w works, I forget
15:36:21 <alise> Also, pgup/pgdwn work, and I think alt-pgup/pgdwn work too
15:36:24 <alise> Maybe alt-left/right, I forget
15:39:45 <CakeProphet> instead of a monolithic system message handler thing
15:40:33 <CakeProphet> I might allow C code to wrap some low-level stuff and then have bindings to said code
15:45:44 <cheater99> http://www.rickadams.org/adventure/maps/adv_3.gif
15:46:13 <alise> cheater99: have you read knuth's literate programming version of ADVENT?
15:46:39 <alise> http://www.literateprogramming.com/adventure.pdf
15:47:07 <cheater99> do you know what version the linux 'adventure' is?
15:48:00 -!- oerjan has joined.
15:48:50 <alise> In 1977, Jim Gillogly of the RAND Corporation spent several weeks porting the code from FORTRAN to C under Unix, with the agreement of both Woods and Crowther. It can be found as part of the BSD Operating Systems distributions, or as part of the "bsdgames" package under most Linux distributions, under the command name "adventure".
15:48:54 <alise> so the same one in that pdf
15:51:06 <cheater99> alise: how do i use evince for pdf?
15:51:14 <alise> cheater99: double click the pdf
15:51:32 <oerjan> long time no see, i think
15:52:01 <CakeProphet> I got an idea for a bf-like language and decided it would be opportune to start visiting this channel again.
15:52:04 <alise> cheater99: umm what distro are you using
15:53:09 <alise> http://pastie.org/984342.txt?key=9f9cibbfzj1vkxyfj2blsq Some nondeterministic sketches; array selection and superpositions.
15:53:15 <oerjan> hm i note a disturbing relapse to latin-1 in the irc logs lately
15:53:31 <alise> oerjan: the server sends no encoding headers
15:53:34 <alise> so it's up to your browser to guess
15:53:42 <alise> we really need a nice log interface
15:53:44 <alise> ever since ircbrowse died...
15:54:13 <oerjan> alise: i mean that people are actually _sending_ latin-1 in many cases
15:55:00 <CakeProphet> it's been so long I've forgotten the standard bot command character
15:55:11 <oerjan> i'm quite used to adjusting my browser whenever it guesses the logs wrong
15:55:15 <alise> EgoBot is rewritten
15:55:22 <alise> HackEgo is a free-for-all sandboxed shell
15:55:28 <alise> It uses `, with `run foo running a shell command with multiple args.
15:55:33 <alise> fungot is written in Befunge.
15:55:33 <fungot> alise: check this out at the grocery store before it closes. :( making this crypto. just
15:55:34 <fungot> echo reverb rev rot13 rev2 fib wc ul cho choo pow2 source help hw srmlebac uenlsbcmra scramble unscramble
15:55:39 <fungot> http://git.zem.fi/fungot/blob/HEAD:/fungot.b98
15:55:49 <alise> It babbles, interprets Brainfuck and Underload, and does so many other things.
15:55:54 <alise> And it's written in Befunge-98; have a click.
15:55:57 <alise> And that's all our bots.
15:56:04 <alise> cheater99: what did you DO?
15:56:07 <alise> and screenshot the error
15:56:13 <EgoBot> help: General commands: !help, !info, !bf_txtgen. See also !help languages, !help userinterps. You can get help on some commands by typing !help <command>.
15:56:21 <EgoBot> languages: Esoteric: 1l 2l adjust asm axo bch befunge befunge98 bf bf8 bf16 bf32 boolfuck cintercal clcintercal dimensifuck glass glypho haskell kipple lambda lazyk linguine malbolge pbrain perl qbf rail rhotor sadol sceql trigger udage01 underload unlambda whirl. Competitive: bfjoust fyb. Other: asm c cxx forth sh.
15:56:33 <alise> http://git.zem.fi/fungot/blob/HEAD:/fungot.b98
15:56:34 <fungot> alise: i guess drscheme has more bizarre limits on the number of legitimate e-mail.
15:56:38 <alise> fungot is by far our most impressive bot
15:56:38 <fungot> alise: what was the name
15:56:42 <alise> CakeProphet: we did have lambdabot for a while
15:56:49 <alise> fungot: you even do multiple styles:
15:56:50 <fungot> alise: according to one's intuition of the shapes formed by quenching the metal in cold water. you would not have bothered to help an fnord archive.
15:56:50 <fungot> Available: agora alice c64 ct darwin discworld europarl ff7 fisher ic irc* jargon lovecraft nethack pa speeches ss wp youtube
15:56:54 <fungot> Selected style: alice (Books by Lewis Carroll)
15:56:56 <alise> fungot: In wonderland.
15:56:57 <oerjan> CakeProphet: EgoBot does haskell though not as conveniently as lambdabot
15:57:01 <alise> fungot: yo yo talk
15:57:04 <alise> oerjan: ping fungot plz
15:57:09 <fungot> Deewiant: the knight looked surprised at the question. " if i was oo," said arthur, looking at the house, from below, and pulled down by some one on the planet. then of course the house goes faster than its natural rate of falling: but the snark exclaimed " fnord!"
15:57:17 <fungot> Selected style: irc (IRC logs of freenode/#esoteric, freenode/#scheme and ircnet/#douglasadams)
15:57:39 <alise> If any esolang enthusiast doesn't go into a state of awe upon seeing http://git.zem.fi/fungot/blob/HEAD:/fungot.b98 after seeing what it can do... they have no soul.
15:57:40 <fungot> alise: it means ' fnord' and lots of drugs
15:57:46 <alise> Precisely, fungot. Precisely.
15:57:47 <fungot> alise: it's just so stupid that ' stty erase h' has to be a
15:58:41 <alise> We already knew that -- you implemented the engine upon which fungot sits.
15:58:42 <fungot> alise: if not, you're intricately tied to the parser is very simple
15:58:45 <alise> Or is it still cfunge nowadays?
15:59:18 <alise> CakeProphet: Does it look like noise?
15:59:21 <CakeProphet> I know very very little about Befunge over than it's 2d
15:59:23 <alise> CakeProphet: that's because it's befunge-98 :P
15:59:35 <CakeProphet> :P (don't remember how to do that nonsense with IRC commands)
15:59:39 <alise> CakeProphet: Well -98 is the horribly twisted sequel to Befunge with fingerprints (libraries, basically, so there's socket support and much much more),
15:59:45 <alise> CakeProphet: and also far more complex & advanced semantics
15:59:52 <alise> and bignums, the stack is replaced by a stack of multiple stacks,
15:59:59 <alise> and near-infinitely-sized fungespace...
16:00:05 <alise> (well, limited by bit size)
16:00:24 <oerjan> HackEgo: you're broken
16:00:32 <alise> i broke it yesterdya
16:00:36 <alise> by asking for too many quotes :D
16:01:09 <HackEgo> Runs arbitrary code in GNU/Linux. Type "`<command>", or "`run <command>" for full shell commands. "`fetch <URL>" downloads files. Files saved to $PWD are persistent, and $PWD/bin is in $PATH. $PWD is a mercurial repository, "`revert <rev>" can be used to revert to a revision. See http://codu.org/projects/hackbot/fshg/
16:01:23 <alise> yeah it's the shell part that's broken
16:01:37 <alise> also hey don't revert my quote :P
16:01:42 <alise> CakeProphet: oh yeah and HackEgo, when it's working, is our official quote database
16:02:01 <alise> filled with 90% stuff here, 8% stupid stuff from sine, and 2% stuff that isn't actually quotes at all, or at least not from around here
16:02:11 <alise> oerjan: the revert didn't work btw
16:02:35 <alise> 3 daysHackBotbranch merge
16:02:40 <alise> Maybe this update introduced a bug of some sort?
16:02:42 <alise> Assuming it's an update.
16:03:09 <CakeProphet> so I'm thinking instead of using a straight-up bf-like syntax
16:03:17 <CakeProphet> I'm going to make what is essentially a usable bf
16:03:31 <CakeProphet> with commands that take parameters and such
16:04:31 <CakeProphet> and maybe even integer and character literals if I'm feeling crazy
16:04:49 <oerjan> CakeProphet: HackEgo also uses to have useful ways to lookup things on the web (google etc.) although some of them are broken too
16:05:13 <oerjan> EgoBot is the one with lots of esolangs, including ones we've added ourselves
16:05:21 <CakeProphet> I always thought an I'm feeling lucky command would be useful... to link people to things quickly
16:05:47 <EgoBot> languages: Esoteric: 1l 2l adjust asm axo bch befunge befunge98 bf bf8 bf16 bf32 boolfuck cintercal clcintercal dimensifuck glass glypho haskell kipple lambda lazyk linguine malbolge pbrain perl qbf rail rhotor sadol sceql trigger udage01 underload unlambda whirl. Competitive: bfjoust fyb. Other: asm c cxx forth sh.
16:05:52 <oerjan> CakeProphet: as alise said, it's been majorly rewritten.
16:05:59 <EgoBot> userinterps: Users can add interpreters written in any of the languages in !help languages. See !help addinterp, delinterp, show | !userinterps. List interpreters added with !addinterp.
16:06:14 <EgoBot> Installed user interpreters: aol austro b1ff bc bct bfbignum brit brooklyn bypass_ignore bytes chaos chef chiqrsx9p choo cockney ctcp dc drawl drome dubya echo eehird ehird fudd funetak google graph gregor hello id jethro kraut num ook pansy pirate plot postmodern postmodern_aoler redneck reverse rot13 sadbf sfedeesh sffedeesh sffffedeesh sffffffffedeesh slashes svedeesh swedish valspeak warez yodawg
16:06:52 <oerjan> you add the code for your interpreter in one of the !languages
16:07:01 <oerjan> (it doesn't recurse alas)
16:07:16 -!- uorygl has quit (Ping timeout: 240 seconds).
16:07:24 <oerjan> i mean you cannot add userinterps based on userinterps
16:07:50 <CakeProphet> oh okay... so you define an interpreter in another language that it knows?
16:08:42 <CakeProphet> and by learn ASM I really mean memorize an instruction set.
16:08:42 <oerjan> a lot of those userinterps are just language garbling...
16:08:50 * alise looks for sgeo's quote file
16:08:53 <alise> (hackego's quotes in a text file)
16:08:54 <oerjan> !swedish I am the swedish chef.
16:08:55 <EgoBot> I em zee svedeesh cheff. Bork Bork Bork!
16:09:03 <EgoBot> Installed user interpreters: aol austro b1ff bc bct bfbignum brit brooklyn bypass_ignore bytes chaos chef chiqrsx9p choo cockney ctcp dc drawl drome dubya echo eehird ehird fudd funetak google graph gregor hello id jethro kraut num ook pansy pirate plot postmodern postmodern_aoler redneck reverse rot13 sadbf sfedeesh sffedeesh sffffedeesh sffffffffedeesh slashes svedeesh swedish valspeak warez yodawg
16:09:10 <Sgeo> alise, that would be dependent on Normish still existing
16:09:20 -!- uorygl has joined.
16:09:20 <EgoBot> There is already an interpreter for !
16:10:15 <Sgeo> I'll see what I can do
16:10:36 <oerjan> CakeProphet: the source can be a url, so the interpreters don't need to fit in one line. also if you !show them, you need DCC CHAT to get the whole thing
16:10:41 <alise> isn't there a site which runs a little web page for you in a sandbox or something?
16:10:43 <alise> with some scripting language
16:10:46 <alise> i'm sure there is...
16:10:55 <alise> we can use egobot to generate a file with hackego's quotes!
16:10:57 <alise> now someone do that
16:11:16 * CakeProphet has a free webpage provided by his university. Could host interpreters there.
16:11:28 <alise> i think i theoretically still have that vps
16:11:29 <oerjan> CakeProphet: i'm not sure, Gregor named those language garblers rather weirdly, not as usual
16:11:40 <alise> ix-nay on the atin-lay
16:11:44 <CakeProphet> The only interpreter I have is one for BF written in Haskell.. which is hardly necessary.
16:12:00 <oerjan> (it's from some old unix/linux joke package i think)
16:12:23 <CakeProphet> hmmm... it would be amazing if it could handle language imports through URL
16:12:35 <CakeProphet> so like... I could put the Python interpreter on my web page and load it in. :P
16:12:57 <alise> just write a haskell progam and compile it >_>
16:13:03 <alise> or use that py2binary thing
16:13:19 <CakeProphet> ...I'm far too lazy to actual make my own Python interpreter
16:13:38 <alise> ...i never suggested that
16:13:39 <oerjan> CakeProphet: that might be a bit too large. it does afaik recompile every userinterpreter whenever you use it
16:13:58 <CakeProphet> oh okay... that's why it's kind of slow it seems.
16:14:17 <oerjan> (or pass it to the underlying language interpreter, to be precise)
16:15:03 <oerjan> CakeProphet: you _should_ be able to do that with HackEgo, if it were working
16:15:23 <CakeProphet> alise: oh, you're saying I should compile the python interpreter and then have a script that invokes it.
16:15:34 <alise> CakeProphet: although that would work.
16:15:44 <alise> CakeProphet: but really, all you need to do is use one of those python to binary bundlers
16:15:46 <alise> that bundles the interp in
16:15:47 <cheater99> who will guess what i am having a sandwich with
16:15:52 <alise> CakeProphet: binaries can be cgis too you know
16:15:56 <alise> OR, just write it in haskell and compile that.
16:16:06 <CakeProphet> I didn't know py2exe would just bundle the interpreter standalone.
16:16:51 <alise> py2exe is justwindows only isn't it
16:16:57 <alise> i'm sure there's a linux equiv
16:17:18 <alise> `run sqlite3 quotes/quote.db VACUUM
16:17:25 <alise> cheater99: not on shared hosting...
16:17:35 <alise> just upload a linux python binary + invoke it with a shell script cgi if that's the case
16:17:42 <CakeProphet> Python's hardly worth the trouble though... unless I expand a { } ; version of the syntax first before I run the interpreter
16:18:19 <alise> egobot accepts urls
16:18:23 <alise> !python http://google.com
16:18:28 <alise> !c http://google.com
16:18:43 <alise> that loaded http://google.com and interpreted it as c source
16:18:46 <CakeProphet> alise: so that I can use {}'s instead of indents on a single line
16:18:59 <alise> to make a !python command
16:19:03 <alise> my bot had that once
16:19:14 <alise> ; to newline (so it worked for control structures), { and } worked to adjust indent
16:19:24 <CakeProphet> actually what I'd do is expand a special {} syntax... and then plug that in as input to an interactive version of Python
16:19:32 <alise> def fact(n): { if n == 0: { return 1 } else: { return n * fact(n-1) } }
16:19:38 <alise> i called it braces or something
16:19:50 <alise> CakeProphet: i just ran it through the evaluator
16:20:02 <alise> since it can handle multiline stuff
16:20:06 <alise> it also handled expressions though
16:20:08 <alise> and printed their output
16:20:10 <alise> was a very clever evaluator
16:20:15 <alise> CakeProphet: i know factorial off by heart...
16:20:38 <cheater99> i am having a sandwich with quadruple, that's right, QUAD bacon.
16:21:00 <alise> CakeProphet: shift [ ]
16:21:33 <CakeProphet> fast for regular characters, but shifting takes a long time.
16:22:59 <CakeProphet> alise: hmmm, yeah to choose whether or not to print-eval or exec... you could check for python keywords.
16:23:18 <alise> CakeProphet: i ran it as an expression first, and if it gave a syntax error as a statement iirc
16:23:24 <alise> but i checked the syntax error twice
16:23:29 <alise> i don't recall exactly how
16:23:32 <alise> but it was v. clever code
16:23:37 <alise> did what you wanted all the time
16:23:45 <alise> if there was one thing I'd change I'd make { add a : before it
16:23:57 <alise> def fact(n) { if n == 0 { return 1 } else { return n * fact(n-1) } } would be nicer
16:24:04 <alise> argh, now I'm obligated to write it again
16:24:11 <alise> CakeProphet: it even handled {} in strings and stuff
16:24:16 <alise> the useless enterprise solution!
16:24:57 <alise> i know what you meant
16:28:09 <CakeProphet> !glass {M[m(out)O!"Hello, World!"(output)o.?]}
16:28:16 <CakeProphet> !glass {M[m(out)O!"Hello, World!"(out)o.?]}
16:30:16 <CakeProphet> stack-based languages are one of my favorite language designs
16:31:54 <CakeProphet> if you wanted to get fancy with the interpreter you could have like a hook-interface so that interpreters could keep track of state and give you a list of its global namespace... if it has such a thing.
16:34:04 <CakeProphet> !glass {M[m(out)O!(math)A!22(math)a.?(out)o.?]}
16:34:12 <CakeProphet> !glass {M[m(out)O!(math)A!22(math)a.?(out)(on).?]}
16:34:22 <Sgeo> http://www.1010wins.com/Desperately-Seeking-Sailor/7355267
16:34:26 <Sgeo> Why is this news?
16:34:42 <CakeProphet> !glass {M[m(out)O!(math)A!<2><2>(math)a.?(out)(on).?]}
16:34:48 <alise> everything is news
16:35:04 <alise> i was worried there for a minute
16:35:39 * Sgeo unstickies his v key
16:35:49 <CakeProphet> I think a made a piglatin program in Glass once
16:36:06 <Sgeo> the quick brown fox jumps over the brown dog.
16:36:25 <oerjan> !glass {M[m(_s)S!(_o)0O!o.<34>(_s)(ns).?"{M[m(_s)S!(_o)0O!o.<34>(_s)(ns).?""14?24?14?24?24?04?24?04?]}"14?24?14?24?24?04?24?04?]}
16:36:26 <EgoBot> {M[m(_s)S!(_o)0O!o.<34>(_s)(ns).?"{M[m(_s)S!(_o)0O!o.<34>(_s)(ns).?""14?24?14?24?24?04?24?04?]}"14?24?14?24?24?04?24?04?]}
16:36:32 <Sgeo> Should have said "jumped" to see alise's reaction
16:36:56 <CakeProphet> oerjan: hmmm... let me see if I can decipher
16:38:30 * oerjan has forgotten how he did it, anyhow
16:39:03 <oerjan> but presumably i put the necessary strings on the stack, + the output function
16:39:50 <oerjan> 4? means output the string on top of stack
16:39:55 <CakeProphet> the first Quine I figured out was in Python... but Python makes it too easy.
16:40:12 <CakeProphet> well... that's not what it means by itsel I don't think.
16:40:14 <oerjan> well glass wasn't too hard either
16:40:31 <oerjan> no, but given that the output function is in the right place
16:41:09 <CakeProphet> I always forget that numbers are enclosed with <> and a number by itself is a stack position
16:41:17 <oerjan> the stack is <output function> <" character> <first substring> <second substring>
16:41:24 <cheater99> alise, those listings in that pdf are absolutely unintelligible for me.
16:41:32 <alise> cheater99: which listings
16:43:19 -!- Phantom_Hoover has joined.
16:43:57 <Phantom_Hoover> Briefly sum up what you have been talking about without using the letter 'r'.
16:44:26 -!- SgeoN1 has joined.
16:44:38 <oerjan> Phantom_Hoove: the last thing was my glass quine
16:44:40 <CakeProphet> let me see if I can remember how to do the Python quine without google.
16:44:41 -!- poiuy_qwert has joined.
16:44:46 <alise> cheater99: unintelligible how?
16:44:50 <alise> you don't understand them?
16:45:25 <alise> I have been talking about things; mostly of an unusual nature; esolangs indeed.
16:46:33 <CakeProphet> >>> print (lambda s: s%s)('print (lambda s: s%%s)(%r))')
16:46:34 <CakeProphet> print (lambda s: s%s)('print (lambda s: s%%s)(%r))'))
16:47:07 <Phantom_Hoover> Although it returns a sexp, rather than printing a string
16:47:19 <alise> ((lambda (x) (list x `(quote ,x))) '(lambda (x) (list x `(quote ,x))))
16:47:23 <alise> or, more traditionally
16:47:26 <CakeProphet> print (lambda s: s%s)('print (lambda s: s%%s)(%r)")
16:47:47 <alise> ((lambda (x) (list x (list (quote quote) x))) (lambda (x) (list x (list (quote quote) x))))
16:47:56 <CakeProphet> python's % operator makes it way too easy to do with a continuation
16:48:04 <oerjan> !haskell main=putStrLn$s++show s where s="main=putStrLn$s++show s where s="
16:48:05 <alise> ((lambda (x) `(,x ',x)) (lambda (x) `(,x ',x)))
16:48:12 <EgoBot> main=putStrLn$s++show s where s="main=putStrLn$s++show s where s="
16:48:31 * alise wonders what's the easiest way in python to find the last element of an array that isn't a space...
16:49:08 <alise> that's strings, CakeProphet
16:49:21 <alise> Phantom_Hoover: i wrote it for scheme but - how does it fail?
16:49:32 <cheater99> alise, not only that, but it's just difficult to make sense out of it.
16:49:32 <alise> cheater99: it's just C code, albeit 70s era
16:49:34 <oerjan> CakeProphet: haskell's show is pretty similar to %r
16:49:34 <CakeProphet> string processing in Python is wonderfully simple.
16:49:40 <Phantom_Hoover> alise: It gives the thing it prints for compiled lambdas.
16:49:41 <alise> cheater99: knuth didn't write the code btw
16:49:52 <alise> cheater99: it's not, actually
16:49:55 <alise> because the adventure game is very linear
16:49:59 <alise> and basically a big linear data structure
16:50:04 <alise> but there is no "nesting"
16:50:15 <alise> it's not like usual c code, but it's not the wrong way to write it
16:50:17 <cheater99> http://www.qwantz.com/index.php?comic=589
16:50:19 <alise> Phantom_Hoover: well i dunno
16:50:24 <cheater99> here's a nonlinear data structure for you
16:50:32 <Phantom_Hoover> ((lambda (x) (list x `(quote ,x))) '(lambda (x) (list x `(quote ,x))))
16:50:32 <Phantom_Hoover> ((LAMBDA (X) (LIST X `',X)) '(LAMBDA (X) (LIST X `',X)))
16:50:52 <Phantom_Hoover> (#<FUNCTION (LAMBDA #) {B3E70C5}> '#<FUNCTION (LAMBDA #) {B3E70C5}>)
16:51:14 <alise> Phantom_Hoover: because you can't do
16:51:19 <alise> ((lambda ...) x) in L... wait, yes you can
16:51:21 <alise> that's an exception, i forgot
16:51:42 <oerjan> !slashes http://oerjan.nvg.org/esoteric/slashes/quine.sss
16:51:58 <Phantom_Hoover> alise: Actually, I think you missed a quote somewhere.
16:52:12 <alise> ((lambda (x) `(,x ',x)) '(lambda (x) `(,x ',x)))
16:52:17 <CakeProphet> alise: array.reverse(); array.remove(" "); array[0]
16:52:33 <CakeProphet> and it's destructive too, which is terrible.
16:52:33 <alise> spaces aren't just " "s :P
16:52:33 <EgoBot> /\/\/\/\\\\/\\\\\\\/\\\\\\\/\\\\\\\/\\\\\\\\\\\\\\\\\\\\\\//\/\/\/\\\/\/\\////\\////\\\///\\////\\\///\\////\\\///\\////\\\///\\\///\\\///\\\///\\////\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\////\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\////\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\////\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\////\\////\\\///\\////\\\///
16:52:39 <alise> even ''.join(lst).strip()[-1] is better
16:52:48 <alise> how is that the output of test
16:52:53 <CakeProphet> alise: well... I assumed you meant a list of arbitrary data
16:53:09 <CakeProphet> and not strings, which is what you need for join
16:53:09 <oerjan> alise: it isn't, EgoBot has a bug where sometimes it gives the output on the following command instead
16:53:26 <oerjan> (that's not the whole quine btw, it's too long for irc)
16:54:01 <CakeProphet> arise: so if the element is any amount of space it should be ignored?
16:55:02 <alise> i need to skip spaces :3
16:55:33 <CakeProphet> alise: oh are you working on it right now?
16:55:48 <oerjan> CakeProphet: slashes (///) is uorygl's language, you may not have been around when i showed it TC </brag>
16:56:03 <CakeProphet> oerjan: it looks vaguely familiar. How does it work semantically?
16:56:34 <alise> >>> print debrace('if x { y } else { z }')
16:56:43 <CakeProphet> alise: if you give me a concise summary of the problem you're trying to solve for my sleep deprived brain... I could help you figure out the best way to do it. Python is my strongest language by far.
16:57:02 <alise> >>> print debrace('def fact(n): { if n==0 { return 1 } else { return n * fact(n-1) } }')
16:57:03 <alise> return n * fact(n-1)
16:57:08 <alise> if ''.join(self.result).rstrip()[-1] != ':':
16:57:08 <alise> self.result.append(':')
16:57:15 <alise> to make sure that it doesn't add a : if you already did
16:57:27 <oerjan> CakeProphet: /// commands substitute, with \ escaping characters. everything else is printed, also with \ escaping
16:57:34 <cheater99> are there quines that don't print themselves, but what they print, if run, prints the original quine?
16:57:57 <CakeProphet> alise: that works. To be more accurate you might want to use uh.....
16:58:15 <alise> >>> print debrace(open('example.bs').read())
16:58:19 <alise> return n * fact(n-1)
16:58:27 <alise> source of example.bs:
16:58:37 <alise> return n * fact(n-1)
16:58:45 <alise> CakeProphet: ah, like formfeeds and stuff?
16:58:47 <alise> i don't think i'll bother supporting that
16:58:57 <CakeProphet> alise: yeah, tabs, and some other shit I don't... whatever /x0 is
16:59:15 <CakeProphet> alise: actually that's a bad idea because it includes \n
16:59:17 <alise> >>> '\t'.isspace()
16:59:22 <alise> so does .isspace()
16:59:25 <alise> but that doesn't matter :P
16:59:38 <oerjan> cheater99: iirc the steps don't even need to be all in the same language
17:01:07 <alise> SgeoN1: BraceS, my code that transforms Python-but-with-braces into Python
17:01:16 <CakeProphet> alise: and yeah, isspace() is lambda self: return (self in string.whitespace)
17:01:17 <alise> My god, it almost supports GNU style
17:01:26 <alise> return n * fact(n-1)
17:01:35 <alise> I just have to make : add to the previous line instead of the current one
17:01:47 <CakeProphet> alise: does it add the colon if the brace is trailing like that?
17:01:55 -!- sebbu2 has joined.
17:02:16 <alise> SgeoN1: worst indentation style in the world
17:02:25 <alise> return n * fact(n-1)
17:02:26 <CakeProphet> alise: that might significantly complicate your algorithm since you likely use a vanilla for loop.
17:03:07 <SgeoN1> Each brace on its own line?
17:03:29 <CakeProphet> def keepLast(string): oldLine = ""; for line in string: yield oldLine, line; oldLine = line;
17:04:00 -!- sebbu has quit (Ping timeout: 276 seconds).
17:04:01 -!- sebbu2 has changed nick to sebbu.
17:04:14 <CakeProphet> and that'll give you the last line in your loop.
17:04:16 <oerjan> cheater99: actually it seems to be iterat*ing* quine
17:04:33 <alise> CakeProphet: i don't use a vanilla for loop
17:04:43 <CakeProphet> alise: oh... well nevermind. Generators are cool. :P
17:05:01 <alise> CakeProphet: Not a generator.
17:05:03 <CakeProphet> the coroutine style generator in Python is probably my favorite thing ever.
17:05:04 <alise> It should be though
17:05:12 <alise> Sgeo: and every brace 2-indented
17:05:15 <alise> with the body 2-indented
17:05:50 <CakeProphet> I made a pretty sweet menu interface once for a online text-based game using coroutines
17:05:53 <oerjan> cheater99: http://www.nyx.net/~gthompso/self_iter.txt has some with more than one language as well
17:06:03 <CakeProphet> you would use yield to prompt the user and then the yield would evaluate to their next input.
17:06:26 <CakeProphet> and you'd throw StopIteration when your menu exits... and it would pop off the menu stak
17:08:14 <CakeProphet> alise: once you finish that. We should get a regular interpreter hosted and then use that to run your program as an interpreter.
17:10:58 <CakeProphet> alise: I don't know if I still have it in a working state, but I had a Python program that essentially printed 2+2, but the source code was obfuscated to span several screens while still just being a single logical line of code. :D
17:11:20 <CakeProphet> though I think I fucked it up somehow and it doesn't run correctly anymore.
17:12:49 <oerjan> ambition, distraction, uglification and derision
17:12:53 <CakeProphet> I used a lot of fancy Python internal stuff instead of their normal names
17:13:31 <CakeProphet> and then I convert strings into arrays of ints... and then take those ints and split them up with arithmetic
17:14:03 <alise> CakeProphet: Silly idea: I could have this thing support new syntactical structures
17:14:06 <alise> like if you define foo as a structure
17:14:07 <CakeProphet> I found it, and it works, but now it assigns x = "Hello, World!"
17:14:15 <alise> calls a function at compile time, foo
17:14:18 <alise> with bar and baz as strings
17:14:23 <CakeProphet> Python is way too conservative with its syntax, in my opinion
17:14:25 <alise> so you could do, e.g.
17:14:31 <alise> @define foo foo_handler
17:14:38 <alise> @define unless unless_handler
17:14:52 <alise> def unless_handler(cond, body): return build_if('!('+cond+')', body)
17:14:53 <oerjan> python believes in language family values
17:15:40 <CakeProphet> alise: could you have it accessible via the interpreter environment so that we could define new structures on Egobot?
17:15:43 <Phantom_Hoover> *Everything* is too conservative in its syntax. Unless it lets you rewrite the entire syntax.
17:16:31 <oerjan> Phantom_Hoover: there _is_ such a thing as balancing conflicting requirements, you know
17:16:53 <alise> ooh, we could even have little function macros
17:17:08 <alise> @macro incr(x) x = x + 1
17:17:47 <alise> >>> print debrace('abc {}')
17:18:39 <CakeProphet> alise: you can give eval and exec a local and global scope to operate in... I'd make a custom dictionary object that kept a "stable" version of each scope. On writes to the dictionary it would update the "unstable" scope... so later you could clear the unstable state only and still have the rest of your program intact
17:19:00 <CakeProphet> alise: since your namespace will get overpopulated overtime.
17:19:06 <CakeProphet> and you might want to run a cleanup occasionally.
17:20:20 <CakeProphet> the custom dictionary object would be if you wanted IRC programs to be able to access your interpreter internals... such as the macro thing.
17:20:58 <CakeProphet> ...assuming EgoBot can even let you keep track of state over consecutive commands.
17:21:47 <EgoBot> /home/egobot/egobot.hg/multibot_cmds
17:22:12 <CakeProphet> and a bit more complicated to implement I think.
17:22:50 <CakeProphet> you'd basically just keep a pickled dictionary
17:23:35 <Phantom_Hoover> I suppose you could do something mad like have a background process.
17:23:58 <CakeProphet> I think pickling would be easier to code, if less efficient.
17:24:09 <CakeProphet> but it's Python... Python doesn't give a fuck about efficiency
17:25:21 -!- kar8nga has joined.
17:25:31 <CakeProphet> I'm assuming EgoBot is running in a sandbox right? It would be mad to not chroot it or something equivalent.
17:26:43 <CakeProphet> though it would be nice if you could somehow get a safe-to-play in version of root.
17:27:27 <CakeProphet> ....wait, how does "ls" work? sh can still access /usr/bin I guess?
17:27:38 <alise> wow, so here is a fun challenge in python: Write a function that, given an array of strings, will give (i,j,c) such that IF ARY IS EMPTY: it appends '' to ary returns (0,0,''); IF ARY HAS NO NON-SPACES: it returns (-1, -1, ''); OTHERWISE, it returns (i,j,c) such that ary[i][j] == c, not c.isspace() and there are no non-spaces after c in the array.
17:27:47 <alise> Also, some efficiency is nice.
17:27:50 <alise> Fun fact: This is a bitch.
17:27:54 <alise> CakeProphet: it's not just chroot
17:27:57 <alise> chroot is not nearly secure enough
17:28:08 <Phantom_Hoover> CakeProphet: It sends it through DCC if there's much input.
17:28:36 <alise> CakeProphet: just write it! :P
17:28:52 <CakeProphet> alise: I'll contribute some code, happily. :)
17:29:04 <alise> (pronounced hooray)
17:29:25 <CakeProphet> I always know something is wrong with my design in Python if I have to resort to lots of tuples in my string parsing.
17:29:33 <CakeProphet> but this might be the best way to do it in this case... dunno.
17:29:42 <EgoBot> bin dev etc home lib lib64 proc tmp usr
17:30:05 <alise> CakeProphet: no, you should just need to iterate through indices in reverse, i think
17:30:40 <CakeProphet> alise: I don't know what these tuples are supposed to represent exactly.
17:31:01 <alise> CakeProphet: last non-space char, with some helpful stuff for my parser
17:31:29 <oerjan> CakeProphet: EgoBot doesn't allow you to preserve files across commands. HackEgo does (but is currently broken).
17:31:47 <CakeProphet> ah... so I guess a background process would be the way to go.
17:32:30 <CakeProphet> alise: basically this function is to see if the last char is a space right?
17:32:39 <alise> ok here's what it's for
17:32:52 <alise> we use it to find the last non-space character. if it's not a colon, then we insert a colon /right after it/
17:32:54 <alise> this is why we need the position
17:32:55 <EgoBot> /tmp/input.8691: line 1: fred: Permission denied
17:32:57 <alise> to insert a colon right after it
17:32:59 <alise> so that foo\n{ works
17:33:02 <alise> you can't just insert a :
17:33:03 -!- MigoMipo has joined.
17:33:05 <alise> because it becomes foo\n:
17:33:08 <alise> but if you know where o is
17:33:11 <alise> then you can add : after
17:33:15 <alise> CakeProphet: get it?
17:33:50 <CakeProphet> indeed. It's a backtrack function to add a colon to a previous line, right?
17:33:56 <alise> the appending '' is just so that our assignment works even if it's []
17:34:00 <alise> although that's never valid who cares
17:34:05 <alise> CakeProphet: pretty much, except this one doesn't mutate
17:34:08 <alise> just gives the relevant coords
17:34:10 <alise> you could change that
17:34:12 <alise> actually probably a good idea
17:34:22 <alise> I'ma try rewriting it as mutation, you can have a go too, yours will probably be better
17:34:27 <CakeProphet> I generally take advantage of mutability in Python.
17:34:39 <alise> yeah, use your lang's "strengths" and all
17:34:45 <alise> not that python has many... thanks for that guido :P
17:34:49 <alise> CakeProphet: it's in a class so
17:35:21 <alise> i really need to get around to writing Endeavour/botte/rice sometime
17:35:27 <alise> (the three tentative names for my uber-bot)
17:35:38 <alise> it would include this :-)
17:35:53 <alise> endeavour would have a complete irc framework thingy, plus really extensible plugins that can access a generic datastore
17:35:56 <CakeProphet> sweet. You should let it keep an active process for each interpreter.
17:35:58 <alise> tons and tons of sandboxed interpreters
17:36:04 <alise> like egobot, hackego and lambdabot in one
17:36:08 <CakeProphet> lots of development time too, I assume. ;)
17:36:14 <alise> also terminatable "commands"
17:36:17 <alise> like the !ps of old egobot
17:36:22 <alise> is it still there?
17:36:27 <alise> CakeProphet: yeah it's vaporware
17:36:33 <alise> still don't like any language yet :D
17:36:49 <CakeProphet> if you had a repos of some kind I wouldn't mind working on it in my free time. I miss doing stuff on #esoteric
17:37:04 <CakeProphet> I assume it's a semi-distant-future thing though
17:37:23 <alise> Probably I should get my life sorted out first.
17:37:29 <alise> Semi-distant, yes, but I'd like to have it /some/ day at least
17:37:41 <alise> Oh, and a lot of the interpreters would have user-specific data storage places
17:37:45 <alise> that other people can access but not mutate
17:37:54 <alise> and the whole thing would also serve as a logbot and a quotebot...
17:38:02 <alise> with presumably some sort of web server attached to it to serve those
17:38:11 * Sgeo would buy the OLPC tablet
17:38:17 <alise> basically were it written the website + it on irc would be all you ever need to do anything even vaguely related to esoterica :P
17:38:25 <CakeProphet> alise: I would download copies of source from URL instead of constantly web-accessing them.
17:38:37 <alise> CakeProphet: yes, ofc
17:38:45 <CakeProphet> alise: I don't know if you keeps notes or anything. Whenever I work on something big I keep tons of notes.
17:39:16 <alise> It's always all in my head.
17:39:24 <alise> I can't seem to articulate a complete vision of anything.
17:39:31 <alise> hmm... it'd be nice if I could add variable declarations to Python
17:39:33 <CakeProphet> as far as language I'd do Python simply because it's a task that doesn't require too much efficiency.. and Python is fast to develop in if you're good at catching bugs before they happen.
17:39:34 <alise> the "global" mess is so stupid
17:39:57 <alise> you have to do "var x = y" before using it
17:40:04 <alise> without it, closures don't work (which is why python is shit)
17:40:19 <alise> something like that.
17:41:18 <alise> def hahahaha(): { x = 0; def inner(): { x = x + 1; return x }; return inner }
17:41:24 <alise> because x is a local variable in inner
17:41:28 <alise> so we just get an "undefined variable x" error
17:41:30 <uorygl> Hey, it's CakeProphet!
17:41:32 <alise> THIS works however:
17:41:38 <CakeProphet> alise: oh yeah. They added that in Python 3 actually
17:41:44 <alise> def ihateyou(): { x = [0]; def inner(): { x[0] = x[0] + 1; return x }; return inner }
17:41:55 <alise> CakeProphet: yeah but "nonlocal" is so silly, just make people use "var" or "def" first thing :P
17:41:59 <alise> Phantom_Hoover: nope.
17:42:31 <CakeProphet> alise: though I guess it could interfere with some dynamicism... but not really. If you just made it a compile-time thing and then scratched it at runtime... all the runtime binding features would still work fine.
17:42:51 * Sgeo winces and opens IE
17:42:53 <Phantom_Hoover> Blargh, I've forgotten how to swap () and [] in Slime.
17:44:47 <CakeProphet> it has similar quickness-of-programming to Python, but has type safety
17:44:48 -!- ws has joined.
17:45:03 <CakeProphet> the syntax is a little weird though... and it's still in rough stages of development.
17:45:04 <alise> By Ken Thompson and Russ Cox, my heroes.
17:45:09 <alise> I don't mind the syntax.
17:45:25 <alise> It's... just python with braces
17:45:52 <alise> Eh, name type is older than type name.
17:45:58 <CakeProphet> semantically it's fairly different from Python too. More like a mix of the good parts of Java and Erlang
17:45:59 <alise> Besides, you know, Ken Thompson?
17:46:10 <alise> Sure, he didn't make C.
17:46:20 <alise> But he worked right next to the guy who made C on the same operating system that it was designed for.
17:46:28 <alise> So, it's basically them reversing their own decision.
17:46:30 <alise> Phantom_Hoover: Well, yes.
17:46:34 <alise> Phantom_Hoover: But in the 70s C was nice.
17:46:37 <alise> Memory management didn't matter then.
17:46:51 <alise> CakeProphet: Also, hey, Thompson and Pike invented UTF-8 in one day.
17:46:53 <CakeProphet> C++ is a clusterfuck, however. Syntactically.
17:47:02 <alise> Phantom_Hoover: No... on UNIX, you just did
17:47:10 <uorygl> UTF-8 seems like an easy thing to invent in one day.
17:47:16 <CakeProphet> but I should state my ignorance of C++ in general. I know C far better.
17:47:18 <alise> "But what if someone types more than 80 characters?" "The system would crash. But why would you do that?"
17:47:32 <alise> uorygl: not when you consider the previous encoding clusterfucks
17:47:36 <alise> simplicity isn't easy
17:47:53 -!- hiato has quit (Quit: underflow).
17:47:54 <CakeProphet> alise: yeah. c is nice when you get your design correct... but you also have to rely on everyone else getting their design correct.
17:48:03 <alise> And nobody being malicious...
17:48:03 <uorygl> "Hey, how should we represent a variable-length character?" "I dunno, maybe we should use the first byte to encode the length and some data, and further bytes to encode the rest of the data."
17:48:10 <alise> CakeProphet: hmm, darn, my solution to insert_colon mutated a list i was iterating over
17:48:16 <alise> pretty sure that's verboten even if you stop right after, yeah?
17:48:28 <alise> uorygl: it wasn't seen as variable length then though
17:48:33 <alise> it was seen as a 16-bit character set
17:48:55 <CakeProphet> alise, oh, did you ever get satisfied with your Python code so that I can look at it?
17:49:16 -!- sebbu2 has joined.
17:49:32 <uorygl> CakeProphet: I was probably called something else when you left. Like Warrigal or kerlo or ihope or something.
17:49:51 <CakeProphet> it's pretty nifty though. Suffers from poor support. But the language design is neat.
17:49:54 <alise> CakeProphet: almost there
17:50:23 -!- sebbu has quit (Ping timeout: 252 seconds).
17:50:23 -!- sebbu2 has changed nick to sebbu.
17:50:36 <uorygl> CakeProphet: I don't remember what that one thing was, but you probably do, so tell me about it.
17:51:01 <alise> >>> debrace('if\n{abc}')
17:51:13 -!- hiato has joined.
17:51:13 <uorygl> CakeProphet: darn, you don't remember after all.
17:51:28 <CakeProphet> alise: it might be better to check for keywords on lines and end with a colon if it doesn't
17:51:31 <uorygl> CakeProphet: oh, maybe I was planning to create an operating system and you were planning to help, or something.
17:51:41 <CakeProphet> alise: ...it's easier than you would think
17:51:42 <alise> CakeProphet: custom structures remember :D
17:52:09 <CakeProphet> alise: Just keep a list of them. Simple enough.
17:52:18 <CakeProphet> alise: check the keyword list and the custom structures list
17:52:33 <alise> CakeProphet: no this is much cooler :|
17:52:38 <CakeProphet> alise: also check out import keyword; keyword.kwlist
17:52:59 <CakeProphet> though it doesn't give you the indent-only keywords
17:53:05 <CakeProphet> stuff like and, as, break, class, etc are in there
17:53:39 <CakeProphet> though, since you're not checking /every/ keyword... you wouldn't use that.
17:53:47 <alise> >>> debrace('if\n{abc}')
17:53:48 <alise> ;; problem here is, the newline done by the \n is when it was thinking it was totally 0 indenting
17:53:58 <alise> I can just right-strip the text
17:54:08 <alise> though that'd be inefficient...
17:54:18 <alise> not on a list of strings
17:54:27 <CakeProphet> alise: not as much as you'd think. strip() is written in C. In Python world that's fast.
17:54:42 <alise> aha, .isspace() works on multiple strings
17:54:57 <CakeProphet> alise: pretty much all the string functions are C. multiple for loops in Python are still lightspeed in Python.
17:55:40 <CakeProphet> Python in general runs about 100x slower than C
17:56:16 <CakeProphet> so when you can, avoid custom loops over C-based built-ins
17:56:25 <CakeProphet> because multiple calls to those will be much faster than your hard-coded loops
17:57:07 <CakeProphet> thinking about efficiency in Python is completely different from thinking about efficiency in languages like C.
17:57:47 <Phantom_Hoover> If you're worried about efficiency just write it in something else.
17:57:52 <CakeProphet> oh... and avoid string concatenation. If you're doing a lot of inserts and appends stick to lists. mutable = no re-allocation
17:58:12 <alise> concatenation = what i need to do to strip
17:58:54 -!- kar8nga has quit (Remote host closed the connection).
17:58:57 <CakeProphet> Python "lists" are C arrays that automatically resize in a semi-heuristic "smart" way.
17:58:58 <alise> i'm so happy i could fuck a goat
17:59:18 <alise> all i need to do is stop it mutating >_>
17:59:22 <alise> while it's iterating over a list
17:59:26 <alise> because dat ist verboten
17:59:53 <CakeProphet> Phantom_Hoover: though there's an array module that lets you use C, typed, fixed sized arrays. It's for extreme cases where you want C array efficiency but don't want to write it in C
18:00:30 <CakeProphet> alise: would making a copy of the list break the semantics? If you make a copy you're mutating a different list.
18:00:55 <alise> CakeProphet: I've got it working perfectly
18:01:01 <alise> mutating yet safe, and quite elegant code too!
18:01:17 <alise> lodgeit is the best paster site for python right?
18:01:35 <CakeProphet> there was a good one, but I think it's down now.
18:01:37 <alise> I'll use the vjn.fi pastebin, for old times
18:01:43 <alise> I could use sprunge, but eh
18:01:57 <alise> CakeProphet: http://www.vjn.fi/pb/p3542786123.txt
18:02:05 <alise> The code isn't ugly, but it's a bit long for my tastes.
18:02:09 <CakeProphet> A quick scan of the #python title suggests http://paste.pocoo.org/
18:02:13 <alise> I think using generators and other whizz-bang features could make it nicer, but this is acceptable.
18:02:16 <alise> pocoo is the lodgeit one iirc
18:02:24 <alise> CakeProphet: what was the perfect one called?
18:02:34 <alise> http://www.vjn.fi/pb/p3542786123.txt
18:02:34 <CakeProphet> alise: ...I can't even remember now. It's been so long.
18:02:36 <alise> i pasted it already :P
18:02:49 <alise> wait, I want to make one change
18:03:07 <CakeProphet> alise: haha. Okay. (That happens to me too. I hate it)
18:03:14 <alise> CakeProphet: http://www.vjn.fi/pb/p9416389493.txt
18:03:19 <alise> yeah there's all those tiny little things that you just suddenly notice
18:03:23 <alise> after exiting the main-problem-zone
18:03:51 <alise> CakeProphet: Example input: http://www.vjn.fi/pb/p4361828264.txt
18:04:18 <alise> Things I'd like: Some way to fool the Python interpreter, when it evaluates it, into matching up source lines with their results, so that e.g. braced oneliners work properly. (This is impossible.)
18:04:21 <CakeProphet> alise: do you have any kind of command-line support.. or is it just called in a larger package?
18:04:26 <alise> And, uh, what's the other thing...
18:04:32 <alise> CakeProphet: this is all i've written so far
18:04:37 <alise> debracer(some_string) works fine on the console to test it
18:05:00 <CakeProphet> alise: I'm not sure what you mean by matching up source lines.
18:05:31 <alise> LOL YOU FUCKED UP AT LINE 72
18:05:34 <alise> when your file is a one-liner using braces
18:05:38 <alise> it'd say LOL YOU FUCKED UP AT LINE 1
18:05:43 <alise> YOU FUCKING FAILURE, YOU MESSED UP A ONELINER
18:05:47 <alise> 'specially the insults would be good.
18:05:52 <CakeProphet> alise: If you want to make it a command-line tool just define a main function and then at the bottom of the source file do if __name__ == "__main__": main()
18:06:16 <alise> CakeProphet: I want to add more to it before making it a tool
18:06:20 <alise> CakeProphet: because
18:06:24 <alise> if abc { def { sadposdf } }
18:06:37 <alise> so imagine a huge oneliner in that
18:06:40 <alise> the translated python would be run
18:06:42 <alise> python spots an error
18:06:46 <alise> complains about the line in the translated code
18:06:49 <CakeProphet> but yeah the __name__ == "__main__" is one of those weird Python idioms that they seem to have ignored in their quest to make clean code.
18:06:57 <alise> so this basically makes line/column error messages useless if you actually utilise the braces stuff
18:07:17 <CakeProphet> alise: aaaaah, I see. You want it to automatically put a one-line block on the same line as the statement.
18:07:31 <alise> CakeProphet: you know C's #line?
18:07:32 <CakeProphet> you just want it to correspond to your source file. Gotcha now.
18:08:06 <alise> I don't think Python has a #line
18:08:10 <alise> it may have some wacky assignment to do it though
18:08:16 <alise> and then what about column
18:08:17 <alise> it'd have to be offset
18:08:19 <CakeProphet> but you could give your tool an error output that would be useful.
18:08:29 <alise> if it does do all this then this is veering away from joke preprocessor into compile territory
18:08:35 <alise> CakeProphet: it's python that'd make the error
18:08:38 <alise> i guess i could maintain a reverse map
18:08:43 <alise> line in python -> line and col in braces
18:09:05 <CakeProphet> I think I remember seeing something similar to the problem you're describing
18:09:45 <alise> i could offset indents and shit
18:09:48 <alise> so that i could look up a line
18:09:52 <alise> and see where it starts, line col in the braces source
18:09:55 <alise> but that would be a fucking pain.
18:09:57 <CakeProphet> essentially you'd a way to pass around the line number data... and then in the code where you evaluate, catch the exception, alter the traceback, and print
18:10:05 <CakeProphet> I think there's actually an easy way to do that.
18:10:43 -!- Portponky has joined.
18:11:11 <alise> if n == 0 { return 0 }
18:11:11 <alise> elif n == 1 { return 1 }
18:11:11 <alise> else { return fib(n-1) + fib(n-2) }
18:11:27 <alise> CakeProphet: in my happy future land it'd be nice if you could omit the returns, too
18:11:27 <CakeProphet> alise: at the moment we'll call it impossible... but if I stumble upon a possible solution I'll let you know.
18:11:36 <alise> and then let the if go AFTER the statement. Oh wait, I've just invented Perl
18:11:46 <alise> CakeProphet: functional programming duderiffy
18:11:53 <CakeProphet> basically you want to modify python to be awesome.
18:12:07 <alise> hey i could support closures with this
18:12:15 <alise> consider a function map(list)(closure)
18:12:37 <alise> for x from map(lst) { x + 2 }
18:12:40 <CakeProphet> you'd probably want PyPy for anything advanced. It's Python written in Python and somehow partially JITed... I have no idea how it works
18:12:47 <CakeProphet> but it makes it easier to tweak Python in Python.
18:12:49 <alise> def __mapper(x): { return x+2 }; map(lst, __mapper)
18:12:57 <alise> CakeProphet: it's gorgeous, pypy
18:13:17 <alise> they write their python interp in a restricted dialect of python, rpython; and they also have a JIT from rpython, that compiles rpython to efficient machine code as it goes
18:13:28 <alise> and that JIT is written in python iirc
18:13:35 -!- hiato_ has joined.
18:13:38 <alise> so they run the jit -- in python -- on their in-RPython python interpreter
18:13:38 -!- hiato has quit (Ping timeout: 248 seconds).
18:13:43 <alise> which then results in an efficient machine-code Python interpreter
18:14:32 <alise> CakeProphet: actually if this gets too far I'll have invented my own, superior language
18:14:55 * alise translates braces.py to braces.bs
18:15:13 <alise> BraceS, but the bullshit expansion is intentional
18:15:30 <alise> Whoa, my string support is broken.
18:16:10 <Sgeo> alise, the Reddit alient
18:16:16 <alise> Sgeo: it has a name?
18:16:17 <alise> CakeProphet: lol, this isn't even backwards-compatible,
18:16:23 <Sgeo> http://www.reddit.com/r/todayilearned/comments/c9k3y/til_the_reddit_alien_is_called_snoo/
18:16:24 <alise> CakeProphet: it strips your indentation
18:16:25 -!- benuphoenix has joined.
18:16:29 <Sgeo> Hi benuphoenix
18:16:31 * Phantom_Hoover wonders why there isn't a decent way to take some Common Lisp and compile it into an executable
18:16:53 <CakeProphet> do you use string.whitespace to strip whitespace?
18:17:30 -!- benuphoenix has left (?).
18:17:35 <alise> oh, I should make {} result in pass
18:19:26 <alise> CakeProphet: I ported braces.py to braces.bs!
18:19:40 * alise moves braces.py to braces_orig.py, then generates braces.py using braces_orig.py on braces.bs
18:20:19 <CakeProphet> woah.... that while self.process_char(): pass is a completely weird way to loop over that.
18:20:37 <alise> go = self.process_char()
18:20:39 <alise> but realised that was stupid
18:20:50 <alise> CakeProphet: http://www.vjn.fi/pb/p1266287623.txt braces.bs v1
18:21:09 <alise> CakeProphet: http://www.vjn.fi/pb/p9595539115.txt generated object code ;)
18:21:12 <alise> (also known as python)
18:21:15 <CakeProphet> for c in self.source: self.process_char(c)
18:21:24 <alise> nah, because self.source is mutated a lot
18:21:26 <alise> so that would do weird shit
18:21:28 <alise> and be undefined behaviour
18:21:52 <alise> behold, the world's first ugly pythonesque compiling-to-python self-hosting language
18:22:13 <CakeProphet> I'm sure somehow else has given Python braces.
18:23:00 <alise> as a source encoding filter...
18:23:05 <alise> this is cooler though
18:25:36 <CakeProphet> alise: I'd turn the spaces-per-indent up a bit. Have it a constructor option. def __init__(self, source, spaces_per_indent=4)
18:25:47 <CakeProphet> and then (' ' * self.indent * self.spaces_per_indent)
18:25:48 <alise> CakeProphet: But why would you want to look at the generated object code...?
18:26:07 <alise> Sgeo: "To be fair, that's like saying the reddit alien is from the future -- it was something that was tossed around in the summer 2005, and then it was pretty much forgotten. Even around the office, I've never heard anyone call it Snoo; it's always just "the alien"."
18:26:22 <alise> CakeProphet: At least this way it LOOKS definitively evil.
18:26:34 <CakeProphet> alise: I mean the whole point is to have internet-friendly python... so once you have hosted somewhere there's no reason not to have it human-friendly
18:26:50 <alise> oh, this is actually just for abomination purposes
18:27:15 <CakeProphet> alise: psh, you're not allowed to diss Python when you're doing stuff with it, for it.
18:27:34 <alise> What if I'm raping it to make it look like a clown?
18:27:39 <alise> Because that's basically the case here.
18:27:59 <CakeProphet> ...I don't know, the braces look nice really. Possibly even more structured.
18:28:21 <CakeProphet> when your blocks get long-winded it can be easy to loose track of how many dedents there are at the end.
18:28:34 <CakeProphet> but not having to type braces is definitely worth it... :)
18:28:45 <CakeProphet> but really... they should have both. There's absolutely no reason not to.
18:28:49 <alise> def main(argc, argv)
18:28:51 <alise> printf("Hello, world!\n");
18:29:08 <alise> [spoiler]VALID[/spoiler] [sup][b][i]BRACES[/i]c[/b]o[/sup][sub][spoiler]de[/spoiler]
18:29:16 <alise> def main(argc, argv):
18:29:16 <alise> printf("Hello, world!\n")
18:29:18 <alise> is what it becomes
18:29:23 <alise> print(s) in python 2.0 is print (s)
18:29:33 <alise> CakeProphet: I just defined printf to be print :P
18:29:44 -!- huldumadurin has joined.
18:29:51 <alise> That doesn't work in C
18:29:58 <alise> and print is a statement
18:30:08 <CakeProphet> alise: depends on which version you're using
18:30:16 <alise> ooh I need bracketed comments
18:30:20 <alise> (# ... #) do you think?
18:30:26 <alise> you're capturing it in your parenzz
18:30:59 <CakeProphet> alise: yeah print-as-a-function is 3... possibly 2.6 or 7 or something
18:31:24 <alise> """ is LAEM though
18:31:26 <alise> because you can't do
18:31:34 <alise> if foo { print """abc""" x }
18:31:41 <alise> these (# ... #) comments would simply be elided in the result
18:31:50 <alise> like all good comments
18:31:55 <alise> (# abc (# def #) quux #)
18:32:00 <alise> why, it's just like # comments but you capture them!
18:32:01 -!- benuphoenix has joined.
18:32:10 <CakeProphet> {# #} could possibly conflict with Python code in some odd corner case.
18:32:37 <alise> this is the Algorithmic Programming Language Braces, not FIOC :|
18:32:41 <alise> benuphoenix: whoa it's you.
18:32:48 <Sgeo> benuphoenix, your IRC client's working again?
18:33:00 <CakeProphet> alise: also, main won't do what you expect. Python doesn't automatically call main like that
18:33:19 <CakeProphet> well, unless you expect something different.
18:33:34 <alise> i was just writing pseudo-C
18:33:43 <alise> I'm a proficient python programmer ffs :P
18:33:58 <alise> whoa i have some mental block with using braces after typing pythony code
18:34:20 <CakeProphet> alise: I almost forgot the explicit self after doing a lot of Java and C# lately.
18:34:37 <CakeProphet> alise: I would almost grow to dislike it now that I've had the convenient of not having to type it all the time.
18:34:39 <alise> this is an abomination, it doesn't have to be idiomatic
18:34:47 <alise> I'm not even a big fan of OOP.
18:35:25 <Phantom_Hoover> Also the fact that out of habit you call it self, rather than, say, j or something similarly easy to type.
18:35:31 <alise> CakeProphet: Hey, this means I can use nested functions conveniently <3
18:36:11 <alise> Phantom_Hoover: It's very good.
18:36:24 <CakeProphet> alise: Sweet... now support multi-line lambdas... compile them to named functions that don't conflict with anything else in code, embed the name where the lambda expression was originally, and then delete the name afterwards. :P
18:36:26 -!- benuphoenix has left (?).
18:36:26 <alise> It's advanced. It predates almost all other object systems.
18:36:33 <alise> CakeProphet: and call the whole thing "perl"
18:36:41 <alise> seriously, we're just approaching idiomatic perl 5 without sigils here
18:36:50 <alise> Phantom_Hoover: unlucky!
18:36:53 <CakeProphet> alise: psh... we're not even close to the syntactic monster of perl yet.
18:37:02 <alise> CakeProphet: i said idiomatic perl
18:37:10 <alise> seriously, idiomatic perl is basically what we have here, plus some additional niceties
18:37:25 <alise> multi-line lambdas: yep, idiomatic perl
18:37:32 <alise> scripting language: yep
18:37:39 <alise> it also has "not", "unless" and similar
18:37:39 -!- nooga has joined.
18:37:45 <alise> it also has conditions after the statement (useful a lot of times)
18:37:49 <alise> we're inventing perl :P
18:37:53 <CakeProphet> well, I know nothing about Perl other than everytime I try to memorize the syntax in any way I completely fail. I blame but the language design, but it could also be copious marijuana ingestion in my past.
18:37:54 -!- Phantom_Hoover has quit (Quit: Leaving).
18:38:17 -!- Phantom_Hoover has joined.
18:38:44 <CakeProphet> alise: but the semantics are entirely different.... entirely.
18:38:58 <alise> i have a kinda soft spot for perl.
18:39:07 <alise> (# ... #) comments implemented!
18:39:22 <CakeProphet> Haskell's comment style is really nice. It's my favorite that I've seen.
18:39:34 <alise> Haskell is a good language.
18:39:46 <CakeProphet> it's not without flaws, but a very good language nontheless.
18:39:53 -!- nooga has quit (Client Quit).
18:40:07 <alise> ehird@ehird-desktop:~/work/2010-05/braces$ mv braces.py braces_.py
18:40:07 <alise> ehird@ehird-desktop:~/work/2010-05/braces$ python -i braces_.py
18:40:08 <alise> >>> open('braces.py', 'w').write(debrace(open('braces.bs').read()))
18:40:08 <alise> ehird@ehird-desktop:~/work/2010-05/braces$ rm braces_.py
18:40:25 <alise> Aaand it doesn't work
18:40:32 <CakeProphet> in particular, some of the functions that use Int instead of Integral are annoying... especially when you have to coerce types around.
18:40:37 <alise> Phantom_Hoover: no
18:40:40 * alise builds a command-line interface
18:40:42 <alise> CakeProphet: Yes, that is a flaw.
18:41:02 <alise> CakeProphet: Also, the Num class is an abomination; we thought about this stuff last century and it turns out there are these things called rings and fields...#
18:41:22 <CakeProphet> ...hmmm, yeah. I don't know anything about those though...
18:41:37 <alise> CakeProphet: they're pretty simple really
18:41:53 <alise> CakeProphet: you have one for +, one building on top for -, one building on top for *, then one building on top for / basically
18:41:56 <CakeProphet> it's just a structure that describes a formal system of operations over data right?
18:41:57 <alise> except you have a bunch inbetween
18:42:04 <alise> for things like non-commutative or non-associative operations
18:42:09 <alise> so we can categorise tons of non-numbers in this too
18:42:24 <alise> "A frizzle is a bob (S,*) such that x*y = y*x."
18:42:30 <alise> (where * is any operation not multiplication)
18:42:50 <alise> * is an operation taking two Ss and returning an S
18:42:55 <alise> the very bottom structure is a magma:
18:43:12 <alise> A magma (S,*) is a set S and a binary operation * on S with the following property:
18:43:18 <alise> Closure propety: a*b is in S.
18:43:31 <alise> CakeProphet: no, field is division (multiplicative inverses; i.e. ^-1)
18:43:50 <alise> Ring is +, * and -
18:43:57 <alise> Z is the prime example
18:44:01 <alise> Set S with binary operation +
18:44:01 <alise> Associativity of +
18:44:02 <alise> Existence of identity element for + in S
18:44:06 <alise> Existence of inverse elements for + in S
18:44:10 <alise> Commutativity of +
18:44:14 <alise> Associative binary operation
18:44:16 <alise> Distributivity of over +
18:44:20 <alise> Existence of identity element for in S
18:44:28 <alise> Existence of inverse elements for in S
18:44:32 <alise> CakeProphet: http://en.wikipedia.org/wiki/Ring_(mathematics)#Definition_and_illustration
18:44:34 <alise> look at the "Algebraic structures" table there
18:44:36 <alise> CakeProphet: there are some structures inbetween for pathological things
18:44:58 <alise> a purple man who lives far away from his workplace
18:45:40 <CakeProphet> alise: I apologize. My ability to parse wikipedia articles on math is very limited... mainly because they explain everything in terms of other things I also don't understand.
18:45:50 <alise> CakeProphet: get yourself an edumacation :D
18:45:54 <alise> oh wait you're from the US
18:46:00 <alise> YOU CAN'T HAHAHAHahem.
18:46:40 <CakeProphet> well, abstract algebra isn't really taught, except in advance college classes.
18:47:55 <CakeProphet> alise: so basically instead of Num you'd have Ring for (+) and (-) along and (Ring x) => Field(x) for division and multiplication? or is multiplication elsewhere?
18:48:07 <alise> CakeProphet: well it's a bit more nuanced than that
18:48:10 <alise> multiplication is in ring actually
18:48:20 <alise> it'd be easy to use
18:48:27 <alise> it's just that it's hard to memorise exactly what some thing is :P
18:48:34 <alise> CakeProphet: to do all that we really need inheritance of classes
18:48:37 <alise> so that you could just define it as the highest one
18:48:41 <alise> and it'd inherit the definitions downwards
18:49:15 <alise> Braces 1.5: http://www.vjn.fi/pb/p8785482493.txt
18:49:18 <alise> Bootstrapping Python: http://www.vjn.fi/pb/p3558378555.txt
18:49:25 <alise> Pre-compiled version: http://www.vjn.fi/pb/p3558378555.txt
18:49:30 <alise> Binary for Python platforms :P
18:50:04 <alise> Example: http://www.vjn.fi/pb/p5491253623.txt
18:51:19 -!- hiato_ has quit (Ping timeout: 265 seconds).
18:51:39 <alise> CakeProphet: I'm turning insane halp
18:53:07 <alise> http://www.vjn.fi/pb/p8785482493.txt
18:53:09 <oerjan> CakeProphet: you can have Ring x => Field x, but what you cannot have is defining the Ring methods automatically from the Field methods
18:53:58 <oerjan> to make a Field (or in current Haskell, say Fractional) you have to define _all_ the superclasses separately
18:54:28 <oerjan> CakeProphet: well, it would be nice to at least have them listed in common.
18:54:37 <alise> obvs we should just add dependent typing, require totality and add a proof assistant
18:54:47 <alise> oh wait that's agda except with a proof assistant and consistency ha ha ha ha ha ha
18:54:52 <alise> it's funny because i am dissing agda
18:54:54 <alise> on the grounds that coq is superioe
18:55:05 <alise> CakeProphet: i have concluded i always have been
18:55:09 <CakeProphet> alise: also... you lost me on that last bit. But that's okay.
18:55:10 <alise> and it's woooonderful~
18:55:32 <CakeProphet> I'm wasting far too much time doing fun stuff and talking on this channel.
18:55:48 <oerjan> everyone is insane. it's just that a large group of people have convinced themselves their delusions are "normal"
18:55:55 <CakeProphet> when I've already procrastinated like a whole week of my online history class, and was/is going to catch up today.
18:55:58 -!- Gracenotes has quit (Remote host closed the connection).
18:56:11 <alise> says oerjan, whilst believing in synchronicity.
18:56:41 <oerjan> alise: i never said i was normal
18:56:42 <CakeProphet> alise: so... have you considered how to implement generic macro control structures yet?
18:56:58 <alise> CakeProphet: by tossing the crock of shit out and making it properly modular
18:57:17 <CakeProphet> alise: well yes... but I'd try to re-use some code if possible... just re-organize
18:57:42 <CakeProphet> alise: but yeah... pretty much you want dynamic dispatch.
18:57:54 <alise> You know, I could just invent a new language.
18:58:48 <CakeProphet> alise: one thing you'll possibly want to improve on how information mid-parse is stored.
18:58:58 <alise> Yes; I really want to create a pseudo-syntax tree
18:59:03 <CakeProphet> I'm very bad at homebrew parsers and making them elegant.
18:59:18 <alise> of mostly string globs of python interrupted by [KEYWORD, BIT_BEFORE_BRACE, ...stuff inside braces...]
18:59:25 <alise> where stuff is either a string or another one of those
18:59:55 <CakeProphet> alise: You just need to be able to recognize a control structure that's been implemented somewhere... either with some kind of special macro syntax that you can embed mid-source-code, or as plugins to the compiler.
19:00:23 <alise> MetaPython provides a macro and code quoting facility for the Python programming language. It accomplishes this via the use of an import hook. MetaPython files are denoted with an .mpy extension and may contain quoted code blocks, macro definitions, and macro expansions.
19:00:25 <CakeProphet> and whichever is saner, or maybe less sane
19:00:41 <alise> CakeProphet: this is all reminding me of me and oklopol's python schemes
19:00:58 <alise> which were basically little half-lisp, half-schemes we wrote in python with very tight python integration
19:01:04 <CakeProphet> I saw an implemention of gotos in Python that used debugging facilities.
19:01:07 <alise> i wrote one that did its own GCing and everything
19:01:08 -!- lament has joined.
19:01:33 <CakeProphet> alise: How about this: make all functions partially applicable.
19:01:50 <alise> CakeProphet: Would need different syntax, because of varargs.
19:01:54 <alise> How about f&(args...)?
19:02:00 <CakeProphet> this will be after you have a sane parsing scheme down... so that all these new features are easy to tack on.
19:02:13 <CakeProphet> alise: nope. it's easier then you would think.
19:02:19 <alise> I know it can be done
19:02:28 <alise> but one syntax is better than having to do a special case for variadic functions
19:02:51 <alise> def fuck(*args): ...
19:02:55 <CakeProphet> just locate all def's in source and apply a decoration
19:02:57 <alise> fuck(1,2,3) # this should partially apply
19:02:59 <alise> WHOOPS IT DOESN'T.
19:03:18 <CakeProphet> ..hmmm... oh, I think I get what you're saying
19:03:33 <alise> so something like fuck&(1,2,3) is better
19:03:51 <CakeProphet> ....I'm still not completely following. is & an explicit partial application?
19:04:23 <alise> f&(x,y,z) = lambda *args, **kwargs: f(x,y,z,*args,**kwargs)
19:04:35 <alise> in Braces, the function behind it would be
19:05:29 <alise> def partial(f, *args, **kwargs) { def do_it(*args2, **kwargs2) { return f(*(args+args2), **kwargs.update(kwargs2)) } return do_it }
19:05:46 <alise> CakeProphet: Ohmygod I could allow arbitrary infix operators :|
19:05:53 <alise> (No that would be a bitch... but... tempting)
19:07:28 <CakeProphet> def decorator(f) { def wrapper(*args, **kargs) { (#insert introspection code to make sure we actually need to partial apply... otherwise#) def partial(*newargs, **kargs) { return f(*(args+newargs), **(kargs+newkargs)) } } }
19:07:33 <alise> Phantom_Hoover: ``The Revised Report on the Algorithmic Language Braces''
19:07:42 <CakeProphet> ...rough draft of the actual code, but you get the idea.
19:08:01 <alise> .update is mutating too :(
19:08:22 <alise> CakeProphet: I think **foo copies so i guess not
19:08:23 <alise> Phantom_Hoover: It's a reference to The Revised Revised Revised Revised Revised Report on the Algorithmic Language Scheme
19:08:33 <alise> Braces is my abomination that gives Python wiiiings^Wbraces.
19:08:57 <CakeProphet> alise: yeah if you're passing in a dictionary explicitly with **-used-mid-call expression thing... it most likely makes a copy. I'll test, but it's easy to fix... there's a copy() method
19:10:12 <alise> Grr, & can't even be a regular op
19:10:19 <alise> can't do (x=y) in tuples
19:10:31 <CakeProphet> alise: so yeah just use the copy() method if kargs is not empty
19:10:49 <Phantom_Hoover> Isn't & one of the ASCII characters that is completely invalid in Python?
19:11:09 <CakeProphet> also use functools stuff because they make it easy to write wrapper objects that preserve all the docs/introspection info of the original function
19:11:32 <alise> http://www.vjn.fi/pb/p4667924367.txt ;; & definition
19:11:52 <alise> @compiler is the built-in block that says "compile and evaluate this /now/ in the compiler-code environment"
19:11:57 <alise> Which lets you use it in things like macros, infix definitions, etc.
19:11:58 <CakeProphet> ...but it's so ugly. I'd rather just use Python's existing partial application stuff.
19:12:00 <alise> This is all hypothetical, of course.
19:12:04 <alise> <CakeProphet> also use functools stuff because they make it easy to write wrapper objects that preserve all the docs/introspection info of the original function
19:12:07 <alise> Ah yeah that stuff
19:12:28 <alise> functools.partial(func[, *args][, **keywords])
19:12:28 <alise> Return a new partial object which when called will behave like func called with the positional arguments args and keyword arguments keywords. If more arguments are supplied to the call, they are appended to args. If additional keyword arguments are supplied, they extend and override keywords. Roughly equivalent to:
19:12:31 <alise> Oh, it already exists!
19:12:55 <alise> http://www.vjn.fi/pb/p2957715959.txt
19:12:59 <alise> If it handled kwargs, it'd be perfect.
19:13:13 <alise> I swear there's a Python-based thing that has extensible syntax.
19:13:18 <alise> CakeProphet: (1,2,x=y)
19:13:20 <alise> can't do that in a tuple
19:13:23 <alise> and & is a binary op taking a function and a tuple
19:13:51 <CakeProphet> | partial(func, *args, **keywords) - new function with partial application | of the given arguments and keywords.
19:14:02 <alise> http://www.vjn.fi/pb/p2957715959.txt
19:14:04 <alise> if THAT handled kwargs
19:14:40 <alise> <alise> http://www.vjn.fi/pb/p2957715959.txt
19:14:40 <alise> <alise> If it handled kwargs, it'd be perfect.
19:14:49 <alise> CakeProphet: oh you mean I implemented that?
19:14:53 <alise> this is just concept art
19:15:07 <CakeProphet> is silently implement it for all functions
19:15:30 <CakeProphet> for lambdas just wrap the expression inside the function call explicitly
19:15:50 <CakeProphet> since you seem to be taking this to a whole new level
19:16:02 <CakeProphet> I would refactor your design to be easier to extend.
19:16:34 <alise> CakeProphet: http://www.vjn.fi/pb/p1928734847.txt
19:16:38 <CakeProphet> but if we try to fix everything that's wrong with Python we'll be doing this for months.
19:17:18 <alise> BRACES: It's like Python... but AWESOME.
19:17:26 <alise> I suggest we remove all the side-effects
19:17:40 <alise> then add a hindley-milner type system & inferrer with typeclasses
19:17:46 <alise> we could name it after some logician
19:17:49 <alise> it'd be easy to curry in
19:17:53 <alise> since we'd make function application "f x"
19:17:56 <alise> so... maybe Curry?
19:17:59 <alise> hmm... makes me think of indian
19:18:07 <alise> oh, Schonfinkel really invented currying
19:18:09 <alise> but that name sucks
19:18:13 <coppro> alise: go for his first name
19:18:14 <alise> wait, what was Curry's first name?
19:18:20 <alise> coppro: great minds think alike
19:18:24 <alise> I'll form a committee
19:18:26 <alise> Let's start writing a report
19:18:59 <alise> oerjan: DO YOU HAVE ANY CONTRIBUTIONS WE ARE WRITING THE HASKELL REPORT '98
19:19:05 <alise> OH YOU DO? WONDERFUL
19:19:23 <CakeProphet> alise: hmmm... so I assume prelude and body are macro parameters?
19:19:46 <alise> CakeProphet: yes -- "block prelude { body }" -> block_handler('prelude', 'body')
19:19:48 <alise> braces code in, braces code out
19:20:08 <alise> i guess it would syntax-check prelude and body first
19:20:20 <alise> so that as long as your format can be plugged in with any syntactically-correct braces it'll work
19:22:09 <CakeProphet> alise: you'll probably want a) a few dispatch tables that map to objects that store state about individual declarations. A Block type would contain the source code, line information, possibly AST info, and a method that would take a structure representing your mid-parse source code and plug in its substition somehow
19:22:34 <CakeProphet> a Operator type would have a simple function. They'll likely inherit some features from a base class.
19:23:17 <CakeProphet> but yeah... you'd have these dispatch tables associating the statement name to those data structures... and then you'd just call the method to make them go.
19:23:17 <alise> $ python braces.py <braces.bs >braces.py
19:23:28 <alise> don't worry i have the files i need to reconstruct
19:23:56 <alise> Dammit, nested comments don't work
19:24:44 <CakeProphet> passing in the mid-parse-source-code/AST structure to the dispatch objects processing method would allow the dispatch code to call a method that lets it substitute its changes into the code in some sane way.
19:25:03 <CakeProphet> ...this is completely stream-of-consciousness planning though. I'm likely missing some detail.
19:25:26 <CakeProphet> there'd likely be several steps to compilation.
19:25:51 <alise> Yay, now it works.
19:26:20 <CakeProphet> alise: or... can we scratch my ideas and just make it a hack-together project?
19:27:14 * Sgeo just acquired a wizard's bit in LambdaMOO
19:27:33 <alise> Nested comments work!
19:27:47 <oerjan> Sgeo: you evil man! give the poor wizard his bit back!
19:27:50 <alise> Braces 1.6: http://www.vjn.fi/pb/p3941535591.txt
19:27:53 <CakeProphet> how are they transla---oh, nevermind, they're comments, you just cut them out.
19:27:59 <alise> So much fun for 142 lines.
19:28:07 -!- Gracenotes has joined.
19:28:23 <CakeProphet> so yeah... I think I've got a pretty good idea of how to make implementing control-flow macros in a sane fashion.
19:28:29 <alise> I left debugging stuff in
19:28:48 <Sgeo> alise, I think some Pythonistas want to kill you
19:29:22 <alise> Braces 1.7: http://www.vjn.fi/pb/p1222944752.txt
19:29:36 <alise> pikhq: http://www.vjn.fi/pb/p1222944752.txt
19:29:42 <alise> pikhq: This compiles to Python. Self-hosted, you know.
19:30:00 <alise> pikhq: Features: Braces! Semicolons! One-liners work because of this! (# Nested (# comments! #) #)
19:30:05 <CakeProphet> ah... I was wondering why my computer was being so slow. Chrome is taking up a lot of clock cycles for some reason.
19:30:11 <pikhq> CakeProphet: Don't I know you from somewhere?
19:30:12 <Sgeo> alise, great, but how do you actually run it if you don't already have a Braces interpreter?
19:30:23 <CakeProphet> pikhq: yeah, I used to frequent this channel a few years ago. :)
19:30:28 <alise> Sgeo: Howsabout not being a lazy ass and doing s/}//, s/{/:/?
19:30:50 <pikhq> CakeProphet: Somewhat.
19:31:05 <alise> Or, you know, here's a binary:
19:31:09 <alise> http://www.vjn.fi/pb/p8823673854.txt
19:31:12 <alise> Runs on Python model CPUs.
19:31:14 <CakeProphet> alise: I'm much slower at implementing things. But I'd like to say I have pretty good design skillz.
19:31:21 <alise> CakeProphet: Sure... just make it elegant.
19:31:35 <alise> This IS production-ready code, after all...
19:31:53 <alise> Yes. Not the Python one, the Braces one.
19:31:58 <alise> Use the Python one to recompile the braces one.
19:32:11 <alise> Sgeo: pikhq: Here's some of the debauchery you can achieve with this abominable program: http://www.vjn.fi/pb/p8786875755.txt
19:32:15 -!- sshc_ has changed nick to sshc.
19:32:30 <alise> I even refrained from linking to the compiled Python in #python so that people didn't use it unless they really wanted to :-)
19:32:42 <alise> pikhq: Note beautiful GNU indentation style now supported.
19:32:48 <CakeProphet> alise: ..... u_u can I just have a link to the latest Python "object" code? ;)
19:32:58 <alise> CakeProphet: Well, I won't accept edits to it.
19:33:01 <alise> I already linked to it.
19:33:14 <alise> CakeProphet: Edit this: http://www.vjn.fi/pb/p1222944752.txt then compile it to Python with this: http://www.vjn.fi/pb/p8823673854.txt
19:33:16 <CakeProphet> ...oh, right. hmmm, okay. I'll just use to self-host so I can test
19:33:19 <alise> Phantom_Hoover: GNU.
19:33:36 <alise> CakeProphet: Usage: python braces.py <braces.bs >braces2.py
19:33:40 <alise> Don't do >braces.py for obvious reasons
19:33:42 <alise> Also, you MUST use .bs
19:33:48 <alise> I will accept no other file extension :D
19:34:05 <Phantom_Hoover> The one in which while and for blocks are one level in from the for or while?
19:34:32 <alise> Two indents to the brace on its own line, then two additional indents to the body.
19:34:37 <alise> Gross, but Python now supports it!
19:34:39 <CakeProphet> alise: I'm going to go ahead and give it command-line functionality... you can hack the specifics of it to your liking but it'll be pretty straightforward
19:34:46 <alise> Exception to the rule: Functions have their braces at column 0.
19:34:49 <alise> CakeProphet: it already has it
19:35:18 <coppro> alise: what if you want braces on the line with the closing paren?
19:35:26 <alise> coppro: that also works
19:36:11 <alise> print "Hello, world!"
19:36:11 <alise> def bar() { lozenge(); retard();
19:36:19 <alise> Valid Braces code.
19:37:08 <CakeProphet> alise: uh... is it safe to edit the braces file in a Python IDE? :3
19:37:39 <alise> I suggest Emacs in fundamental-mode
19:37:44 <CakeProphet> didn't figure. Lack of syntax highlighting bugs me. But I'll adjust.
19:37:59 <alise> As long as the IDE doesn't reformat
19:38:01 <CakeProphet> ....never got comfortable with Emacs. I use gedit for non-specific hacking.
19:38:11 <alise> Like, as long as it just syntax-highlights, and only autoindents on new lines
19:38:14 <alise> (which you can adjust)
19:38:34 <coppro> most editors you can turn off autoformatting independently from highlighting
19:39:04 <coppro> I can't use anything else now
19:39:07 <alise> I just use Emacs because it's a bit bloated piece of crap but I know a few key commands and tab complete the rest away
19:39:10 <coppro> also I can't play games
19:39:14 <alise> It's sort of cozy, in the way that a really disorganised, small room is.
19:39:19 <coppro> unless I rebind the keys to hjkl
19:39:21 <alise> coppro: you can play nethack
19:39:30 <coppro> (or they're already bound that way to startO
19:40:10 <CakeProphet> alise: I love playing with extremely extensible software though... so I think if I became familiar with all the important key commands I'd love it.
19:40:30 <CakeProphet> but my computer is kind of slow... so I might wait till I get a new one.
19:40:35 <alise> It's a bit naff, Emacs, really, but then I'm a bit naff.
19:40:39 <alise> I'm not cool enough for vim.
19:40:56 -!- lament has quit (Ping timeout: 252 seconds).
19:41:52 <alise> It actually communicates with nethack in s-exps
19:42:25 <Phantom_Hoover> It is still a way of playing Nethack while ostensibly working.
19:43:26 <alise> I'm bad at Nethack.
19:43:44 <Phantom_Hoover> I died in Sokoban, and then I kind of lost the will to play any more
19:45:12 <alise> I wonder if anyone has done timing to game Nethack's RNG
19:45:41 <Phantom_Hoover> Although the code is near-Lovecraftian in its sanity-destroying powers.
19:46:32 <CakeProphet> alise: so... I'm thinking about moving the brace removing code from the central parsing code... is this a bad idea?
19:46:57 <alise> since blocks should receive their code as braced form
19:47:00 -!- hiato has joined.
19:47:03 <alise> because they return brace code
19:47:09 <alise> and python indented code doesn't work in braces
19:47:39 <CakeProphet> alise: well I was going to have it not do the textual substitution just yet and instead construct a fairly lightweight syntax tree.
19:47:50 <alise> Well, go ahead with anything.
19:48:49 * Sgeo wishes LambdaMOO was more popular
19:49:15 <Sgeo> THe language is better than MUSHcode
19:49:22 <Sgeo> [Almost any language is better than MUSHcode]
19:50:18 <CakeProphet> alise: question, is Braces intended to support regular style Python blocks?
19:50:29 <alise> CakeProphet: No. Not really.
19:52:20 <alise> CakeProphet: it doesn't
19:52:23 <alise> because it strips whitespace
19:52:41 <alise> -> wrongly indented for a 0-column "if"
19:54:26 <CakeProphet> ah okay... good. That makes things easier.
19:55:31 -!- hiato has quit (Ping timeout: 240 seconds).
19:57:04 <CakeProphet> alise, Python already has support for its own syntax tree. So I figured we could go ahead and use that, modify it, and then use the already existing standard lib stuff to reconstruct it back into a string
19:57:37 <alise> we're just inventing Metathon here
19:58:00 <CakeProphet> this will give us infix operators though. :D
19:58:10 <Phantom_Hoover> Although Python's support for its syntax tree is... weird.
19:58:29 <CakeProphet> Yeah I'm about to play with it to see how its structured
19:58:55 -!- poiuy_qwert has quit (Quit: This computer has gone to sleep).
19:58:58 <oerjan> !haskell if if if if True then False else True then False else True then False else True then False else True
19:59:04 <alise> Wow, LambdaMOO's tutorial is way too long.
20:02:34 <alise> "Insert your peepee into her vag" --spam
20:03:24 -!- ws has quit (Quit: BitchX for president.).
20:04:07 <alise> Please note that we intend that the topology of the LambdaMOO universe be
20:04:08 <alise> consistent: rooms should not overlap each other, going east through a door
20:04:08 <alise> should be reversable by going west, etc. Please keep this in mind while
20:04:08 <alise> building new areas.
20:04:45 <oerjan> directed apathic graph
20:06:44 <oerjan> *apathetic doesn't scan right
20:07:15 <Phantom_Hoover> How about going through a door and then back takes you into a room nearly identical to the previous.
20:09:20 <CakeProphet> alise, Python intermediate parse tree is ridiculous.
20:09:36 <alise> I could have told you that :P
20:09:38 <alise> Phantom_Hoover: BECAUSE
20:10:33 <alise> Make Python AWESOME.
20:10:35 <CakeProphet> alise: the MUD I used to maintain could have exits that take you anywhere... they were restricted to compass directions though. :( It was a terrible piece of legacy C code.
20:11:00 <alise> Phantom_Hoover: FORMAT is actually a huge language in itself. It can loop over arrays, call arbitrary Lisp functions, and format as two kinds of roman numeral -- normal and archaic (four is IIII).
20:11:45 <Phantom_Hoover> Also, FORMAT has the thing that gives you the word form of a number.
20:11:55 <alise> Common Lisp is glorious excess and grandeur -- in fact, the most superlative of these a gigantic ball of mud has ever been.
20:12:02 <CakeProphet> alise: hmmm... using the AST might not be useful except later on. So I'll ditch it for now.
20:12:29 <oerjan> Phantom_Hoover: hey if american english was good enough for jesus...
20:12:45 <Phantom_Hoover> Well, the problem with CL is that there's no in-language support for libraries.
20:13:17 <CakeProphet> alise: I'd use the AST once we have legal Python code maybe, to walk the tree and implement infix operators or something.
20:13:28 <alise> ASDF is the de-facto standard, but it's also hideously complex like CL itself.
20:13:39 -!- zzo38 has joined.
20:13:39 -!- ais523 has joined.
20:13:42 <alise> CakeProphet: What we basically need to realise is that the actual Python code we want to leave alone
20:13:54 <alise> Like we want to write it as a BNF with some <text> thing that's just plain text except it avoids delimiters and handles strings itself
20:14:02 <alise> And we use <text> whenever regular python code would be
20:14:10 <alise> ais523: I made Python likeable for you
20:14:22 <oerjan> Phantom_Hoover: at least it's easy to type
20:14:26 <alise> ais523: http://www.vjn.fi/pb/p1222944752.txt
20:14:30 <alise> Click and bask in the glory.
20:14:33 <CakeProphet> I think this is the first time I've actually used workspaces in linux.
20:14:44 <CakeProphet> it's helpful when you have four million windows
20:14:46 <ais523> alise: I filter links...
20:14:56 <alise> www. vjn.fi/pb/p1222944752.txt
20:14:59 <alise> ais523: did that appear?
20:15:05 <ais523> the Internet became so much more enjoyable when I cut the Web off from the rest
20:15:11 <alise> ais523: open and bask
20:15:21 <ais523> Phantom_Hoover: you can /part
20:15:41 -!- Phantom_Hoover has left (?).
20:16:07 <ais523> alise: you added braces to Python?
20:16:25 <alise> ais523: And removed the colons. And added properly-working semicolons! And (# nested (# comments! #) #)
20:16:33 <alise> And it's written in itself!
20:17:07 <ais523> amazingly, when seeing it I thought "that looks like Python" and didn't even notice the braces
20:17:14 -!- coppro has quit (Remote host closed the connection).
20:17:21 <ais523> I only figured out it was adding braces to Python by trying to work out what it did
20:17:24 <alise> ais523: some more desirable not-quite-links:
20:17:32 -!- Halph has joined.
20:17:33 <alise> www. vjn.fi/pb/p8786875755.txt debauchery possible with this beautiful gift to humanity
20:17:43 -!- Halph has changed nick to coppro.
20:17:48 <alise> ais523: note beautiful ``GNU indentation style''
20:18:11 <alise> ais523: here is a bootstrapping binary for Python-model CPUs: www. vjn.fi/pb/p8823673854.txt
20:18:34 <ais523> alise: wow, you've been busy
20:18:36 <alise> ais523: and finally, here's a look at what's to come when we complete the project of making Python Awesome: www. vjn.fi/pb/p1928734847.txt
20:18:41 -!- huldumadurin has quit (Ping timeout: 276 seconds).
20:18:44 <ais523> was this all done on the weekends, or did you figure out a way to do it over the week?
20:18:45 <alise> Yes indeed, infix operators, and custom control structures!
20:18:50 <alise> ais523: I've just done it today...
20:19:16 <ais523> at this rate, you'll end up inventing Perl
20:19:21 <alise> that's what I said
20:19:32 <alise> we kept coming up with ideas that just brought it that little bit closer to perl
20:19:46 <zzo38> Now finally Python has some more useful commands
20:20:04 <alise> zzo38: best praise i could receive
20:20:18 <alise> that infix/block thing isn't coded yet though
20:20:21 <alise> CakeProphet is currently having a go at it
20:21:49 <zzo38> Why does the ".dmg" file contains a lot of stuff, when trying to open it with 7-Zip first I need to extract the .dmg file and then .hfs and then .pax
20:21:56 <Sgeo> There is a library in LambdaMOO
20:22:03 <Sgeo> People are able to check out books
20:22:17 <Sgeo> There's also a book listing all check-outs
20:22:20 <Sgeo> There are way too many
20:22:26 <Sgeo> Including books left in $nothing
20:22:40 <ais523> zzo38: sounds like it's an image of an OS X disk
20:22:40 <Sgeo> Which is, quite frankly, scary. I think they're gone forever
20:23:05 <ais523> the .pax files would be on the disk's file system, the .hfs file /is/ the file system, the .dmg file is the disk itself, and the .7z file would be compressing that
20:23:07 <zzo38> Now do you have to program LambdaMOO to recover books
20:23:41 <zzo38> 7-Zip documentation doesn't mention .pax files
20:23:52 <ais523> zzo38: they're backwards-compatible with .tar files
20:23:52 <zzo38> It mentions .dmg and .hfs
20:23:56 <oerjan> braces - straightening out python's bite
20:24:05 <ais523> try renaming it to end .tar and seeing if it works
20:24:19 <zzo38> Well, it worked when it was .pax
20:24:28 <zzo38> I did manage to get the files I needed
20:24:40 <Sgeo> zzo38, I should be able to locate as many of the books themselves and return them to me
20:24:57 <Sgeo> Or actually, I think there's a go_home command
20:25:27 <alise> <ais523> the .pax files would be on the disk's file system, the .hfs file /is/ the file system, the .dmg file is the disk itself, and the .7z file would be compressing that
20:25:29 <zzo38> The .dmg when extracted contains a file called "2.hfs" and it seems to contain some sort of package files. I didn't need any package files however, just extracting the .pax contained what I needed
20:25:43 <ais523> alise: I know, that seems to be confusing zzo38
20:25:59 <alise> you were confused by saying the whole thing would be wrapped in a 7z
20:26:01 <alise> zzo38: .dmg is a (possibly-compressed) OS X disk image
20:26:10 <alise> so it'll have been: wrapping, compression, file system
20:26:11 <ais523> alise: OK, agreed that the whole thing doesn't need to be wrapped
20:26:15 <zzo38> The file I was looking for was not available in the other format other than .dmg format, but the files in the .pax were able to be used on cross-platform
20:26:44 <zzo38> I know it is a disk image, when downloading from source-forge it said so in the MIME type
20:28:59 <zzo38> I have written only a few program in Python, for solitaire card. (I don't plan to use Python for much else, however) Someone told me Python codes is easy to hack, I think they are correct, I was able to program in these codes without knowing much about Python, so I think they are right
20:29:50 <zzo38> However, I have at the start of each file "game_id=200002" and stuff like that but is there way to make it set it automatically based on the file-name of the codes, instead?
20:29:51 <CakeProphet> alise: you use while loops quite well. I generally don't end up using them when I program in Python.
20:30:00 -!- Phantom_Hoover has joined.
20:30:08 <zzo38> Like, if the file is called "200002.py" or "200002.pyc" it should set "game_id=200002"
20:31:02 -!- hiato has joined.
20:31:32 <Sgeo> I have successfully returned a porn magazine to its rightful location
20:31:59 <alise> zzo38: __file__ or something iirc
20:32:06 <alise> zzo38: it's really bad style though, maybe even deprecated
20:32:11 <Sgeo> "Cheese it, the cops!" squealed the large-hipped hussy as the vile midget defiled her globular knockers and drove his rapidly dwindling joy stick into her odiferous navel.
20:32:11 <alise> CakeProphet: I'd prefer to use a for and a smarter generator, but eh
20:32:22 <alise> Python doesn't have many control structures
20:32:27 <zzo38> alise: Why is it bad style deprecated
20:32:37 <Sgeo> It's a magical porn magazine. Reading it gives different stuff each time
20:32:39 <alise> zzo38: Because it can break things if you move the file, I guess.
20:33:03 <zzo38> alise: I wanted to use it so that you can load the different card-games files by renaming them instead of changing each code
20:33:33 <zzo38> So you can put the files in plugin directory
20:33:39 * Sgeo reads the code for the magical scroll he's using that tells him which books were checked out of the library
20:34:07 <zzo38> Otherwise someone else can write the plugin with the same game_id numbers and it can be conflicted
20:36:23 -!- kar8nga has joined.
20:36:31 <Sgeo> Oh, sure, when I'm borrowing something, such as a magical list, it's FULLY CAPABLE of flying home
20:37:56 <alise> "Research students still regularly visit the MOO (often sent there by their professors) and start asking users about these events. They are surprised to find that sexual actions are currently used as a form of affectionate greeting."
20:38:14 <alise> You cannot escape the fundamental nature of the internet
20:38:24 <CakeProphet> alise: yeah a generator would be nifty... but ultimately to implement the generator you'd have to use the same control structures. Or am I wrong?
20:38:49 <alise> CakeProphet: you would. unless you used an iterator to emulate a while
20:39:08 <alise> like, __next__ raises that end of iterator error if not-condition
20:39:14 <alise> otherwise it yields, say, None
20:39:22 <alise> for _ in While(lambda: condition) { ... }
20:39:43 <alise> News just in, GvR is removing while from Python 4 because it encourages ugly iterating code and can be emulated with for anyway
20:39:43 <oerjan> Sgeo: you're getting awfully close to I Put On My Wizard Robe And Hat territory, here
20:41:53 <alise> the idea of sexual actions as an affectionate greeting is hilarious
20:41:53 <Sgeo> Of course the stuck books aren't magnetic
20:41:58 <alise> "Hi there! *sucks your cock*"
20:43:48 <alise> Feynman was a constructivist: "What I cannot create, I do not understand." :P
20:44:34 -!- hiato has quit (Quit: underflow).
20:45:41 <alise> ais523: so, you know unix first edition
20:45:55 <ais523> using it doesn't mean you know it
20:46:00 <alise> you haven't used it
20:46:21 <alise> ais523: have you? you have only used later ones.
20:46:31 <alise> http://code.google.com/p/unix-jun72/ "The unix-jun72 project has scanned in a printout of 1st Edition UNIX from June 1972, and restored it to an incomplete but running system."
20:46:33 <ais523> ah, I meant the first streak of editions
20:46:36 <alise> "Userland binaries and a C compiler have been recovered from other surviving DECtapes."
20:46:46 <alise> ais523: You can try 1st Edition UNIX with the very same emulator.
20:46:47 <ais523> UNIX version numbering is confusing
20:47:04 <alise> http://code.google.com/p/unix-jun72/source/browse/trunk/Readme
20:47:07 <alise> Man pages: http://man.cat-v.org/unix-1st/
20:47:14 <alise> NAME sin, cos -- sine cosine
20:47:15 <alise> SYNOPSIS jsr r5,sin (cos)
20:47:15 <alise> DESCRIPTION The sine (cosine) of fr0 (radians) is returned in fr0. Thefloating point simulation should be active in either floating
20:47:19 <alise> Yes, it gave library examples in assembly.
20:47:31 <ais523> that makes sense, actually
20:47:35 <alise> I was expecting "wow I'ma try this", not "heh" :(
20:47:46 <alise> The C compiler from 2nd Edition UNIX is also installed and works, but the
20:47:46 <alise> language is a very early dialect of C. The closest reference to the language
20:47:47 <alise> at this point in time is this, but it is probably 2 years too late:
20:47:47 <alise> http://cm.bell-labs.com/cm/cs/who/dmr/cman74.pdf
20:47:51 <alise> I don't think 1st Edition /had/ C
20:48:06 <alise> There's no cc in the scanned man pages, and the library examples are in asm
20:48:14 <alise> http://man.cat-v.org/unix-1st/1/for had fortran though
20:48:18 <alise> http://man.cat-v.org/unix-1st/1/b and B
20:49:09 <alise> http://man.cat-v.org/unix-1st/6/basic basic :)
20:49:23 <alise> http://man.cat-v.org/unix-1st/1/bas another basic
20:51:39 <Sgeo> alise, instead of spending time in a shitty 3d environment, I'm now spending time in a shitty text environment
20:52:22 <alise> i should make my own moo (with blackjack and hookers)
20:53:28 <CakeProphet> alise: I forgot. Did you say you were going to make an empty brace include a pass?
20:53:42 <alise> CakeProphet: Yes, {} should be pass.
20:54:01 <ais523> a lone semicolon should also be pass?
20:55:28 <CakeProphet> alise: wow... you know I always had trouble figuring out how to make a parser generate useful information about unterminated strings and paren expressions
20:55:38 <CakeProphet> but... looking at this source code... it's now very obvious.
20:55:48 <alise> CakeProphet: you're welcome :P
20:55:49 <CakeProphet> if you're in a string, and the source is done, it didn't end. :P
20:56:02 <alise> CakeProphet: Of course, you should maintain a stack with (line,col) positions so that the errors can complain where the opener is.
20:56:08 <alise> ais523: hmm... no.
20:56:29 <ais523> I mean, a semicolon that's otherwise redundant
20:56:47 <alise> since ; is strictly newline-and-indent
20:56:54 <alise> since you can't tell between
20:57:00 <alise> without mor complex analysis
20:58:10 <alise> that translates to
21:02:10 -!- lament has joined.
21:06:36 <pikhq> It takes forever to find the fixed point of this optimisation function on LostKng.b.
21:06:49 <alise> pikhq: Why aren't you adding a backend to that other one?
21:07:22 <pikhq> Incidentally, it helps to make the optimisation function actually recurse beyond the first loop.
21:07:31 <pikhq> alise: Because I'm not.
21:07:40 <alise> pikhq: But I want to see it :-(
21:07:43 <alise> It would be amazing.
21:08:43 -!- UppunudLamppu has joined.
21:11:12 <zzo38> Maybe ImageMagick should have a mode to load block JPEG format, to load JPEG without fully decompressing it, so that it is losslessly, such as: convert blockjpeg:1.jpg blockjpeg:2.jpg
21:11:14 -!- Oranjer has joined.
21:11:37 <pikhq> It does actually possess lossless JPEG transformations.
21:14:36 <zzo38> But according to the document there is some problems with it?
21:14:45 <pikhq> alise: I'm worried about whether or not this is just doing an infinite loop.
21:14:55 <pikhq> Though, it *is* just LostKng. :P
21:15:10 <pikhq> It worked on hanoi.b just fine, so...
21:15:24 <pikhq> (hanoi.b is, obviously, also massively large.
21:18:02 <CakeProphet> underscores are so time consuming. :P But okay.
21:18:17 <alise> I will end up rewriting half your code anyway :-P
21:18:31 <alise> CakeProphet: BTW, I strongly suggest the extensibility is done via @-commands.
21:18:39 <alise> Which go where a regular statement would -- ; @foo is acceptable, for instance.
21:18:56 <alise> @compiler { ... } should compile & run the enclosed braces code and put the variables, etc. it binds into some internal hash table.
21:19:04 <pikhq> alise: I discovered a massive optimisation on the optimiser.
21:19:12 <CakeProphet> alise: Yeah I'm just devising a framework and reworking the parsing code so it carries more information around.
21:19:16 <alise> Then the regular "@infix <symbol> a_function_in_compiler_space" where it's called with both arguments
21:19:20 <pikhq> Make it work by both recursing over the whole thing *and* fix-pointing.
21:19:38 <alise> and "@block <name> a_function_in_compiler_space" makes "block foo { bar }" call block_handler('foo', 'bar') -- which then returns braces code, which is used in place of the block
21:19:46 <pikhq> Compiling hanoi.b takes 1 second instead of 20.
21:19:55 <alise> pikhq: there has to be some "proper" way to do optimisation.
21:20:26 <pikhq> I just realised what I just said.
21:20:32 <pikhq> *I made the optimiser faster*.
21:20:34 <alise> pikhq: I don't get what's funny :P
21:20:42 <pikhq> "Optimised the optimiser!"
21:20:52 <alise> pikhq: My suggestion is thusly: fixpointing over the whole thing is slow, right?
21:21:14 <alise> So divide it into an even number of pieces; fixpoint all of those, and whenever two adjacent pieces become fixpointed, merge them into one piece and fixpoint them.
21:21:16 <pikhq> LostKng now takes 2 seconds to compile. And longer to assemble.
21:21:19 <alise> Repeat until there is only one piece; fixpoint that.
21:21:25 <alise> This will work for arbitrary-sized programs.
21:21:37 <alise> The theory is that after a block is fixedpoint, only the places where it connects to adjacent pieces will need optimisation.
21:21:44 <alise> So this is edge/"seam" optimisation after chunk optimisation.
21:21:45 <pikhq> alise: Now, it finds the fixed-point of "Optimise the entire parsed program".
21:22:03 <pikhq> Suboptimal, but it handles LostKng in 2 seconds.
21:22:07 <pikhq> This is fast enough, IMO.
21:22:22 <alise> Does it optimise multiplications yet?
21:23:05 <pikhq> nasm takes minutes to *assemble* the output.
21:23:15 <pikhq> I get the feeling it dislikes thousands of labels. :)
21:24:39 <pikhq> But hey, it works. :)
21:26:08 <pikhq> 5 minutes to assemble LostKng.
21:26:24 <pikhq> *Massive* amount of labels.
21:27:19 <alise> pikhq: The really interesting thing about an optimising BF compiler is that it's more of a decompiler.
21:27:35 <alise> A bunch of low-level instructions to a printing of "Hello, world!". A bunch of low-level instructions to a for-loop doing a multiplication.
21:30:55 <alise> pikhq: you know esotope's intermediate language?
21:30:58 <alise> sort of a half-assembly half-bf thing
21:31:00 <alise> that's a good idea.
21:32:24 <pikhq> alise: Yeah, if I do much more on this, I'll probably want to implement something like that.
21:32:35 <pikhq> It'd certainly make the code generator function cleaner.
21:35:30 <CakeProphet> alise: that's cool... (about the BF compiler) and makes sense.
21:35:44 <CakeProphet> alise: you have a set of very low level operations and need to convert them higher-level constructs.
21:37:53 <CakeProphet> is there a command line utility that lets you window multiple command lines into one desktop environment window?
21:38:22 <CakeProphet> I'd love to have bash in the same window as this IRC client.
21:45:33 <pikhq> http://sprunge.us/aUBM
21:46:06 <pikhq> I should really clean up the comp function.
21:49:49 <alise> CakeProphet: a tabbed terminal emulator.
21:50:17 <pikhq> Phantom_Hoover: Your mother.
21:50:28 <alise> data Syscalls = Read | Write | Indeterm deriving Eq
21:50:45 <pikhq> Indeterminite which was the last syscall used.
21:50:47 <alise> "Sum up what you've been doing." "Your mother."
21:50:48 -!- MigoMipo has quit (Read error: Connection reset by peer).
21:50:52 <alise> pikhq: Weird. Why?
21:51:16 <pikhq> alise: Came after a loop, and I've not bothered doing enough flow analysis to tell.
21:53:25 <zzo38> IM is a general raster image processor, for modifying images. It will not do lossless JPEG modifications. But now I invented a idea of the way in which it can do lossless JPEG modifications. The image is formatted such that moving blocks around and flipping/rotating blocks will do the same to the image, while other transformations might not work in the same way
21:53:29 <coppro> I want a balanced programming language
21:53:58 <zzo38> coppro: A balance programming language, for what kind, like, for low-level or high-level or script or whatever??
21:54:15 <zzo38> What exactly is a "balanced programming language" anyways?
21:54:24 <coppro> in tune with the universe
21:54:25 <zzo38> O, you want funge like
21:54:32 <coppro> also it has to use balanced ternary
21:54:52 <zzo38> I wonder if anyone invents a funge-like with balanced ternary
21:55:33 <alise> coppro: balanced language would always have same number of offs and ons
21:55:38 <alise> so the only information is carried in /where/ they are
21:55:48 <coppro> the = + and - operators will be the tritshift-left, tritshift-left-and-increment, and tritshift-right-and-decrement operators
21:56:18 <Phantom_Hoover> Literals seem like the only thing that would be affected.
21:56:58 <alise> no, fibonacci-imaginary
21:58:33 <zzo38> Phantom_Hoover: I suppose if you use INTERCAL operators it can be affected how the bits are stored like??
21:59:13 <alise> lol, i is 10.2 in quarter-imaginary
21:59:19 <coppro> hmm... also, you shouldn't be able to cross wires directly. Rather, the < operator, if confronted with an IP coming from the right, will split it into two vertical IPs
22:00:37 <alise> Phantom_Hoover: What WOULDN'T be the base.
22:00:46 <coppro> also vertical IPs should need to use | for constants, - is the reflection operator (and vice versa)
22:00:51 * coppro is going crazy at this point
22:00:57 <Phantom_Hoover> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12...
22:01:22 <alise> Negafibonacci works
22:01:41 <alise> now quarter-imaginary = 1/4 imaginary = base 2i
22:02:14 <alise> n imaginary = base 1/2n i
22:02:30 <alise> phimaginary = base 1/2phi i
22:02:35 <alise> = base 0.30901699... i
22:02:50 <alise> Combine rules of quarter-imaginary and http://en.wikipedia.org/wiki/Golden_ratio_base.
22:02:59 <alise> maybe 2phi i would be better
22:03:16 <coppro> what is 100i in base 10i?
22:03:58 <coppro> would it have to be a0?
22:05:09 <coppro> (since 100 would be 100)
22:05:15 <alise> CakeProphet: Any luck?
22:05:40 <alise> coppro: does quarter-imaginary work like that though?
22:06:30 <coppro> (and you mean base 0.25i?)
22:06:34 <zzo38> If you use lossless JPEG you might convert to grayscale as: blockjpeg:1.jpg -channel GB -evaluate Set 0 blockjpeg:2.jpg (or, something similar, at least)
22:07:10 <zzo38> While flipping is just: blockjpeg:1.jpg -flip blockjpeg:2.jpg
22:07:56 <CakeProphet> alise: yeah. I code slowly though. nowhere actually implementing anything yet. But I should having something done by the end of today. Got anything you want to change?
22:08:48 <coppro> alise: if you mean weird, yes
22:08:55 -!- dbc has joined.
22:09:01 <alise> CakeProphet: Yes I do have a request
22:09:05 <alise> CakeProphet: http://why.usesthis.com/images/interviews/why.4.jpg
22:09:30 <zzo38> Lossless scaling: blockjpeg:1.jpg -dctscale 50% blockjpeg:2.jpg
22:09:40 <zzo38> It should allow things like that
22:09:45 <alise> (The entire set of brilliance: http://why.usesthis.com/)
22:10:25 <alise> "I sip from a peach-colored ring mottle glass lo-ball. the ice cubes I use are semi-circular. and the ice tray itself is a misty blue plastic. my freezer allows 3 trays vertically. the strength of the freezer goes up to 5, but I am personally satisfied with leaving it at 2."
22:10:32 <alise> in a what-programs-do-you-use interview
22:11:43 <alise> "my favorite software ever is Windows XP, because they colored it to look like the start menu was made from freshly-mowed grass and montana sky! this opened new possibilities for hacker landscapers to send orchards to each other as e-mail attachments. (an entire orchard is 130k if you put it in an APPLES.BIN file.)"
22:11:54 <alise> "[...] the only other software I use besides windows xp is kjofol."
22:12:04 <zzo38> That doesn't even seem to make a good sensible
22:12:39 <coppro> alise: quarter-imaginary allows the use of i. If you used i in base i, 100i would be 100i, but 1000i would be 1000. Weird
22:12:58 <coppro> Also, neat fact: in base -1+i (or -1-i, which is the same), the set of numbers that share the integer part of a number is a fractal
22:13:01 <alise> zzo38: It's even better because it's in why's handwriting!
22:13:05 <alise> zzo38: He's crazy but I still miss him.
22:13:27 <alise> He mocked everyone mercilessly but never seemed to be unfriendly, and always had something fun/interesting/cool in the world of programming to point out.
22:16:57 -!- kar8nga has quit (Remote host closed the connection).
22:18:07 <alise> "I am using a Lemote Yeelong, a netbook with a Loongson chip and a 9-inch display. This is my only computer, and I use it all the time. I chose it because I can run it with 100% free software even at the BIOS level." --rms
22:18:18 <alise> this guy uses a shitty chinese netbook just to get 100% open source
22:18:49 <alise> "Until I can have them both, freedom is my priority. I've campaigned for freedom since 1983, and I am not going to surrender that freedom for the sake of a more convenient computer.
22:18:49 <alise> I do hope to switch soon to a newer model of Yeelong with a 10-inch display."
22:18:50 <alise> Phantom_Hoover: because he's rms
22:18:54 <alise> it would be wrong for him not to
22:19:38 -!- kar8nga has joined.
22:19:50 <alise> CakeProphet: it's not my fault why is (well, was) a beautiful artist.
22:20:36 <alise> Phantom_Hoover: every single account and internet prescense he owned save, uh, I think an almost-empty vimeo account, were completely wiped out overnight. By him.
22:20:58 <alise> His GitHub account with all his code, his current & discontinued blogs, his Twitter account, his YouTube account, ... everything.
22:21:03 <alise> Disappeared, just like that. Internet suicide.
22:21:06 <alise> Phantom_Hoover: Nobody knows.
22:21:23 <alise> Sure, he went to conferences occasionally and played silly songs about Ruby with his band...
22:21:30 <alise> Nobody knew his name though, not for sure.
22:22:05 <zzo38> I also think ImageMagick should support audio formats, which if loaded, load as a image with height=1. You can have red channel = left channel, blue channel = right channel. And use -density operator to set the sample rate. -flop to reverse a sound. Some of the other ImageMagick operators are also useful for audio
22:22:10 <alise> It's a real shame because he was one of my heroes basically.
22:22:20 <alise> And he had a lot of wonderful programs and code that he can't give his wonderful touch to any more.
22:22:25 <alise> And I'll always miss hackety.org.
22:22:46 <alise> I have a feeling he's not going to come back -- and if he does it won't be the same personality, so we'll never know.
22:23:16 <zzo38> Do you think some of ImageMagick operators are useful for audio files, which ones do you think are best?
22:23:46 <alise> zzo38: Really bad compression of music by using JPEG!
22:24:06 <zzo38> Yes, that would certainly be bad for music, JPEG is meant for photographs
22:24:18 <zzo38> Although, perhaps someone should try it just to see how bad it is, in fact
22:24:41 <alise> It sounded as awful as you'd expect
22:24:46 -!- zzo38 has quit (Quit: zzo38).
22:25:40 * Sgeo is magically teleporting books from nowhereland to the library
22:25:59 <coppro> the library is awesome
22:26:02 <coppro> do not mock the library
22:26:40 <Sgeo> Except for all the non-magnetic books
22:28:36 <alise> "Even functions are functions! I invented this concept. Just like Steve Jobs will one day." --why
22:30:22 <alise> [[Heres a case where a list is being called as a function. Yes, everything is a function! We could also have called: foods (index=2).
22:30:22 <alise> Strings, tables, numbers are also functions. The following returns the 3rd character of the string.
22:30:22 <alise> "ヘ(^_^ヘ)(ノ^_^)ノ" (2)
22:30:22 <alise> Even functions are functions! I invented this concept. Just like Steve Jobs will one day.]]
22:31:23 <pikhq> Looks suspiciously Japanese.
22:32:16 <alise> pikhq: Well, Ruby is Japanese.
22:32:19 <alise> Phantom_Hoover: who knows.
22:32:52 <alise> - People were starting to poke at his identity, which he probably didn't like
22:32:57 <alise> - Some of his last few tweets:
22:33:01 <alise> programming is rather thankless. you see your works become replaced by superior works in a year. unable to run at all in a few more.
22:33:01 <alise> if you program and want any longevity to your work, make a game. all else recycles, but people rewrite architectures to keep games alive.
22:33:02 <alise> ahh im just so totally suspicious of anyone who claims to love progress but stridently defends the status quo!!
22:33:09 <Sgeo> I just found evidence that LambdaMOO is a Myst game
22:33:14 <pikhq> alise: That it is.
22:34:53 <CakeProphet> to be a new-generation dynamic language that isn't as strict as Python... essentially.
22:34:53 <Sgeo> It's so flexible it's like asbestos dust!
22:35:23 <alise> Python and Ruby originate from the same time.
22:35:27 <alise> Ruby is actually matzlisp.
22:37:19 <alise> matz is the creator of Ruby.
22:37:47 <alise> Ruby was originally called matzlisp; he plugged in a Smalltalk-style object system and reworked the syntax. And made lambdas uglier, so he added "blocks" which are like limited lambdas that you can only have one of per function call.
22:38:01 <alise> It's not /that/ bad a language.
22:38:19 <alise> Larry Wall -- Christian
22:38:26 <alise> Matsumoto Yukihiro -- Mormon
22:39:23 -!- Oranjer has left (?).
22:42:25 <alise> Phantom_Hoover: Probably agnostic/atheist.
22:42:34 <alise> Religious people usually object to the idea of AI.
22:42:37 <alise> Especially back in the 70s.
22:42:43 <oerjan> pikhq: YOU DON'T KNOW MCCARTHY? HOW UNAMERICAN
22:43:15 <alise> I want to hug McCarthy and other people :(
22:43:18 <alise> THEY WILL DIE SOON THAT IS NOT GOOD
22:43:19 <Phantom_Hoover> alise: True, but they'll be laughing at us when the robots take over.
22:43:23 <pikhq> oerjan: I find it amusing that it was called the "Committee on UnAmerican Activities".
22:43:43 <pikhq> As though they wanted to be *doing* unAmerican activities.
22:43:53 <pikhq> Phantom_Hoover: Yes.
22:45:23 <alise> the King's English book suggested that would be good instead of hyphens iirc, but said it was too radical to adopt
22:49:58 <alise> CamelCase is indeed ugly.
22:50:54 <alise> I prefer the diaeresis: "premptive".
22:50:55 <oerjan> !haskell putStrLn "\001swats Phantom_Hoover and alise -----###\001"
22:51:12 <oerjan> !haskell putStrLn "\001ACTION swats Phantom_Hoover and alise -----###\001"
22:51:13 * EgoBot swats Phantom_Hoover and alise -----###
22:51:30 <alise> !haskell putStrLn "\nQUIT :butt"
23:02:04 -!- Sgeo_ has joined.
23:03:42 -!- Sgeo has quit (Ping timeout: 265 seconds).
23:05:23 -!- huldumadurin has joined.
23:06:54 -!- kar8nga has quit (Remote host closed the connection).
23:07:50 <alise> So, who are you then?
23:08:01 <oerjan> huldumadurin: i thought you were icelandic, was just about to ask you about Besti flokkurin
23:08:23 <huldumadurin> Just a random Faroese 17-year-old with a newfound interest in Esoteric Languages.
23:08:35 <alise> huldumadurin: Well, that's certainly an interesting combination.
23:09:02 <alise> I'm an English 14-year-old with a long-established interest in esoteric languages.
23:09:14 <oerjan> alise: a joke party won the local elections in iceland's capital
23:09:19 <alise> Also, I'm male despite the nickname. Long, and ultimately pointlessly boring, story.
23:09:30 <alise> oerjan: what's their platform
23:09:30 <Phantom_Hoover> I'm a Scottish 1X year old with a semi-long history in esolangs.
23:09:53 <oerjan> alise: some serious and some silly
23:10:02 <alise> oerjan: how boring
23:10:11 <alise> 1X year old; so assuming X is 10 and this is base 11...
23:10:19 <alise> you're 21 years old.
23:10:31 <oerjan> http://news.bbc.co.uk/2/hi/10194757.stm
23:10:31 <alise> what do the dozenal society guys use?
23:10:42 <oerjan> "Key pledges included "sustainable transparency", free towels at all swimming pools and a new polar bear for the city zoo."
23:11:25 <alise> Indeed, you are nine years old
23:13:01 <oerjan> "The party also called for a Disneyland at the airport and a "drug-free parliament" by 2020."
23:13:25 <alise> hm when did i first start coming here
23:13:27 <alise> when i was 12 i think
23:13:35 <alise> with a brief stint when 11, perhaps
23:13:50 <alise> i am making you feel old presently.
23:14:00 <Phantom_Hoover> I'm not actually sure if I had broadband when I was 11.
23:14:13 <alise> 'cuz you need broadband to access irc (ok but i did)
23:15:04 * oerjan is pretty sure he didn't have broadband when he was 11.
23:15:25 <oerjan> seeing as that was in '81.
23:15:31 <Phantom_Hoover> oerjan: They didn't *have* broadband when you were 11.
23:15:55 <oerjan> Phantom_Hoover: quite possibly not
23:16:15 <alise> I got internet at 5 or 6 or something
23:16:22 <alise> This may explain why I am fucked up!
23:16:47 -!- T-T has joined.
23:17:33 <alise> 8-10 or something was my first steps
23:17:37 <alise> then i started properly programming at like 12
23:17:40 <oerjan> alise: some 10 years from now it will be discovered that everyone who starts internet that young goes insane when they grow up
23:17:48 <alise> but i still think of my programming self one or two years ago as quite immature...
23:17:48 <myndzi> my kids aren't gonna learn "mama" or "papa" as their first words
23:17:51 <myndzi> they are gonna learn "hello world"
23:17:53 <alise> oerjan: I am already insane!
23:17:55 <alise> oerjan: the state proves it
23:17:57 <Phantom_Hoover> And then because of my school's insane curriculum I didn't touch one of their computers for a year.
23:18:02 <alise> myndzi: please don't have kids :D
23:18:08 <oerjan> alise: well you're precocious [sp]
23:18:16 <alise> oerjan: WHYEVER WOULD YOU SAY THAT
23:18:25 <alise> i try to stay on the asshole side of things
23:19:21 -!- UppunudLamppu has quit (Ping timeout: 264 seconds).
23:19:42 <Phantom_Hoover> But then I changed school and they taught programming in Javascript.
23:19:44 <alise> my favourite language is -- i don't have one :(
23:19:52 <alise> maybe J, J is pretty flawless but it doesn't do much
23:19:57 <alise> Phantom_Hoover: JScript then not javascript :P
23:20:16 <Phantom_Hoover> You expect them to pay that sort of attention to detail?
23:20:49 <Phantom_Hoover> For exam purposes, a macro has nothing to do with text substitution, it is a script in a word processor.
23:21:39 -!- T-T has quit (Client Quit).
23:25:29 -!- poiuy_qwert has joined.
23:29:00 <pikhq> alise: Y'know what'd be totally awesome to implement?
23:29:26 <pikhq> Replacing each and every one of the algorithms on the "Brainfuck algorithms" page with their equivalents in assembly.
23:31:08 <oerjan> lightweight love machine
23:31:28 <alise> pikhq: What kind of assembly?
23:31:33 <alise> That's too ... specific.
23:31:39 <alise> Most uses of the algorithm will be tweaked slightly...
23:31:48 <alise> like hard-wiring hello world program to an efficient version
23:31:51 <alise> or lostkng to a hand-optimised version
23:32:02 -!- CakeProphet has quit (Read error: Operation timed out).
23:32:10 -!- CakeProphet has joined.
23:32:15 <pikhq> alise: Among other things.
23:36:24 -!- BeholdMyGlory has quit (Remote host closed the connection).
23:36:27 -!- Zuu has quit (Read error: Connection reset by peer).
23:37:32 -!- Phantom_Hoover has quit (Ping timeout: 265 seconds).
23:39:04 -!- Zuu has joined.
23:39:31 -!- tombom has quit (Quit: Leaving).
23:44:24 -!- CakeProphet has quit (Ping timeout: 276 seconds).
23:45:45 -!- CakeProphet has joined.
23:51:45 -!- CakeProp1et has joined.
23:51:57 -!- CakeProphet has quit (Ping timeout: 272 seconds).
23:53:06 -!- FireFly has quit (Quit: swatted to death).
23:57:04 -!- CakeProp1et has quit (Ping timeout: 240 seconds).
23:58:19 -!- oerjan has quit (Quit: Good night).
23:59:15 -!- CakeProphet has joined.