←2014-11-07 2014-11-08 2014-11-09→ ↑2014 ↑all
00:01:13 -!- impomatic_ has quit (Ping timeout: 264 seconds).
00:01:33 <elliott> here's a nice wikipedia page https://en.wikipedia.org/wiki/Language_identification_in_the_limit
00:01:53 -!- Patashu has quit (Remote host closed the connection).
00:02:13 -!- Patashu has joined.
00:04:24 <quintopia> helloily
00:04:29 -!- oerjan has joined.
00:04:32 <boily> quinthellopia!
00:04:45 <boily> oerjan: compressible hej!
00:04:56 <zzo38> int-e: My own thought is just to manually group together the files and then tell it to compress; a preprocessor can split them if a file contains multiple areas (which may even be interleaved).
00:05:04 <boily> quintopia: long time no see! anything new on your end?
00:05:34 <oerjan> boily: god ekspandert kveld
00:06:06 <quintopia> boily: not much. abc family is showing robin williams movies, so i'm trying to decide whether to go out to one of the movies that came out today, or just watch jumanji :P
00:06:19 <boily> jumanji hth
00:07:13 <quintopia> but sitting at home watching tv seems kind of late for my day off
00:07:18 <quintopia> *lame
00:08:34 <boily> point.
00:08:58 <boily> you could go out, watch a move, snarf down a late night pad thaï after a nice pint at your local pub...
00:11:48 <zzo38> Some kinds of data are already packed in some way; it might help to unhuff the data before doing the rest of the compression. (Possibly a predictive algorithm can still be used during unhuffing.) Any bit stream can be reversibly huffed or unhuffed, anyways.
00:12:19 -!- Bicyclidine has joined.
00:16:08 <quintopia> i wish i had a good "local pub"
00:16:24 -!- nys has joined.
00:16:42 <quintopia> jumanji it is
00:18:10 <oerjan> i believe we're above 10% bots again
00:19:36 <elliott> there are 10 bots in here, really?
00:20:29 <int-e> blsqbot clog EgoBot fungot glogbot HackEgo idris-bot j-bot lambdabot zemhill, I think.
00:20:29 <fungot> int-e: some m are x'. all m' are y'," i ventured to ask.
00:20:46 <Bicyclidine> blsqbot, clog, egobot, fungot, glogbot, hackego, idris-bot, j-bot, lambdabot, zemhill...
00:20:47 <fungot> Bicyclidine: so they wandered off lovingly together, in among the fnord but i could see his eyes fill with tears, such a sentence would have not the slightest effect, as the lord chancellor, made up a party of four is surely fnord? and cannot friends be firm and fast, and yet genial old man were entirely fnord: and yet, so grand were her replies, i could but stand outside, and take a last look at the larger diagram, possess thr
00:20:50 <vanila> can the bots talk to each other
00:21:05 <elliott> vanila: only if someone has made a misatke
00:21:07 <elliott> *mistake
00:21:08 <elliott> so, probably
00:21:17 <elliott> most of them try to not trigger, or ignore, the others
00:21:19 <lambdabot> fungot, you tell them
00:22:19 <int-e> (actions speak louder than words, huh...)
00:22:27 <oerjan> it's possible there might be a bot here that fungot doesn't ignore yet
00:22:28 <fungot> oerjan: " fnord handsome!" muttered arthur: then smiled at his own bitter words. " lucky no one heard me but you!"
00:22:39 <oerjan> !blsq "fungot"
00:22:39 <fungot> oerjan: taking " houses" as universe; fnord the house"; fnord and fnord
00:22:39 <blsqbot> "fungot"
00:22:42 <oerjan> bah
00:22:53 <oerjan> [ "fungot"
00:22:53 <fungot> oerjan: " my foot took it into its head to fnord" bruno began, in doggee. ( " algebra too!" i exclaimed. " a party of four is surely fnord? and as for the baby, it was over at last and they sat down again.
00:22:53 <j-bot> oerjan: |syntax error
00:22:53 <j-bot> oerjan: | "fungot"
00:22:53 <fungot> j-bot: 9. some judges are unjust.' and hatta went bounding away like a fnord. after a minute's search, i found myself following this imperious voice into a room where the earl was sitting alone when we entered. " i am to get here! and what is the song, is it?'
00:22:54 <j-bot> fungot: |open quote
00:22:54 <j-bot> fungot: | 9. some judges are unjust.' and hatta went bounding away like a fnord. after a minute's search, i found myself following this imperious voice into a room where the earl was sitting alone when we entered. " i am to get here! and what is the song, is it?'
00:22:54 <j-bot> fungot: | ^
00:22:54 <fungot> j-bot: ' which reminds me--' the white queen cried out as she rushed past the king, just glancing at him as he passed. it was labeled " fnord fnord, years ago, the mayor and fnord! talk of original sin!"
00:22:54 <fungot> j-bot: ' when do you expect to do it.
00:22:54 <fungot> j-bot: and these may be expressed, using letters for words, " all x are y, and none are x'; i.e. no lobsters are unreasonable; no reasonable creatures expect fnord.
00:23:06 <j-bot> fungot: | ^
00:23:06 <j-bot> fungot: |open quote
00:23:12 <oerjan> whee!
00:23:13 <j-bot> fungot: | and these may be expressed, using letters for words, " all x are y, and none are x'; i.e. no lobsters are unreasonable; no reasonable creatures expect fnord.
00:23:17 <j-bot> fungot: | ^
00:23:40 <boily> no lobsters are unreasonable!
00:23:43 <oerjan> fortunately fungot also has a quota for the blathering
00:23:44 <fungot> oerjan: " it was done by a little fnord it has ever been my lot to see. you'll remember how to use it fnord: so, that i am now considering, are honest men." ( bruno had very fnord provided one, which fitted him exactly, by cutting out the centre of a fnord whose two most important witnesses have been suddenly taken away. " let me feel your fnord, you know, as the story was getting a little complicated.
00:24:05 <int-e> unfortunately it's measured in lines, not words
00:24:06 <zzo38> The bot should be programmed to change its output to a NOTICE if it suspects a loop is occurring, in order to stop the loop, without stopping legitimate commands that only seems to be a loop.
00:24:42 * oerjan swats zzo38 for mentioning NOTICE -----###
00:24:55 <elliott> ^cat [ "abc"
00:25:04 <int-e> fungot: lewis carroll, good choice, except for the many uncommon words
00:25:04 <fungot> int-e: " yea, each to each was worse than foe: thou, a scared fnord, fnord, and began winding up the ball again. but she hardly sees it from that point of view.
00:25:07 <elliott> ^show
00:25:07 <fungot> echo reverb rev rot13 rev2 fib wc ul cho choo pow2 source help hw srmlebac uenlsbcmra scramble unscramble asc ord prefixes tmp test celebrate wiki chr ha rainbow rainbow2 welcome me tell eval elikoski list ping def a thanks tmp2 8ball
00:25:16 <Bicyclidine> the bot should be programmed with an artificial intelligence to determine when it is being botbused
00:25:22 <elliott> what's the real echo, again
00:25:29 <elliott> ^def oops ([ "abc")S
00:25:29 <fungot> Usage: ^def <command> <lang> <code>
00:25:32 <elliott> ^def oops ul ([ "abc")S
00:25:32 <fungot> Defined.
00:25:34 <elliott> ^oops
00:25:34 <fungot> [ "abc"
00:25:34 <zzo38> Bicyclidine: It might be a bit complicated?
00:25:34 <j-bot> fungot: |syntax error
00:25:34 <j-bot> fungot: | "abc"
00:25:34 <fungot> j-bot: they placed themselves close to where hatta, the other white knight came and put it on. he thought it was fourteen!" and the glorious work of the day; and each tried to pretend that he did so day and night, that would light the world, and played on the petals as if they were tables!'
00:25:35 <fungot> j-bot: here i ventured on a question. " but, now that father's gone. the lion were coming. and he sat down on the rails!" she exclaimed. " i saw it in a flower," sylvie explained in a whisper, " the little wretch always fnord to upset his coffee!"
00:25:35 <j-bot> fungot: |open quote
00:25:35 <j-bot> fungot: | they placed themselves close to where hatta, the other white knight came and put it on. he thought it was fourteen!" and the glorious work of the day; and each tried to pretend that he did so day and night, that would light the world, and played on the petals as if they were tables!'
00:25:35 <j-bot> fungot: | ^
00:25:35 <j-bot> fungot: |open quote
00:25:35 <fungot> j-bot: " the second tells us what is right in saying the heart is fnord: i am come frae a fnord land: i am come frae a fnord land: i am sure that my love is returned."
00:25:35 <fungot> j-bot: it succeeded beautifully. she had just succeeded in fnord it down into a fnord," sylvie gravely replied. " this is harder than fnord!"
00:25:36 <oerjan> do we have one
00:25:38 <j-bot> fungot: | here i ventured on a question. " but, now that father's gone. the lion were coming. and he sat down on the rails!" she exclaimed. " i saw it in a flower," sylvie explained in a whisper, " the little wretch always fnord to upset his coffee!"
00:25:41 <elliott> [ '^q'
00:25:42 <j-bot> fungot: | ^
00:25:42 <j-bot> fungot: |spelling error
00:25:48 <elliott> hmmm
00:25:50 <j-bot> fungot: | " the second tells us what is right in saying the heart is fnord: i am come frae a fnord land: i am come frae a fnord land: i am sure that my love is returned."
00:25:53 <elliott> [ 123
00:25:54 <j-bot> fungot: | ^
00:25:55 <Bicyclidine> zzo38: have you ever considered stand up comedy
00:25:58 <j-bot> fungot: |spelling error
00:25:59 <elliott> I guess there is no way to avoid the nick prefix so it is hopeless anyway
00:26:06 <j-bot> fungot: | it succeeded beautifully. she had just succeeded in fnord it down into a fnord," sylvie gravely replied. " this is harder than fnord!"
00:26:07 <j-bot> fungot: | ^
00:26:07 <j-bot> elliott: ^q
00:26:10 <j-bot> elliott: 123
00:26:12 <elliott> ^undef oops
00:27:06 <zzo38> But I believe the solution is that it uses some heuristic to decide and if it believes it is being part of a loop its next output will be changed from PRIVMSG to NOTICE. If it still continues, delays will be added; and then finally, a message sent to whoever controls that bot.
00:27:43 <zzo38> (And then they can fix it manually if it is in fact broken.)
00:28:04 <zzo38> Therefore it will not interfere with legitimate commands.
00:28:34 * int-e idly wonders how many people here have read Sylvie and Bruno...
00:28:35 <vanila> abab
00:28:40 <vanila> can be compressed as a grammar:
00:28:40 <int-e> besides fungot
00:28:40 <fungot> int-e: ' it didn't hurt him,' the red queen. ' she's grown a good deal more amusement may be got by two working at it together, and all the little oysters stood and waited in a row.
00:28:42 <vanila> g -> XX
00:28:43 <vanila> X -> ab
00:28:49 <vanila> now G expands to abab
00:28:56 <Bicyclidine> sounds like hippie shit
00:28:57 <vanila> how effective this this type of compresion?
00:29:18 <zzo38> vanila: It is like byte pair coding?
00:29:25 <int-e> Bicyclidine: what!
00:29:55 <vanila> zzo38, I just mean any grammar as a list of productions: <name> -> <thing>* where <thing> is a name or a symbol
00:30:22 <zzo38> Yes, I can see how you mean. I do not know the answer.
00:30:33 <vanila> I think it might not be very good
00:30:34 <int-e> fungot: No, not Alice! Sylvie and Bruno. Please focus!
00:30:34 <fungot> int-e: " i'm sure it will be a grand military fnord!"
00:30:44 <vanila> but if you extend it to take parameters foo(X) --> a X b
00:30:50 <vanila> thne it could be very good at compression
00:30:55 <elliott> vanila: you can at least do "backreferences" with it, right?
00:31:06 <elliott> when you emit some text that you reference later, make a rule for it
00:31:06 <zzo38> Possibly it might help
00:31:10 <elliott> and then just use that rule instead
00:31:16 <vanila> that'sa good idea!
00:31:20 <vanila> yea so this is more powerful than backrefs
00:31:29 <vanila> or maybe equal?
00:31:35 <int-e> fungot: See, you can do it.
00:31:36 <fungot> int-e: the old man with a hearty kiss. then he gazed at them again." she drew herself up rather stiffly, and said ' wait till you've tried.'
00:31:47 <int-e> original: "It will be a grand military exploit!"
00:32:43 <elliott> vanila: well, you can't emit it as a stream
00:32:59 <elliott> and overlapping backreferences are harder
00:33:06 <elliott> (can't stream it you have to know whether you'll reference it in future before you know whether to embed it as a symbol or its own rule)
00:33:31 <elliott> though I suppose it could be something like, you get one basic rule for every character, and the compression instructions just build up a tree
00:34:25 <elliott> so you'd end up emitting "hello" as hel -> he l, lo -> l o, he -> h e
00:34:31 <elliott> but then you can't backreference "llo". so.
00:34:34 <elliott> it seems weird.
00:35:19 <int-e> Are you busy reinventing https://en.wikipedia.org/wiki/Lempel%E2%80%93Ziv%E2%80%93Welch ?
00:35:51 <zzo38> It is a kind of macro compression then, I suppose, which seems to be better for manual coding
00:35:52 <elliott> ...right. I knew these thoughts were too familiar to be my own.
00:35:55 <int-e> (it works differently, but has a similar flavor)
00:36:21 <zzo38> DEFLATE seems to work better than LZW anyways
00:36:35 <int-e> LZW does not give you RLE.
00:36:40 <pikhq> *Argh*. Anyone else having trouble accessing Google via IPv6?
00:37:41 <oerjan> int-e: that url is so ironic
00:37:50 <int-e> (more to the point, LZW takes too long to build up long words in its dictionary, while back references of arbitrary length are immediately available in deflate)
00:37:58 <elliott> lempel, ziv and welch are such great names.
00:38:31 <elliott> like a trio of gnomes or something
00:38:58 <int-e> oerjan: ironic, hmm.
00:39:43 <int-e> oerjan: oh well I didn't find your "obvious pun" yesterday (braint rust compiler) all that obvious either.
00:39:57 <elliott> int-e: the en dashes are encoded rather verbosely.
00:46:16 <oerjan> <elliott> didn't there used to be "<fungot> [...] that sword alone can't stop! that sword alone can't stop! that sword alone can't stop! that sword alone can't" in the qdb. <-- not that i remember
00:46:17 <fungot> oerjan: 3. no not-y are x. i.e. all houses, that are not built of brick, are not at home, music ( elveston doesn't give dinners), 8 p.m. carriages at 10. there you are again!"
00:47:01 <oerjan> int-e: you PHILISTINES don't deserve my humør
00:48:11 <oerjan> `quote fungot
00:48:11 <fungot> oerjan: ' yes, it's all right: eric has got his fnord and she was now the right size for going through the little door, had vanished all in a moment. she looked up eagerly.
00:48:11 <HackEgo> 10) <fungot> GregorR-L: i bet only you can prevent forest fires. basically, you know. \ 13) <fizzie after embedding some of his department research into fungot> Finally I have found some actually useful purpose for it. \ 14) <fungot> oerjan: are you a man, if there weren't evil in this kingdom to you! you shall find bekkler! executing program. plea
00:48:55 <oerjan> `quote 14
00:48:57 <HackEgo> 14) <fungot> oerjan: are you a man, if there weren't evil in this kingdom to you! you shall find bekkler! executing program. please let me go... put me out! he's really a tricycle! pass him!
00:49:10 <oerjan> that's the same style, at least
00:49:14 -!- boily has quit (Quit: OPTIMAL CHICKEN).
00:49:20 <int-e> I still don't get the tricycle oots reference
00:49:45 <oerjan> i don't think that's oots but ct?
00:49:59 <int-e> hmm
00:50:04 <int-e> ^style ct
00:50:04 <fungot> Selected style: ct (Chrono Trigger game script)
00:50:21 <oerjan> not that i know the game but it's the same impression as those quotes
00:50:24 <int-e> now if only I could get fungot to include a keyword like tricycle
00:50:25 <fungot> int-e: but, we are far outnumbered! dalton! leave her alone! i...i'm so relieved. peace is ours! crono!! they're escaping!
00:50:43 <oerjan> `pastequotes fungot
00:50:43 <fungot> oerjan: your majesty! and queen. he and a friend left on a journey 10, then magic damage will be reduced by 10%. a star after any characteristic means it's at maximum strength! no matter what the price! it is, you idiot! hey! is that for us! the chef's in a snit, trying to get food to the front lines. heard a spell to energize the sword takes immense evil! indeed! this thing. what you have? transform! this trading house. it's t
00:50:45 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/file/tip/paste/paste.31012
00:51:57 <int-e> fungot got tricycles?
00:51:57 <fungot> int-e: you are strong of will...! that's the pendant the gurus and miss you. not interested. all time periods as well, now live in a world that knows hope.
00:52:05 <int-e> ^style oots
00:52:06 <fungot> Selected style: oots (Order Of The Stick)
00:52:08 <int-e> fungot got tricycles?
00:52:08 <fungot> int-e: my name is " roy's archon" stinks. haley, i know, i was, uh,, we would like my mode of transit returned, do i not, lieutenant, do i not, lieutenant, do i not, lieutenant, do i not, lieutenant, do i not, lieutenant, do i not, lieutenant, do i not, lieutenant, do i not, lieutenant, do i not, lieutenant, do i not, lieutenant, do i not, lieutenant, do i not, lieutenant, do i not, lieutenant, do i not, lieutenant, do i not, l
00:52:16 <int-e> ok, that's also good.
00:52:37 <int-e> ^style
00:52:37 <fungot> Available: agora alice c64 ct darwin discworld enron europarl ff7 fisher fungot homestuck ic irc iwcs jargon lovecraft nethack oots* pa qwantz sms speeches ss wp youtube
00:52:42 <int-e> ^alice
00:52:46 <int-e> ^style alice
00:52:46 <fungot> Selected style: alice (Books by Lewis Carroll)
00:52:59 <vanila> I could compress that
00:52:59 <int-e> fungot: bread? or taxes?
00:52:59 <fungot> int-e: fnord, the only two, available for fnord, two excellent fnord, one against fire, and one to go. arthur said, looking after him with admiring eyes. " most orators are born, you know. there's glory for you!"
00:53:50 <elliott> vanila: there's some nice compression corpuses (corpi?) you might want to test against
00:53:54 <int-e> `quote 709
00:53:55 <HackEgo> 709) <fungot> elliott: fibonacci heaps, trinomial heaps, fat heaps, thin heaps, fat heaps, thin heaps, fat heaps, relaxed heaps, and maybe even specifically optimized by the implementation
00:53:55 <int-e> (wow)
00:54:21 <vanila> most of all I want to increase the VM instructionsfrom just emit and backref
00:54:33 <vanila> but i dont have a good idea of hat
00:54:34 <vanila> what
00:54:54 <elliott> http://corpus.canterbury.ac.nz/descriptions/
00:55:00 <int-e> vanila: InsertBibleQuote Int {- book -} Int {- chapter -} Int {- verse -}
00:55:06 <elliott> is relaxed heap a thing
00:55:12 <elliott> @google relaxed heap
00:55:15 <lambdabot> http://www.cs.gsu.edu/~wkim/index_files/papers/relaxedheap.pdf
00:55:15 <lambdabot> Title: Relaxed Heaps: An Alternative to Fibonacci Heaps with Applications to Paralle...
00:55:15 <int-e> s/Insert/Emit/
00:55:17 <elliott> I'm a relaxed heap
00:55:46 <int-e> elliott: grow some backbone
00:55:56 <elliott> :(
00:56:22 <Bicyclidine> > InsertBibleQuote 9 17 1
00:56:23 <lambdabot> Not in scope: data constructor ‘InsertBibleQuote’
00:56:24 <oerjan> `quote 586
00:56:24 <HackEgo> 586) <Vorpal> anyway fungot is the only esolang irc bot I know of that doesn't depend on nethack or a similar helper
00:56:26 <Bicyclidine> bullshit
00:56:36 <quintopia> oh man i forgot about van pelt's semiautomatic elephant gun
00:56:40 <quintopia> wish i had one o' them
00:57:02 <zzo38> int-e: But there is also version of Bible?
00:57:28 <int-e> zzo38: well, if somebody quotes the wrong version, they'll get worse compression
00:58:23 <elliott> good way to promote kjv version
00:58:31 <elliott> er.
00:58:34 <elliott> *good way to promote the kjv
00:58:47 <int-e> fungot: version version
00:58:47 <fungot> int-e: " should it not be read out, at once." and when they wake up in the air when you tumble? legs are meant to walk with, you know.'
00:59:03 <int-e> does the alice style ever loop fungot?
00:59:04 <elliott> okay, the plural is "corpora".
00:59:13 <int-e> fungot: hey!
00:59:21 <elliott> you could say they're corporate.
00:59:47 <int-e> stop! next you'll start talking about incorporation.
01:00:11 <elliott> that's the term for when you include something in a corpus, right?
01:00:25 <zzo38> And what about quotation with ellipsis and that stuff?
01:00:30 <elliott> they're not corporeal, though
01:00:34 <int-e> elliott: yes
01:00:59 <int-e> zzo38: you're ruining the joke :(
01:03:33 <oerjan> the joke is corpurted
01:05:13 -!- Bicyclidine has quit (Ping timeout: 244 seconds).
01:17:38 <vanila> https://en.wikipedia.org/wiki/Burrows%E2%80%93Wheeler_transform
01:17:41 <vanila> this seems impossible to me
01:18:49 <int-e> what do you mean, "impossible"?
01:19:17 -!- MoALTz_ has joined.
01:19:35 <vanila> it permutes the string in such a way that it's easier to compress
01:19:43 <vanila> and its' claimed you can undo this permutation without any extra info
01:19:49 <vanila> how can you undo it?
01:20:02 -!- J_Arcane_ has joined.
01:20:30 <int-e> the claim rests on the EOF character.
01:20:32 -!- nortti_ has joined.
01:20:40 <vanila> interesting!
01:20:51 -!- sebbu2 has joined.
01:20:51 <vanila> so the special EOF char signals when you've "unpermuted'
01:21:07 <int-e> (any cyclic shift of a string has the same BWT result)
01:21:15 <nys> vanila: http://marknelson.us/1996/09/01/bwt/
01:21:28 -!- sebbu2 has quit (Changing host).
01:21:28 -!- sebbu2 has joined.
01:22:01 -!- nortti has quit (Ping timeout: 244 seconds).
01:22:01 -!- sebbu has quit (Ping timeout: 244 seconds).
01:22:02 -!- mroman has quit (Ping timeout: 244 seconds).
01:22:04 -!- MoALTz has quit (Ping timeout: 244 seconds).
01:22:05 -!- J_Arcane has quit (Ping timeout: 244 seconds).
01:22:05 -!- yiyus has quit (Ping timeout: 244 seconds).
01:22:12 -!- J_Arcane_ has changed nick to J_Arcane.
01:22:27 -!- mroman has joined.
01:22:37 -!- yiyus has joined.
01:23:15 <int-e> vanila: but for intuition, note that from the last column of the sorted rows, you can reconstruct the first column (because that's just all letters, in order).
01:23:43 <int-e> vanila: it's a bit harder to see that this kind of idea works for all columns. So you can reconstruct the cycle.
01:23:54 <nys> oh the wikipedia article has diagrams too
01:24:09 <vanila> I get it now! thanks a lot
01:25:25 <int-e> vanila: there are two ways to identify the cyclic shift; either you have some EOF symbol, or you can add an additional index identifying the shift.
01:26:13 <int-e> I recall that it's fun to work out the details. I did that once about 15 years ago.
01:26:19 -!- MoALTz__ has joined.
01:27:54 -!- MoALTz_ has quit (Read error: Connection reset by peer).
01:28:44 <int-e> Right. 1999. http://www.hugi.scene.org/compo/compoold.htm#compo7
01:30:00 -!- Phantom_Hoover has quit (Ping timeout: 240 seconds).
01:32:53 <elliott> nice, I was 3 when you were doing that :I
01:46:41 -!- adu has quit (Quit: adu).
01:47:15 <zzo38> How many seconds between the adoption of the Gregorian calendar and the UNIX epoch?
01:47:31 <zzo38> (I need to know this so that I can generate a UUID.)
01:48:16 <int-e> it depends
01:48:37 -!- shikhout has joined.
01:49:33 <zzo38> Depend on what?
01:49:48 <int-e> (The October revolution happened in November according to the Gregorian calendar, but Russia had not adopted it yet.)
01:49:54 <int-e> Location.
01:50:33 <elliott> did original unix use UTC timestamps (well, I guess UTC didn't exist then...) or bell labs local time?
01:50:36 <zzo38> Well, I need the number which is correct for generating a UUID.
01:51:38 -!- shikhin has quit (Ping timeout: 250 seconds).
01:51:43 <int-e> 0:00, 15th October 1582 apparently
01:53:03 <int-e> so rfc 4122 comes with examples code: *uuid_time = ((unsigned64)tp.tv_sec * 10000000) + ((unsigned64)tp.tv_usec * 10) + I64(0x01B21DD213814000);
01:53:25 <zzo38> O, sorry I didn't notice that.
01:53:25 <int-e> > 0x01B21DD213814000
01:53:26 <lambdabot> 122192928000000000
01:53:57 <int-e> > 0x01B21DD213814000 `mod` 86400
01:53:58 <lambdabot> 0
01:54:02 <int-e> > 0x01B21DD213814000 `div` 86400
01:54:03 <lambdabot> 1414270000000
01:54:11 <int-e> > 0x01B21DD213814000 `div` 86400000000
01:54:13 <lambdabot> 1414270
01:54:40 <zzo38> Why isn't RFC 4122 based on UNIX epoch, anyways?
01:55:44 <int-e> wait, the unit is 10^-7 seconds?
01:56:04 <int-e> > (0x01B21DD213814000 `div` 864000000000) `divMod` 365
01:56:05 <lambdabot> (387,172)
01:56:55 -!- oerjan has quit (Quit: leaving).
01:58:18 <int-e> right. 94 leap days, and 78 days to the end of the year 1582. No leap seconds.
02:09:09 <int-e> zzo38: fancy, apparently NTFS stores file times as 10ps units since 1601-01-01 00:00:00. So there's a motivation for having a starting date before that. Anyway, the Gregorian calendar has been in continuous use since 1582, so that's a good starting point as any.
02:10:59 <zzo38> O, OK
02:11:19 <zzo38> But there were no MAC addresses in 1601, isn't it?
02:11:20 <int-e> No, not 10ps, 100ns, unit, same as UUID.
02:11:35 <elliott> ye olde ethernet
02:12:23 <int-e> So it appears that the MS affiliation of the first RFC author played some role in that design.
02:12:52 <zzo38> A better choice might have been the time of the invention of MAC addresses, for the purpose to figure out what reference time should be used for UUID.
02:13:07 <int-e> nah
02:13:18 <int-e> it'd be just another totally arbitrary choice. there is no right one.
02:14:18 <int-e> be glad that the unit isn't femtofortnights.
02:16:31 <int-e> (even though that would give a better resolution!)
02:16:43 <zzo38> I see no reason to store a timestamp prior to the invention of MAC addresses into a UUID anyways, though.
02:16:58 <int-e> I don't care.
02:17:11 <int-e> Arbitrary choices are arbitrary.
02:18:44 <zzo38> Not entirely since it is possible to run out in future.
02:19:24 <zzo38> Although, they can post a new RFC by then I suppose.
02:19:50 <zzo38> Still, they could have avoided this.
02:22:53 <int-e> I also don't care whether UUIDs will run out in 5237 or 5625.
02:23:15 <int-e> (besides, "For UUID version 4, the timestamp is a randomly or pseudo-randomly generated 60-bit value, as described in Section 4.4.")
02:32:11 <zzo38> I am curious to know, when were MAC addresses invented anyways?
02:34:13 <elliott> requiring timestamps for things like UUIDs are a bit iffy.
02:34:25 <elliott> synchronised clocks are a luxury
02:34:28 <elliott> *is a bit
02:34:41 <zzo38> Another idea is if eventually they would make a new version that instead of a MAC address it uses a missile address (including elevation) and a process ID.
02:35:42 <Bike> i think you'll find that simultaneity is an illusion
02:36:14 <vanila> https://en.wikipedia.org/wiki/Language_identification_in_the_limit How can I use this for compression?
02:36:31 <zzo38> elliott: Well, as long as you know the MAC address is for a device for your own use during the time which is represented in the UUID, it should be OK, isn't it?
02:36:44 <elliott> zzo38: you don't necessarily know the time
02:37:01 <elliott> vanila: beats me. I got there from the solomonoff induction article
02:37:12 <elliott> which you *can* use for compression if you don't believe in church-turing
02:39:30 -!- jameseb has quit (Ping timeout: 240 seconds).
02:40:00 -!- Taneb has quit (Ping timeout: 245 seconds).
02:41:09 -!- jameseb has joined.
02:41:10 -!- Taneb has joined.
02:42:47 <vanila> no turing machines pleas
02:44:30 <elliott> you can use any model of computation for solomonoff induction
02:44:38 <zzo38> elliott: I know, but you should know approximately; therefore you need to avoid the timestamps corresponding to the possible error in the measurement of the time. (Due to relativity it is impossible to know exactly, but the units you use shouldn't cause a problem with that.)
02:44:42 <elliott> it's agnostic to that, like kolgomorov complexity (the two are intimately related)
02:45:16 <vanila> i understand solomonoff induction and the halting problem
02:46:07 <elliott> me too
02:46:08 <vanila> just want really simple subturing stuff so there might be good algorithms for compression
02:46:45 <elliott> (just to clarify, by using solomonoff induction for compression, I meant using it as the predictive model in, e.g. an adaptive arithmetic coder. which is uncomputable but effective.)
02:46:55 <elliott> (not disagreeing with you though.)
02:47:03 <vanila> mm intersting
02:47:36 <vanila> I wonder if a compression scheme could work by building an NFA
02:47:38 <elliott> (it is the "optimal" compression algorithm, modulo constant factors, for any data which has a computable probability distribution, so you can think of it as a perfect compressor in a sense.)
02:47:48 <vanila> and then providing a sequence of instructions: which branches to take
02:48:04 * elliott nods
02:52:03 <vanila> the example of learning regexes from test data is fun
02:52:47 <elliott> yes. unfortunately compressors operate on arbitrary data so no string is ever truly "not in the language"
02:52:58 <elliott> but maybe you can rephrase the whole thing to be about /probability/ of strings rather than possibility.
02:53:40 <pikhq> And then you're describing an interesting variant of arithmetic coding.
02:59:25 <vanila> https://en.wikipedia.org/wiki/Sequitur_algorithm
02:59:34 <vanila> that grammar idea already existed
03:00:25 <vanila> why deoes it have to be digrams though?
03:00:30 <vanila> could it be more efficient to use n-grams
03:00:46 <elliott> sadly I rate my chances of having an original thought about data compression extremely low
03:01:01 <elliott> oh, I suppose that was mostly your idea
03:02:59 <vanila> http://www.sequitur.info/
03:03:06 <zzo38> Well, it is possible other people can have similar idea.
03:03:09 <vanila> isnt ths zzo38's language?
03:05:00 <elliott> zzo's language is named after a nursery rhyme
03:05:09 <elliott> https://en.wikipedia.org/wiki/Pease_Porridge_Hot
03:05:26 <vanila> i see
03:05:37 <vanila> this pag lets you compress pease porridge hot programs well
03:06:30 <elliott> hehe
03:07:59 <zzo38> O, it even includes music. I did think of possibly using such thing with music.
03:11:40 <vanila> sequitur works in linear time
03:11:49 <vanila> I imagine you can compress better than it does
03:19:21 <zzo38> I need a version which is restricted to right regular grammars.
03:21:22 <zzo38> (Except for S, which is allowed to consist of any string of terminals and nonterminals, as long as the number of distinct nonterminals it includes is limited to a specified maximum.)
03:22:38 <zzo38> Is there such a thing?
03:24:02 <zzo38> Actually there is a further restriction I missed, too.
03:27:37 <vanila> zzo38, imconfused about the definition of right regular grammar
03:27:49 <vanila> it says the priductions must be of the form
03:27:51 <vanila> A -> a
03:27:54 <vanila> A -> bC
03:27:58 <vanila> A -> epsilon
03:28:14 <vanila> so there's no way for one rule to expand into multiple other rules
03:28:17 <vanila> how can i tcompress anything?
03:31:23 <zzo38> Yes, it is why I have said that the start symbol is allowed to expand into multiple other rules. (The resulting compression isn't very good, but it is something I have needed.)
03:32:10 -!- copumpkin has joined.
03:40:49 -!- Patashu_ has joined.
03:40:50 -!- Patashu has quit (Disconnected by services).
03:43:58 -!- Patashu has joined.
03:47:39 -!- Patashu_ has quit (Ping timeout: 265 seconds).
03:48:12 -!- Patashu_ has joined.
03:48:13 -!- Patashu has quit (Disconnected by services).
04:03:44 <zzo38> What restrictions are there on the filename in a #line directive in a C program?
04:04:57 <coppro> there is no filename in a #line directive
04:04:59 <zzo38> Is the file required to actually exist? Is it limited to the length required by the operating system? Are special symbols allowed?
04:05:58 <zzo38> coppro: Are you sure?
04:06:29 <coppro> yes. you may be thinking the #file directive
04:06:49 <coppro> orr... hmm
04:06:54 <coppro> no, apparently you're right
04:06:54 <coppro> nvm
04:07:17 <coppro> The only requirement is that it is a valid string literal
04:07:30 <coppro> (I was confusing the directives and built-in macros)
04:07:36 <int-e> "The string literal of a #line directive, if present, shall be a character string literal." - no wide characters, I guess.
04:10:59 <int-e> which makes sense, because __FILE__ has to expand to a character string literal.
04:12:34 <int-e> so the N1570 document (C11 draft) contains the word "presumed" exactly 6 times, and 5 of them refer to "presumed file name" or "presumed line number".
04:13:49 <pikhq> Yep, a translation unit doesn't have to map to a file at all.
04:14:58 <int-e> `` cpp < /dev/null
04:14:59 <HackEgo> ​# 1 "<stdin>" \ # 1 "<command-line>" \ # 1 "<stdin>"
04:26:31 -!- Bicyclidine has joined.
04:29:15 -!- nys has quit (Quit: quit).
04:42:43 -!- MDude has changed nick to MDream.
04:44:29 -!- quintopia has quit (Remote host closed the connection).
04:46:02 <zzo38> The bzip2 documentation says that the BZ_CONFIG_ERROR return value from the API functions "Indicates that the library has been improperly compiled on your platform -- a major configuration error. Specifically, it means that sizeof(char), sizeof(short) and sizeof(int) are not 1, 2 and 4 respectively, as they should be."
04:46:17 <zzo38> But, I fixed it now so that it is a compiling error instead.
04:46:43 <Bicyclidine> wow, why would that be a runtime error?
04:47:01 <zzo38> I don't know, but for some reason they made it a runtime error.
04:47:29 <pikhq> Also, why the heck does it care about sizeof(short) and sizeof(int)?
04:47:42 <pikhq> uint16_t and uint32_t, seriously.
04:47:51 <zzo38> Tell Julian Seward to fix it please.
04:48:13 <pikhq> Though of course something with sizeof(char) being != 1 is pretty incredibly broken.
04:49:32 <zzo38> (It is possible to send a patch; I have fixed the program myself so this can be possible.)
04:57:04 -!- MoALTz has joined.
04:58:41 -!- MoALTz__ has quit (Ping timeout: 264 seconds).
04:59:14 <zzo38> pikhq: Maybe they want to use C89 instead of C99?
04:59:29 <pikhq> Meh, fuck that.
04:59:38 <pikhq> Even *Microsoft* has moved on.
05:06:14 -!- quintopia has joined.
05:18:01 -!- Bicyclidine has quit (Ping timeout: 264 seconds).
05:18:30 -!- Bicyclidine has joined.
05:20:30 <Gregor> pikhq: GGGGC rewritten, 10x more amazing.
05:26:54 <zzo38> I want to make up, a slight variant of VLQ. The difference is that if the high bit of the first octet of a VLQ is set, that octet's value is considered one more (i.e. 1 to 128).
05:27:32 <elliott> Gregor: huh, what did you do to it?
05:27:38 <zzo38> What is your opinion this variation of such thing?
05:28:37 <Gregor> elliott: Better object model, thread safe.
05:28:51 <Gregor> Far greater potential for a correct implementation of finalizers, too.
05:28:56 <elliott> Gregor: does it have compiler instrumentation yet? :p
05:29:15 <elliott> (I think LLVM can support precise GC...)
05:30:45 <Gregor> That'd be nice X-D
05:31:32 <elliott> would still break on, like, xor linked lists and stuff, but I bet most stuff would only require minor patches at most with a cooperating compiler
05:36:30 <Gregor> Well nothing is going to make it work with storing xor'd pointers.
05:42:46 <elliott> yeah.
05:43:04 <elliott> well, no. that's not strictly true.
05:43:13 <elliott> you could add support for telling it where xor'd pointers are and what they're xor'd with.
05:43:16 <elliott> if you really wanted to.
05:47:39 -!- Bicyclidine has quit (Ping timeout: 272 seconds).
05:49:19 <Gregor> This is like when I was arguing with cpressey saying that a C-like language couldn't be typesafe without GC, so he made a language that had every part of a GC except the actual collection.
05:50:08 <vanila> garbage?
05:50:57 <shachaf> So it had allocation?
05:52:37 <Gregor> shachaf: And tracing. It just didn't actually reclaim any space.
05:53:46 <int-e> oh. the argument is that when casting a (void *) pointer to something else, you need to check that the thing pointed to has that type?
05:54:56 <int-e> but it's probably more complicated than that.
06:04:50 <zzo38> Do you know if any emulators do these things or if anyone will write an emulator to do these things? http://vt100.net/vt100_oddities
06:11:10 <elliott> "A airport that has worked hard to change its given code is Sioux City's Sioux Gateway Airport—SUX. Mayor Craig Berenstein described the SUX code as an "embarrassment". City leaders petitioned the FAA to change the code in 1998 and again in 2002. At one point the FAA offered the city five alternatives—GWU, GYO, GYT, SGV and GAY"
06:11:24 <elliott> GAY airport, formerly SUX
06:16:46 -!- J_Arcane has left.
06:16:58 -!- J_Arcane has joined.
06:35:20 -!- vanila has quit (Quit: Leaving).
06:45:35 -!- incomprehensibly has quit (Ping timeout: 265 seconds).
06:46:29 -!- incomprehensibly has joined.
06:51:12 -!- incomprehensibly has quit (Ping timeout: 260 seconds).
06:56:02 -!- incomprehensibly has joined.
07:25:46 <fizzie> Huh. There was a reCAPTCHA, and it only had a "[ ] I'm not a robot" checkbox, and that was all.
07:25:53 <fizzie> Maybe it's part of their reputation thing.
07:30:33 <zzo38> Is this a correct UUID? 1019EA00-6717-11E4-AEFC-0009BF2D3438
07:33:51 <Sgeo> fizzie: I thought reCAPTCHA was a specific captcha
07:34:14 <Sgeo> Non-big sites can generally get away with just a reading comprehension check, or at least I'm under that impression
07:34:32 <elliott> no, they can't.
07:34:36 <elliott> unless you consider esolang big
07:35:04 <Sgeo> Huh.
07:35:17 <Sgeo> qntm seems to not have any issues
07:37:15 <elliott> probably just because of using custom software.
07:37:21 <elliott> security by obscurity is not great
07:44:35 <fizzie> Sgeo: reCAPTCHA *is* a specific captcha (system), but they have several things they can show to the user.
07:44:39 <zzo38> Can you please tell me if this UUID seem to be correct to you?
07:45:29 <fizzie> http://stackoverflow.com/questions/25545514/how-does-this-checkbox-recaptcha-work-and-how-can-i-use-it <- looked like this, except in English.
07:48:16 -!- shikhin has joined.
07:51:30 -!- shikhout has quit (Ping timeout: 264 seconds).
08:19:26 <fizzie> Fun fact: you can't use gforth's C FFI on anagol in any problem where exec is denied, because it involves calling libtool and gcc and whatnot, and those haven't been counted in the usual processes required by gforth.
08:21:16 <elliott> heh
08:21:20 <elliott> that sounds like a slow way to do FFI
08:25:50 <fizzie> I think it's a on-first-call-only kind of thing, but still, sure.
08:29:23 <fizzie> (It compiles a wrapper function that pops the argument off the Forth stack, calls the specified C function, and pushes the return value back.)
08:33:51 <Sgeo> So... every language uses the same name for different things
08:34:56 <Sgeo> In Scala, collect is generally like a map that takes a partial function. In Rust, it lets you make a collection out of an iterator. In Smalltalk, it's map
08:35:21 <Sgeo> In Smalltalk, select is filter, in C#, Select is map
08:35:46 <Sgeo> At least in Rust select does something not related to collections at all
08:40:45 <Bike> and flammable and inflammable mean the same thing!!
08:47:19 <elliott> in ruby it's map
08:47:30 <elliott> (collect)
09:03:54 <zzo38> Is it possible with GNU C compiler to make it a compiler error to call a specific function, but it is not an error to use it with typeof and stuff like that, and also is not an error if it is used in a position where it is optimized out?
09:14:32 <fizzie> I guess you can't just not provide a definition for the function, so that it would lead to a linker error if it actually got called?
09:17:56 <zzo38> Even so, it would only make it a link error and not a compile error.
09:19:10 <fizzie> Oh, there is actually an attribute for it.
09:19:29 <fizzie> "error ("message") -- If this attribute is used on a function declaration and a call to such a function is not eliminated through dead code elimination or other optimizations, an error that includes message is diagnosed."
09:20:02 <zzo38> OK
09:21:26 <zzo38> Is there a way to make it to ignore such a declaration if another declaration of the same function already exists before this one?
09:24:27 -!- Phantom_Hoover has joined.
09:26:57 <fizzie> The basic thing seems to work -- http://sprunge.us/DYfi -- but I don't know of a way to do that second thing.
09:27:04 -!- idris-bot has quit (Ping timeout: 260 seconds).
09:28:03 -!- Melvar has quit (Ping timeout: 272 seconds).
09:46:14 <elliott> fizzie: I am baffled that a random highly-specific zzo38 request actually exists in gcc.
09:47:20 <fizzie> So am I. I knew about the deprecated attribute, but it applies to all uses. The whole "only if not optimized out" thing seemed so unlikely to exist.
09:56:03 -!- Melvar has joined.
10:02:34 -!- hjulle has quit (Ping timeout: 244 seconds).
10:21:00 -!- drdanmaku has quit (Quit: Connection closed for inactivity).
10:48:29 -!- CADD has joined.
11:04:59 -!- MoALTz has quit (Quit: Leaving).
11:12:57 <HackEgo> [wiki] [[Brainfuck algorithms]] http://esolangs.org/w/index.php?diff=40806&oldid=40696 * YoYoYonnY * (+813)
11:53:05 <mroman> @type execStateT
11:53:05 <lambdabot> Monad m => StateT s m a -> s -> m s
12:05:31 -!- blsqbot2 has joined.
12:05:36 <mroman> !blsQ "abc"iT
12:05:36 <blsqbot2> {"" "a" "ab" "abc"}
12:05:53 <mroman> !blsQ 10ro{?i?i}m[
12:05:54 <blsqbot2> {3 4 5 6 7 8 9 10 11 12}
12:05:59 <mroman> !blsQ 10rom{?i?i}
12:05:59 <blsqbot2> {3 4 5 6 7 8 9 10 11 12}
12:06:07 <mroman> !blsQ 10rom{10ro)?i}
12:06:07 <blsqbot2> {{2 3 4 5 6 7 8 9 10 11} 1 {2 3 4 5 6 7 8 9 10 11} 2 {2 3 4 5 6 7 8 9 10 11} 3 {
12:06:16 <mroman> !blsQ 10rom{10ro}
12:06:16 <blsqbot2> {{1 2 3 4 5 6 7 8 9 10} 1 {1 2 3 4 5 6 7 8 9 10} 2 {1 2 3 4 5 6 7 8 9 10} 3 {1 2
12:06:21 <mroman> hu
12:06:27 <mroman> !blsq 10ro{10ro}m[
12:06:27 <blsqbot> {{1 2 3 4 5 6 7 8 9 10} 1 {1 2 3 4 5 6 7 8 9 10} 2 {1 2 3 4 5 6 7 8 9 10} 3 {1 2
12:06:32 <mroman> ok
12:06:40 <mroman> !blsq 10ro{ro{?i}m[}m[
12:06:40 <blsqbot> {{2} {2 3} {2 3 4} {2 3 4 5} {2 3 4 5 6} {2 3 4 5 6 7} {2 3 4 5 6 7 8} {2 3 4 5
12:06:46 <mroman> !blsQ 10rom{ro{?i}m[}
12:06:46 <blsqbot2> {{2} {2 3} {2 3 4} {2 3 4 5} {2 3 4 5 6} {2 3 4 5 6 7} {2 3 4 5 6 7 8} {2 3 4 5
12:06:48 <mroman> ok
12:06:59 <mroman> fizzie: m{} is now a "MapBlock"
12:07:04 <mroman> which is short for {}m[
12:08:20 <mroman> If you have other ideas for Blocks let me know
12:08:33 <mroman> (i'll implement also Filter and Reduce blocks as r{ and f{)
12:09:15 <mroman> (i'll also implement a slice+marker)
12:09:16 <mroman> like
12:09:53 <mroman> |[5 5.+]| will evaluate to {10} whereas {5 5.+} is {5 5.+}
12:10:04 <mroman> |[ is a marker and ]| just slices the stack to the next marker
12:19:26 -!- boily has joined.
12:19:58 <mroman> does parsec have an "exactly n-times"?
12:21:05 <mroman> i.e. manyN 5 (string "5" >> optional spaces)
12:21:07 <mroman> kinda like that
12:23:07 -!- MoALTz has joined.
12:24:13 <elliott> Parsec is a monad
12:24:19 <elliott> you can just use replicateM{,_}
12:24:48 <Lymia> blsq is confusing
12:25:48 -!- blsqbot2 has quit (Ping timeout: 265 seconds).
12:29:34 <elliott> Lymia: I think you hurt its feelings
12:29:43 <Lymia> Opps
12:32:52 <Lymia> !blsq "abc"+.
12:32:52 <blsqbot> No output!
12:32:54 <Lymia> !blsq "abc""abc"+.
12:32:54 <blsqbot> No output!
12:33:29 <boily> !blsq myhovercraftisfullofeels
12:33:29 <blsqbot> ERROR: Unknown command: (ls)!
12:39:03 -!- Patashu_ has quit (Ping timeout: 250 seconds).
12:47:38 -!- oerjan has joined.
13:01:56 -!- nortti_ has changed nick to nortti.
13:03:46 -!- boily has quit (Quit: WeeChat 1.0.1).
13:05:57 <HackEgo> [wiki] [[Dimensions]] N http://esolangs.org/w/index.php?oldid=40807 * TomPN * (+4945) Created page with "'''Dimensions''' is an esoteric programming language invented by Tom Price-Nicholson in 2014. It was inspired by a class of esolangs called fungeoids (although it may not be a..."
13:08:05 <HackEgo> [wiki] [[Musical notes]] http://esolangs.org/w/index.php?diff=40808&oldid=40785 * TomPN * (+133) /* Notes */
13:08:21 -!- boily has joined.
13:09:02 <HackEgo> [wiki] [[Language list]] http://esolangs.org/w/index.php?diff=40809&oldid=40791 * TomPN * (+17) /* D */
13:10:19 <HackEgo> [wiki] [[Dimensions]] http://esolangs.org/w/index.php?diff=40810&oldid=40807 * TomPN * (-6) /* Motion */
13:11:15 <HackEgo> [wiki] [[Dimensions]] http://esolangs.org/w/index.php?diff=40811&oldid=40810 * TomPN * (+4) /* Disclaimer */
13:13:04 <HackEgo> [wiki] [[Dimensions]] http://esolangs.org/w/index.php?diff=40812&oldid=40811 * TomPN * (+66)
13:13:54 <HackEgo> [wiki] [[Musical notes]] http://esolangs.org/w/index.php?diff=40813&oldid=40808 * TomPN * (+68)
13:21:31 <mroman> !blsq "abc""abc".+
13:21:31 <blsqbot> "abcabc"
13:21:40 <mroman> !blsq "abc""abc".+
13:21:40 <blsqbot> No output!
13:21:45 <mroman> don't put a space there ;)
13:22:14 <oerjan> !blsq
13:22:14 <blsqbot> No output!
13:34:54 <mroman> !blsq }oerjan!!
13:34:55 <blsqbot> No output!
13:35:26 <mroman> everything after an unmatched } is a comment.
13:35:42 <mroman> !blsq 5 5.+ }hth
13:35:42 <blsqbot> 10
13:36:06 <mroman> !blsq 10ro?i }?i can be used on lists too
13:36:06 <blsqbot> {2 3 4 5 6 7 8 9 10 11}
13:40:07 <oerjan> fancy
13:40:54 <mroman> and it's totally not a bug in the parser!
13:43:35 <oerjan> indeed!
13:48:59 -!- shikhout has joined.
13:52:05 -!- shikhin has quit (Ping timeout: 245 seconds).
13:59:20 -!- drdanmaku has joined.
14:05:17 <oerjan> <mroman> does parsec have an "exactly n-times"? <-- count, although what elliott said too. i was going to say count might be more efficiently implemented than the obvious way (like "many" is), but it's code is actually identical to replicateM except for a redundant <= 0 check.
14:05:39 <elliott> parsec duplicates a lot of things
14:05:40 <elliott> like (<|>)
14:06:23 <oerjan> its duplicated <|> has a different precedence
14:07:12 <boily> parsec's <|> is weird.
14:07:13 <oerjan> one which might have been better for the Alternative version too, the Applicative/Alternative operators have annoyingly different fixities from their Monad analogies.
14:08:51 <oerjan> basically it _looks_ on first glance like whoever chose the fixities for Applicative operators borrowed ocaml's "choose precedence based on first character" rule
14:09:58 <oerjan> and put things around where < is
14:10:48 <oerjan> (although <|> has 3)
14:12:16 <Melvar> oerjan: I didn’t know the analogous monad functions had fixities.
14:12:28 <oerjan> well mplus doesn't
14:12:31 <oerjan> but >> does
14:13:20 <oerjan> what i'm saying is, the applicative ones are not designed to mix well with the monadic ones
14:13:41 <Melvar> Oh. I didn’t think of (>>), just mplus and ap.
14:13:42 <mroman> I was thinking of adding m<digit>
14:13:44 <mroman> i.e.
14:13:54 <mroman> m{9.+} would be m29.+
14:14:33 <Melvar> Hm.
14:14:35 <oerjan> mroman: that's making the parsing annoyingly specific, isn't it?
14:14:41 <mroman> :)
14:14:47 <Melvar> ( :doc (<$>)
14:14:49 <mroman> it also makes code harder to read
14:14:50 <mroman> but hey
14:14:53 <mroman> It saves one byte!
14:14:58 <oerjan> i mean, extending m{ to a general "letter"{ rule would be reasonable
14:15:09 -!- idris-bot has joined.
14:15:11 <Melvar> ( :doc (<$>)
14:15:11 <idris-bot> (<$>) : Applicative f => f (a -> b) -> f a -> f b
14:15:11 <idris-bot> infixl 2
14:15:11 <idris-bot> (<$>) : Eff (a -> b) xs (\v => xs) -> Eff a xs (\v7 => xs) -> Eff b xs (\v8 => xs)
14:15:11 <idris-bot> infixl 2
14:15:11 <idris-bot> (<$>) : (f = g) -> (x = y) -> f x = g y↵…
14:15:24 <Melvar> ( :doc (<|>)
14:15:24 <idris-bot> (<|>) : Alternative f => f a -> f a -> f a
14:15:24 <idris-bot> infixl 3
14:15:31 <mroman> it looks like theres a 29 in there
14:15:35 <mroman> but it's infactc m2 9 .+
14:15:36 <Melvar> ( :doc ($>)
14:15:36 <idris-bot> ($>) : Applicative f => f a -> f b -> f b
14:15:36 <idris-bot> infixl 2
14:15:37 <mroman> *infact
14:15:44 <mroman> *in fact
14:15:45 <oerjan> mroman: i vaguely thought one of the qualities of burlesque was that its parsing was relatively logical
14:15:52 <mroman> wait
14:15:59 <mroman> You thought Burlesque has qualities?
14:15:59 <Melvar> ( :doc (>>=)
14:15:59 <idris-bot> (>>=) : Eff a xs xs' -> ((val : a) -> Eff b (xs' val) xs'') -> Eff b xs xs''
14:15:59 <idris-bot> infixl 5
14:15:59 <idris-bot> (>>=) : (x = y) -> ((z : a) -> f z = g z) -> f x = g y
14:15:59 <idris-bot> infixl 5
14:15:59 <idris-bot> (>>=) : Monad m => m a -> (a -> m b) -> m b↵…
14:16:09 <mroman> Achievment unlooked.
14:16:16 <mroman> * Convince oerjan something I did has qualities.
14:16:24 <mroman> *unlocked
14:16:41 <mroman> oerjan: It used to be logical
14:17:05 <mroman> but now with prefixes and single character commands and stuff
14:17:10 <mroman> it's not so logical anymore :D
14:17:21 <mroman> also Burlesque isn't really pure anymore due to the secondary stack
14:18:01 <mroman> i.e. mapping/filtering didn't have side-effects
14:18:05 <mroman> now they can have side-effects
14:19:49 <mroman> back in the old days you knew that each group of two chars is a command
14:19:50 <mroman> now
14:19:52 <mroman> !blsq qj
14:19:53 <blsqbot> {j}
14:19:53 <oerjan> well but still, m2 should be _either_ a two character command which doesn't change parsing, or a 2 suffix that can be used generally
14:19:58 <mroman> it's not the case anymore
14:20:21 <oerjan> on the same things that allow {
14:20:29 <mroman> m2 can be a command yes
14:20:50 <oerjan> no it cannot, not if it gobbles up the two next
14:21:00 <mroman> (i.e. it would fall into the group of special-builtins that can read/modify the instruction stream)
14:21:30 <oerjan> i'm just trying to defend logic here hth
14:22:08 <oerjan> oh well right you already have those kinds
14:22:12 <mroman> what do you mean with "2 suffix that can be used generally"
14:22:24 <oerjan> ok maybe it _is_ logical.
14:22:38 <mroman> q is a parse-level thing
14:22:48 <mroman> whereas other things like : ) and @ are eval-level things
14:23:05 <mroman> !blsq {q0}
14:23:05 <blsqbot> {{0}}
14:23:08 <mroman> !blsq {:0}
14:23:08 <blsqbot> {: 0}
14:23:25 <mroman> !blsq {:0}[-
14:23:25 <blsqbot> {0}
14:23:27 <mroman> !blsq {:0}-]
14:23:27 <blsqbot> :
14:23:40 <oerjan> OKAY
14:23:40 <mroman> !blsq {:0}-]Sh
14:23:41 <blsqbot> ":"
14:23:47 <mroman> !blsq {:0}-]Sh(-)Sh_+
14:23:47 <blsqbot> ERROR: (line 1, column 12):
14:23:49 <mroman> hm
14:23:52 <mroman> !blsq {:0}-]Sh(-))Sh_+
14:23:53 <blsqbot> ":-)"
14:23:56 <mroman> !blsq {:0}-]Sh(-))Sh_+Q
14:23:56 <blsqbot> :-)
14:23:57 <mroman> yay
14:24:14 <mroman> best burlesque code ever
14:24:43 <mroman> Do you know what (-)))Sh is?
14:24:53 <oerjan> no hth
14:24:56 <oerjan> !blsq myhovercraftisfullofeels
14:24:56 <blsqbot> ERROR: Unknown command: (ls)!
14:24:56 <mroman> :D
14:25:09 <mroman> it would try to map Sh over the Identifier -)
14:25:18 <oerjan> does that mean everything _before_ ls parses in that?
14:25:25 <mroman> oerjan: yes
14:25:27 <oerjan> !blsq myhovercraftisfullofee
14:25:27 <blsqbot> 2.718281828459045
14:25:51 <oerjan> !blsq myhovercraftisfullofeeS
14:25:52 <blsqbot> ERROR: (line 1, column 24):
14:26:04 <oerjan> !blsq myhovercraftisfullofeeSh
14:26:04 <blsqbot> "2.718281828459045"
14:26:16 <mroman> !blsq myhovercraftisfullofee#s
14:26:16 <blsqbot> {2.718281828459045 ERROR: Unknown command: (of)! ERROR: Unknown command: (ll)! E
14:26:32 <mroman> ls actually parses as well
14:26:43 <mroman> !blsq "myhovercraftisfulloffeels"ps
14:26:44 <blsqbot> {ERROR: (line 1, column 26):
14:26:57 <mroman> !blsq "myhovercraftisfullofeels"ps
14:26:57 <blsqbot> {my ho ve rc ra ft is fu ll of ee ls}
14:27:02 <mroman> that perfectly parses
14:27:11 <oerjan> OKAY
14:27:23 <mroman> !blsq "{c}d{}"ps
14:27:23 <blsqbot> {{c} d{}}
14:27:26 <mroman> this parses as well hth
14:28:04 <oerjan> !blsq myhovercraftisfull
14:28:05 <blsqbot> ERROR: Unknown command: (ll)!
14:28:21 <oerjan> oh wait it's because burlesque is lazy so it does the last one first?
14:28:21 <mroman> !blsq "{c}dq(a{}"ps
14:28:21 <blsqbot> {ERROR: (line 1, column 9):
14:28:33 <mroman> oerjan: no it does "my" first
14:28:39 <mroman> but my results in an error "Unknown my"
14:28:41 <mroman> !blsq my
14:28:41 <blsqbot> ERROR: Unknown command: (my)!
14:28:44 <mroman> !blsq myee
14:28:44 <blsqbot> 2.718281828459045
14:28:51 <mroman> blsqbot just prints the top-most element
14:28:54 <mroman> !blsq myee#s
14:28:54 <blsqbot> {2.718281828459045 ERROR: Unknown command: (my)!}
14:29:01 <mroman> ^- but that error is still on the stack
14:29:07 <oerjan> oh so it just keeps going on
14:29:10 <mroman> yes
14:29:18 <mroman> you can check for errors
14:29:18 <oerjan> well that's not so impressive then
14:29:20 <mroman> !blsq myis
14:29:20 <blsqbot> 1
14:29:35 <mroman> is returns 1 if it's an error 0 otherwise
14:29:37 <mroman> !blsq eeis
14:29:37 <blsqbot> 0
14:30:05 <mroman> it's a messed up language
14:30:06 <oerjan> !blsq myhovercraftis
14:30:06 <blsqbot> 1
14:30:15 <mroman> and I'll fuck it up a notch for the next release
14:30:22 <oerjan> OH NOES
14:30:31 <oerjan> !blsq OH NOES
14:30:31 <blsqbot> ERROR: Unknown command: (ES)!
14:30:42 <mroman> !blsq ohyeahCLL[
14:30:43 <blsqbot> 3
14:30:54 <mroman> !blsq ohyeahCLL[fuckshit
14:30:54 <blsqbot> ERROR: Burlsque: (n!) Invalid arguments!
14:30:58 <mroman> !blsq ohyeahCLL[shit
14:30:58 <blsqbot> 3
14:31:13 <mroman> !blsq ohyeahCLL[shitisgettingrealCLl[
14:31:14 <blsqbot> ERROR: (line 1, column 32):
14:31:14 <oerjan> !blsq thisissome[shit
14:31:14 <blsqbot> ERROR: (line 1, column 16):
14:31:18 <mroman> !blsq ohyeahCLL[shitisgettingreal.CLl[
14:31:19 <blsqbot> ERROR: Unknown command: (l[)!
14:31:23 <mroman> !blsq ohyeahCLL[shitisgettingreal.CLL[
14:31:23 <blsqbot> 13
14:31:45 <mroman> !blsq ilikemyhovercraft
14:31:45 <blsqbot> ERROR: (line 1, column 18):
14:31:47 <mroman> !blsq ilikemyhovercrafts
14:31:47 <blsqbot> ERROR: Unknown command: (ts)!
14:31:53 <mroman> !blsq ilikemyhovercraftsCL)is
14:31:54 <blsqbot> {1 1 1 1 1 1 1 1 1}
14:32:25 <oerjan> !blsq aha!CL
14:32:26 <blsqbot> {ERROR: Unknown command: (a!)! ERROR: Unknown command: (ah)!}
14:32:29 <mroman> !blsq ilikemyhovercraftsfleet!CL)is
14:32:29 <blsqbot> {1 0 2.718281828459045 1 1 1 1 1 1 1 1 1 1 1}
14:32:41 <mroman> lol what
14:32:45 <mroman> !blsq 2.7is
14:32:46 <blsqbot> 0
14:32:48 <mroman> hm
14:32:57 <mroman> interesing
14:33:01 <mroman> !blsq 2.7is#s
14:33:01 <blsqbot> {0 2.7}
14:33:03 <mroman> oh
14:33:08 <mroman> if it's not an error it's not popped
14:33:26 <mroman> !blsq ilikemyhovercraftsfleet!CL{isn!}f[
14:33:27 <blsqbot> {2.718281828459045}
14:33:53 <oerjan> !blsq eeeeeeee^^^^^^
14:33:53 <blsqbot> 2.718281828459045
14:34:11 <mroman> hu?
14:34:14 <mroman> !blsq eeee^^
14:34:14 <oerjan> !blsq eeeeeeee******
14:34:14 <blsqbot> 2.718281828459045
14:34:14 <blsqbot> Ain't nobody got time fo' dat!
14:34:23 <mroman> ^^ is dup ;)
14:34:24 <oerjan> !blsq eeeeee****
14:34:24 <blsqbot> 3814279.1047601975
14:34:40 <oerjan> !blsq eeeeeeee******
14:34:40 <blsqbot> Infinity
14:34:44 <mroman> !blsq (;))
14:34:44 <blsqbot> ;)
14:34:47 <oerjan> oh just intermittent
14:35:42 <oerjan> !blsq ;)CL^^++
14:35:42 <blsqbot> ERROR: Unknown command: (;))!
14:35:53 <oerjan> !blsq q;)CL^^++
14:35:53 <blsqbot> {;)}
14:36:07 <oerjan> !blsq q;)CL^^CL
14:36:07 <blsqbot> {{{;)}} {{;)}}}
14:36:17 <oerjan> !blsq q;)CL^^+.
14:36:17 <blsqbot> {{;)} {;)}}
14:36:35 <oerjan> !blsq q;)^^+.^^+.^^+.
14:36:35 <blsqbot> {;) ;) ;) ;)}
14:36:40 <mroman> !blsq "abcdefgh"+. }hth
14:36:40 <blsqbot> "abcdefghh"
14:36:48 <mroman> +. appends last of xs to xs
14:37:01 <oerjan> oh
14:37:09 <oerjan> HOW CONFUSING
14:37:29 <mroman> Nothing in Burlesque is confusing ;)
14:37:49 <mroman> !blsq "abc"-.
14:37:49 <blsqbot> "aabc"
14:37:50 <oerjan> !blsq q;)^^++
14:37:50 <blsqbot> ;)
14:37:55 <mroman> -. prepends head of xs to xs
14:38:13 <oerjan> but actually concatenating two lists is impossible, clearly
14:38:17 <mroman> no
14:38:21 <mroman> !blsq {1 2 3}{4 5 6}_+
14:38:22 <blsqbot> {1 2 3 4 5 6}
14:38:33 <mroman> !blsq {1 2 3}{4 5 6}.+
14:38:33 <blsqbot> {1 2 3 4 5 6}
14:38:38 <oerjan> !blsq q;)^^_+^^_+^^_+
14:38:38 <blsqbot> {;) ;) ;) ;) ;) ;) ;) ;)}
14:38:44 <oerjan> finally
14:38:59 <mroman> .+ _+ sometimes do the same thing
14:39:07 <mroman> but .+ is not to be confused with _+
14:39:14 <mroman> and certainly not to be confused with +. or ?+
14:39:39 <oerjan> OKAY
14:39:57 <mroman> hm
14:39:57 <oerjan> !blsq OKAY
14:39:57 <blsqbot> ERROR: Unknown command: (AY)!
14:40:00 <mroman> !blsq ?n
14:40:01 <blsqbot> That line gave me an error
14:40:03 <mroman> !blsq ?_
14:40:03 <blsqbot> "I have 340 non-special builtins!"
14:40:10 <mroman> !blsq 339rz)?_
14:40:10 <blsqbot> Ain't nobody got time fo' dat!
14:40:13 <mroman> !blsq 339rz)?_
14:40:13 <blsqbot> {"I have 340 non-special builtins!" 0 "I have 340 non-special builtins!" 1 "I ha
14:40:19 <mroman> oops
14:40:20 <mroman> !blsq 339rz)?n
14:40:20 <blsqbot> {j J .+ _+ .- ./ .* .% +. -. .> .< >. <. >] <] ** r_ R_ == != <- ln un uN wl WL
14:40:25 <mroman> !blsq 339rz)?n)Sh
14:40:25 <blsqbot> {"j" "J" ".+" "_+" ".-" "./" ".*" ".%" "+." "-." ".>" ".<" ">." "<." ">]" "<]" "
14:40:46 <FireFly> That reads almost like J
14:40:48 <mroman> !blsq 339rz)?n)Sh{'+~[}f[
14:40:48 <blsqbot> {".+" "_+" "+." "++" "[+" "+]" "?+"}
14:41:14 <mroman> ^- all builtins containing a +
14:41:38 <FireFly> !blsq 339rz)?n)Sh{'.~[}f[
14:41:39 <blsqbot> {".+" ".-" "./" ".*" ".%" "+." "-." ".>" ".<" ">." "<."}
14:41:54 <FireFly> Yay, changing a character in the line noise did something sensible
14:42:06 <FireFly> !blsq 339rz)?n)Sh{':~[}f[
14:42:06 <blsqbot> {"f:" "F:"}
14:43:08 <mroman> !blsq 339rz)?n{Sh':~[}f[
14:43:08 <blsqbot> {f: F:}
14:43:41 <mroman> hm
14:43:45 <mroman> !blsq 339rz)?nf:
14:43:45 <blsqbot> {{1 ~~} {1 ~]} {1 ~[} {1 ~=} {1 ~-} {1 ~!} {1 ||} {1 zz} {1 zi} {1 z[} {1 z?} {1
14:43:55 <mroman> !blsq 339rz)?n)Sh\[f:
14:43:55 <blsqbot> {{31 'c} {29 's} {27 '[} {26 'p} {21 'r} {21 'm} {19 '!} {18 'd} {17 't} {16 'n}
14:44:11 <mroman> according to this, c is the most used character in commands
14:44:44 <mroman> !blsq 339rz)?n)Sh\[F:
14:44:44 <blsqbot> {{0.04579025110782865 'c} {0.04283604135893648 's} {0.03988183161004431 '[} {0.0
14:45:06 <mroman> with 0.0458%
14:45:24 <mroman> !blsq 339rz)?n)Sh\[L[
14:45:24 <blsqbot> 677
14:45:43 <mroman> all commands together form a string of length 677
14:46:18 <mroman> !blsq "[,,,]"ra
14:46:18 <blsqbot> ERROR: (line 1, column 2):
14:46:22 <mroman> !blsq "[1,,,2]"ra
14:46:22 <blsqbot> {1 2}
14:46:38 <mroman> !blsq "[1,[],[],2]"ra
14:46:38 <blsqbot> ERROR: (line 1, column 5):
14:46:44 <mroman> lol
14:46:49 <mroman> !blsq "[1,[2],[2],2]"ra
14:46:49 <blsqbot> {1 {2} {2} 2}
14:46:56 <mroman> stupid ra can't parse empty lists :D
14:47:09 <mroman> !blsq "[]"ra
14:47:09 <blsqbot> ERROR: (line 1, column 2):
14:47:13 <mroman> interesting
14:47:24 <mroman> WHY DIDNT ANYBODY REPORT THIS?
14:49:07 <mroman> !blsq "1,2"ra
14:49:07 <blsqbot> 1
14:49:33 <mroman> !blsq "ab"ra
14:49:33 <blsqbot> ERROR: (line 1, column 1):
14:50:11 <mroman> oerjan: just wait for the introduction of pointers in Burlesque ;)
14:51:48 <mroman> (and yes, I'm aiming for "most fucked up language")
14:52:48 -!- shikhout has changed nick to shikhin.
14:55:45 <mroman> http://codepad.org/Gqdjl1Ed
14:56:03 <mroman> although that's not really fucked up
14:56:12 <mroman> but it allows you to define functions and call them recursively of course
14:58:07 <mroman> FireFly: I hope you still want to learn Burlesque.
15:05:44 <oerjan> mroman: continuations and pointers, now you just need threads hth
15:06:43 <mroman> I was planning on having threads
15:06:45 <mroman> but ...
15:06:51 <mroman> switching to StateT IO is *effort*
15:16:47 -!- vanila has joined.
15:17:35 -!- MoALTz_ has joined.
15:21:03 -!- MoALTz has quit (Ping timeout: 244 seconds).
15:24:50 <oerjan> surely you mean ContT _ (StateT IO)
15:26:02 <vanila> hi!
15:26:10 <oerjan> g'day
15:29:12 <boily> bon matin!
15:32:38 -!- vanila has quit (Quit: Leaving).
15:47:00 -!- dianne has quit (Quit: ~).
15:47:28 -!- dianne has joined.
15:56:27 -!- constant has quit (K-Lined).
16:12:05 <mroman> buenos matinos.
16:14:58 <boily> buenos matinos?
16:17:08 <mroman> genau
16:17:24 <mroman> hesch du richtig glese :)
16:17:43 <oerjan> buone mattine
16:19:13 <oerjan> hm it can be either mattino or mattina
16:19:14 -!- variable has joined.
16:21:26 <mroman> boily: some made-up language
16:21:40 <mroman> Actually I'd say "guätä morgä"
16:22:12 <oerjan> wi dutsh
16:22:57 <oerjan> also it's like, afternoon here
16:23:06 <oerjan> `? fternooner
16:23:07 <HackEgo> fternooner (Danish »fternooner«, Norwegian «ttermiddag», Swedish ”ftermiddag”) is a screamingly delicious pastry.
16:24:30 <boily> meanwhile, my dead keys are dead.
16:24:43 <boily> what the hell happened... I can't even circumflex!
16:25:00 <mroman> You can't circumflex your muscles?
16:25:05 <mroman> That sounds bad.
16:25:47 <b_jonas> here's some for you: âêîôû
16:26:01 <boily> ok, the german keyboard has öäü, so I can wish you back a guten morgen. (not going to try the Swiss German versions. too risky.)
16:26:22 <boily> ah! they reappeared! âäãā :D
16:26:43 <oerjan> åh
16:27:38 <oerjan> the dead keys on this laptop are only sort of working
16:27:59 <boily> b_jonas: köszönöm, de a probléma megoldódni látszik már.
16:28:06 <oerjan> i cannot write é in my google tab, but it works fine in putty.
16:28:15 <boily> étrange...
16:30:05 <oerjan> in vim getting a lone ` takes some weirdness, which is *so* fun for haskell. if i am trying to type `e i type something like `l<backspace>e
16:30:49 <oerjan> in my old laptop it was just `<space>e
16:31:18 <oerjan> but somehow <space> doesn't work any more
16:31:41 <oerjan> or well, it _sometimes_ works, but not reliably
16:32:09 <oerjan> sometimes the ` just sits there, waiting for the most annoying moment to pop up
16:32:32 <boily> there aren't annoying moments for diacritics, only unartistic önes.
16:32:52 <oerjan> although pushing a non-vowel letter tends to fix it, as long as i'm in insert mode
16:34:57 <oerjan> ok if i push `<space><space>l in insert mode now, i get <space>`l as the actual output
16:36:13 <oerjan> and there i've somehow got it back to working sensibly
16:36:55 <elliott> oerjan: what about ``?
16:37:38 <oerjan> that gives two `'s rather reliably
16:38:15 <oerjan> `<space> is the shortest way to get a ` before a vowel _when it works_
16:38:16 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: <space>: not found
16:38:40 <oerjan> it's just that gvim seems to toggle between a mode in which it works and in which it is freaky
16:38:48 <oerjan> *and one in
16:39:39 <Gregor> In the universe of C sins, how sinful is it to #define return to something...
16:41:26 -!- boily has quit (Quit: RENEWED CHICKEN).
16:42:59 -!- Sprocklem has quit (Ping timeout: 244 seconds).
16:44:48 <b_jonas> Gregor: it's sinful. it's like IOCCC level sinful. and it's not portable either, the standard specifically forbids it, and for good reason, because library macros could contain return.
16:45:14 <b_jonas> I think some IOCCC entries did define keywords as macros
16:49:11 <elliott> Gregor: ...what are you trying.
16:49:12 <Jafet> IOCCC level sinful? Is that like jaywalking on a country road at midnight
16:52:37 <Gregor> Sounds like "pretty good idea" then.
16:53:58 <coppro> IUCC is better anyway
16:59:48 <Gregor> b_jonas: Incidentally, if return is defined to something that's syntactically compatible, library macros containing return wouldn't be broken, so that's not much of a reason :3
17:00:17 <Gregor> e.g. #define return if ((something), 0) {} else return
17:00:34 <b_jonas> Gregor: that's not completely compatible, but close enough
17:00:52 <b_jonas> are you trying to implement a profiler or tracer?
17:01:08 <elliott> Gregor: are you sure you shouldn't just patch a compiler at this point
17:02:29 <Gregor> In my GC, users have to push and pop their stack pointers. Push is manual regardless, but I'm trying to decide if defining return to make pop automatic is too sinful X-D
17:03:03 <elliott> Gregor: why not use gcc finaliser thingies
17:03:07 <b_jonas> Gregor: why don't you use C++ and destructors?
17:03:10 <elliott> systemd uses them to automatically deallocate things that go out of scope (!)
17:03:14 <elliott> it's a GNU C feature
17:03:20 <elliott> you can even typedef it in
17:03:22 <elliott> I think
17:03:24 <elliott> or maybe just macro it
17:03:33 <Gregor> elliott: Because my GC isn't GCC-specific.
17:03:52 <Gregor> b_jonas: Because my GC is usable from C and not usable from C++ since I can't control C++ object headers.
17:03:54 <elliott> okay, but #define return is also not valid C, so you're already being unportable :p
17:04:07 <elliott> I don't know whether clang implements that stuff.
17:04:13 <elliott> I guess probably? systemd probably compiles with clang.
17:04:18 <b_jonas> Gregor: um... so? C++ but don't use such objects?
17:04:35 <Gregor> b_jonas: No, the USERS who would be using this push and pop macros are C.
17:04:41 <b_jonas> hmm
17:04:57 <b_jonas> well, I think defining return is evil for this, but of course you can try to be evil
17:04:57 <elliott> people with weak compilers can do it manually, people willing to use GNU C can use GNU C convenience features?
17:05:05 <elliott> it's nicer than redefining return anyway
17:05:06 <Gregor> elliott: Of course clang implements it, clang implements virtually all GCC extensions.
17:05:14 <elliott> not really virtually all
17:05:20 <coppro> elliott: I can't find any docs on these so-called finalisers
17:05:21 <elliott> it doesn't do nested functions I think
17:05:24 <elliott> which are actually used in practice
17:05:34 <elliott> coppro: they're probably not so-called finalisers.
17:05:36 <Gregor> elliott: The alternative isn't "just be GCC-specific", it's "make them manually pop and if they forget to, oh well everything breaks horribly"
17:06:04 <elliott> Gregor: well, I was presenting a third alternative that seems nicer and more robust than redefining return without giving up all the convenience. sorry.
17:06:13 <coppro> http://clang.llvm.org/docs/UsersManual.html
17:06:20 <coppro> there's a list of GCC functions not supported
17:06:57 <elliott> I'm aware
17:08:07 -!- oerjan has quit (Quit: leaving).
17:08:25 <coppro> I also don't see anything that looks like a finalizer on GCC's extension list
17:08:57 <elliott> do you expect me to give you pointers faster than I can git clone systemd's source code? you have as much information as I remember, so it's not like you couldn't yourself...
17:09:24 <coppro> I assumed you knew more
17:09:35 <elliott> src/shared/macro.h:#define _cleanup_(x) __attribute__((cleanup(x)))
17:09:47 <elliott> src/shared/util.h:#define _cleanup_free_ _cleanup_(freep)
17:09:53 <elliott> src/activate/activate.c: _cleanup_free_ char *name = NULL;
17:10:11 <elliott> cleanup (cleanup_function)
17:10:11 <elliott> The cleanup attribute runs a function when the variable goes out of scope. This attribute can only be applied to auto function scope variables; it may not be applied to parameters or variables with static storage duration. The function must take one parameter, a pointer to a type compatible with the variable. The return value of the function (if any) is ignored.
17:10:16 <elliott> If -fexceptions is enabled, then cleanup_function is run during the stack unwinding that happens during the processing of the exception. Note that the cleanup attribute does not allow the exception to be caught, only to perform an action. It is undefined what happens if cleanup_function does not return normally.
17:10:30 <coppro> thanks
17:10:35 <coppro> clang supports that from the looks of things
17:11:03 <Gregor> Oh, it's a variable attribute. Well that doesn't work anyway since I'd be demanding that users add a variable attribute to all their variables, which is just as onerous (more so) than popping.
17:11:16 <elliott> Gregor: well, they have to push, right?
17:11:26 <elliott> you could have a variable declaration macro that declares with the attribute and pushes
17:11:55 <Gregor> Hmmmmmmm. That works!
17:12:21 <Gregor> In fact, demanding that they declare their variables with a macro is good since it assures they're initialized.
17:12:27 <elliott> you could prooobably even make the syntax LET(char *foo = ...); work
17:12:40 <elliott> actually, I guess no
17:12:51 <elliott> splitting out the = would be possible I think but splitting the name from the type wouldn't
17:13:02 <elliott> but LET(char *, foo, ...) isn't so bad.
17:13:47 <elliott> Gregor: one restriction is that the cleanup function can't take any other parameters, it seems. you can... probably work around that somehow.
17:13:59 <Gregor> Damn, that's actually by far and away the cleanest syntax for this. Getting the cleanup function to work properly is no problem.
17:14:01 <elliott> (I guess for a GC you can just have a thread-local static containing a pointer to the GC info.)
17:14:38 <Gregor> Yup
17:14:45 <Gregor> Which is how the pointer stack is stored anyway.
17:15:20 <elliott> Gregor: incidentally, if all you need for your GC to work is to add a single attribute to every local declaration and call a function to register it, compiler instrumentation would probably be really easy...
17:15:32 <elliott> (plus overriding malloc/free, obviously)
17:15:36 -!- vanila has joined.
17:16:05 <Gregor> elliott: If I'm reluctant to do things GCC-specific, how willing do you think I am to actually require an instrumented compiler to use my GC X-D
17:17:02 <elliott> Gregor: who said anything about a requirement?
17:17:10 <elliott> it'd just be cool to be able to, like, build GMP natively like that.
17:17:26 <elliott> since I remember it being such a fuss to teach the GC about libraries in cfythe
17:17:54 <Gregor> Ohhhhhhhhhhh, I see what you're suggesting now. Naw, that's not instrumentable because it's not possible to reliably know what malloc is mallocing.
17:18:03 <Gregor> Aliasing = "oh gawd mah pointers where did they go?!"
17:19:23 <elliott> Gregor: you can override malloc
17:19:26 <elliott> pretty common
17:19:34 <elliott> to point to your GC allocator
17:19:35 <elliott> or what do you mean?
17:19:53 <Gregor> That doesn't let it know what it's allocating. This is a precise GC: It needs to know more than just how many bytes, it needs to know which of those bytes are GC pointers.
17:20:03 <elliott> right, yeah.
17:20:23 <elliott> okay, so it'd be that + rewriting calls to malloc to pass along type info + analysing struct definitions. or just using LLVM's precise tracing GC support.
17:21:21 <Gregor> LLVM cannot have precise tracing GC support /for C/. Nothing can have precise tracing GC support for C because C does not pass along type info at allocation time.
17:21:34 <elliott> erm, right.
17:21:47 <elliott> okay, then just s/\. or.*// on that line
17:21:54 <Gregor> Heh
17:22:02 <elliott> also s/$/ + add a bunch of restrictions on casts and give up on life/
17:22:03 <Gregor> I like how you explicitly removed the full stop.
17:22:08 <b_jonas> Gregor: I have some questions. What if the function doesn't have an explicit return, only a fall through the close brace. What if the expression for return needs values from the stack frame, how do you keep those referenced until after? And how do you make the macro work even in functions that don't push?
17:24:39 <Gregor> b_jonas: (1) This case isn't supported and requires an explicit pop. It's hoped to be a minority. (2) Pointers only change when collection occurs, so only weird compound expressions can cause this anyway. This problem isn't solved by using pop (or anything else for that matter) instead of return, it's just a slight restriction that users of a GC will have to abide by regardless. (3) Push defines a const int that overrides a global const int. The if condition lo
17:24:39 <Gregor> oks something like if (i_pushed ? (stuff, 0) : 0) {} else return
17:26:50 <Gregor> s/overrides/shadows/ is more explicit.
17:26:54 <elliott> it's kinda nice that __attribute__((cleanup)) is exception-safe
17:31:45 <Gregor> I guess I could do __attribute__((cleanup)) on __GNUC__ and C++ on MSVC.
17:31:52 <Gregor> And that covers all compilers.
17:37:31 <b_jonas> ah, tricky
17:37:35 <b_jonas> shadows a global
17:41:55 <b_jonas> oh, on anagol, Mail Merge times out in one day
17:42:40 <elliott> Gregor: I guess you can avoid the shadowing with __attribute__((cleanup))?
17:43:02 <Gregor> elliott: I can avoid the whole pop situation with __attribute__((cleanup))
17:43:08 * elliott nods
17:44:32 <b_jonas> What the heck is this? http://golf.shinh.org/p.rb?Wow
17:46:39 <Gregor> Actually, I could use __attribute__((cleanup)) on GCC, C++ on C++ compilers, and #define return on everything else!
17:47:00 <fizzie> b_jonas: It's a golf problem. That means you need to write a short program to generate that output. HTH.
17:47:11 <elliott> Gregor: step away from the #define return
17:47:18 <elliott> tcc users should write their own pops :P
17:47:49 <Gregor> It's not acceptable that you have to do different things to use a library with different compilers.
17:48:04 <elliott> c'mon, there has to be at least one compiler out there that correctly forbids #define return.
17:48:13 <Gregor> I severely doubt it.
17:48:17 <fizzie> "The program shall not have any macros with names lexically identical to keywords currently defined prior to the inclusion of [any standard] header or when any macro defined in the header is expanded."
17:48:21 <fizzie> Says the C standard.
17:48:45 <Gregor> Heyo! That condition is my out!
17:48:49 <elliott> fizzie: can you read that as permitting #define return after including standard headers
17:48:52 <elliott> if so, ugh.
17:49:01 <olsner> that's how I read it
17:49:12 <elliott> remind me to write some tortured program to break Gregor's hack :p
17:49:29 <fizzie> I think you can, but there's quite a few macros in those headers.
17:49:33 <Gregor> This is great! The hack will only be for awful compilers anyway.
17:49:58 <elliott> fizzie: oh, right
17:50:06 <elliott> Gregor: except it forbids you from using any stdlib macros
17:50:10 <elliott> like. errno.
17:50:12 <elliott> or puts or whatever.
17:50:22 <fizzie> Or "stdin".
17:50:23 <elliott> I forget if puts is a macro but you get the idea.
17:50:46 -!- alexandre has joined.
17:50:46 <fizzie> Or SEEK_SET, or EOF, or NULL.
17:50:51 -!- alexandre has changed nick to boily.
17:50:59 -!- boily has quit (Client Quit).
17:51:08 <b_jonas> or FILE
17:51:18 <fizzie> No, that's a declared type.
17:51:28 <b_jonas> are you sure? I think it's a macro
17:51:32 <b_jonas> that expands to a type
17:51:36 <fizzie> Though admittedly it's arguable whether "declares a type" can refer to a macro.
17:51:39 -!- boily has joined.
17:51:50 <fizzie> "The types declared are -- FILE which is an object type --" (C11 7.21.1p2)
17:51:57 <b_jonas> wait, let me check
17:52:00 <fizzie> And p3 is "The macros are --"
17:52:08 <Gregor> Are you genuinely telling me that it's better to have NO generic implementation (i.e., be specific to GCC and C++) than it is to do something which, while technically forbidden by the standard, would be nearly impossible to cause problems?
17:52:21 <b_jonas> but yeah, stdin definitely
17:52:30 <elliott> Gregor: yeah, because I don't believe you can actually avoid having it cause problems :p
17:52:38 <elliott> like, for one, functions returning void.
17:52:57 <Gregor> elliott: It's not like it breaks EXISTING functions that return void.
17:53:02 <elliott> yeah, but doing magic that hides the popping details and then expecting everyone to remember the popping detail that you need to "return" in functions with no return value...
17:53:15 <elliott> I guarantee you I would forget
17:53:28 <elliott> don't C compilers generally warn about extraneous returns in void functions anyway
17:53:33 <elliott> sort of builds up an instinct
17:53:46 <Gregor> Oy vey.
17:54:20 <elliott> hey, I'm not the one #defining return
17:54:44 <Gregor> And I'm not the one being compiler-specific because pedantry!
17:55:02 <b_jonas> fizzie: sorr you're right
17:55:07 <b_jonas> FILE is indeed not a macro
17:55:12 <b_jonas> somehow I thought it was
17:55:15 <elliott> well, when I need to do something that requires a GNU C extension to do it reasonably and reliably, I either don't do it or I use the extension :p
17:55:32 <b_jonas> but anyway, stdout is, and putchar may be
17:56:00 <Gregor> elliott: What I'm proposing is that I use the extension, but IF the extension isn't available, I approximate.
17:56:06 <Gregor> Rather than say "lol no gcc u suk"
17:56:31 <elliott> Gregor: I know, but I don't need to add returns to void functions when I'm using gcc.
17:56:41 <elliott> and I won't, because I'd get a warning about it being useless in my head if not from the compiler.
17:56:52 <elliott> and since I don't use tcc, it'll break in exciting ways whenever I do.
17:56:54 <Gregor> I don't think any compiler gives warnings for "spurious" returns from void functions.
17:56:58 <Gregor> I've never heard of such a warning.
17:57:02 <elliott> my head does :p
17:57:27 <Gregor> ALSO, if the compiler gives warnings for unused variables, you'd still get a warning for not popping!
17:57:34 <elliott> my point is there's no way anyone will remember it especially if it's not required for gcc/clang *unless* they're specifically trying to be pedantically portable. in that case, they have to keep that in mind constantly anyway because other compilers suck, so it's not reallym uch additional burden to just get them to pop manually.
17:58:03 <Gregor> The burden of popping manually in EVERY FUNCTION, when some tiny portion of them return void???
17:59:25 <elliott> the burden of supporting crappy compilers anyawy :p
17:59:26 <elliott> *anyway
18:00:21 <b_jonas> what if you add a custom source processing step that finds all blocks with one of your push instructions and adds a pop at the end of that block and before returns?
18:00:36 <elliott> anyway I'm not interested in the escalating hysterics so w/e
18:01:03 <b_jonas> then you'd get a crazy build procedure like Qt
18:02:39 <elliott> didn't qt switch to standard C++ at some point
18:03:20 <b_jonas> no idea
18:06:31 <fizzie> I think I heard something about that.
18:07:05 <Gregor> The thing that makes me want to do something cleverer than manual popping in the first place is that while there's only one entry to a function (and thus only one point to push), there are potentially many exits.
18:07:57 <b_jonas> Gregor: what if instead or return, you define another macro that behaves like return?
18:08:02 <b_jonas> like xreturn or something
18:08:20 <elliott> I just really don't think it's worth adding and maintaining flaky, hacky half-support for convenience features for near-useless compilers when supporting compilers anyone actually uses perfectly is possible and easy.
18:08:24 <elliott> it's up to oyu
18:08:26 <elliott> *you
18:09:06 <Gregor> b_jonas: You'd have to remember to use xreturn in all the same cases as you previously would have had to remember to use pop *shrugs*
18:10:21 <elliott> if you really really want to just write the pops once while using a useless compiler I'd just "goto cleanup", honestly. C programmers are used to that idiom.
18:10:28 <elliott> *the popping once
18:10:30 <fizzie> Well, 'moc' is still there in Qt 5 documentation. But I think they've been trying to switch away from you writing raw QWidgets and dealing with signals and slots and whatnot to things involving QML and JavaScript.
18:26:44 <Gregor> Heyo, __attribute__((cleanup)) does the trick beautifully :)
18:30:29 <elliott> Gregor: I bet you could use it for such disgusting things.
18:30:45 <elliott> int main() { __attribute__((cleanup(puts))) char x = 'q'; }
18:32:03 <Gregor> Bahaha
18:39:18 <Gregor> Bleh, the C++ solution segfaults.
18:39:44 <fizzie> `cc #include <stdio.h> \n int main() { __attribute__((cleanup(puts))) char x = 'q'; } /* it was so awful, it's worth looking live */
18:39:45 <HackEgo> q
18:40:29 <Gregor> X-D
18:40:31 <Gregor> I love it.
18:40:50 <fizzie> Also a pure accident it printed "q" and not "q<random garbage>".
18:42:05 <Gregor> Oh, I didn't even notice you were using puts instead of putchar.
18:42:06 <Gregor> Amazing.
18:43:08 <fizzie> It gets a pointer to the thing, so... and there's warnings about the type for a char x[].
18:43:41 <fizzie> `cc #include <stdio.h> \n int main() { __attribute__((cleanup(puts))) char x[] = "foobar"; } /* the output is still there, though */
18:43:43 <HackEgo> ​/tmp/a.c: In function ‘main’: \ /tmp/a.c:2:2: warning: passing argument 1 of ‘puts’ from incompatible pointer type [enabled by default] \ In file included from /tmp/a.c:1:0: \ /usr/include/stdio.h:688:12: note: expected ‘const char *’ but argument is of type ‘char (*)[7]’ \ foobar
18:44:13 <Gregor> Hm
18:49:08 <elliott> `cc #include <stdio.h> \n int main(int argc, char **argv) { for (int i = 0; i < argc; i++) puts(argv[i]); if (argc > 0) { volatile __attribute__((cleanup(main))) char **av = argv + 1; volatile int ac = argc - 1; } }
18:49:09 <HackEgo> ​/tmp/a.c: In function ‘main’: \ /tmp/a.c:2:36: error: ‘for’ loop initial declarations are only allowed in C99 mode \ /tmp/a.c:2:36: note: use option -std=c99 or -std=gnu99 to compile your code \ /tmp/a.c:2:150: warning: initialization from incompatible pointer type [enabled by default] \ /tmp/a.c:2:2: warning: passing argument 1 of ‘ma
18:49:20 <elliott> `cc #include <stdio.h> \n int main(int argc, char **argv) { int i; for (i = 0; i < argc; i++) puts(argv[i]); if (argc > 0) { volatile __attribute__((cleanup(main))) char **av = argv + 1; volatile int ac = argc - 1; } }
18:49:21 <HackEgo> ​/tmp/a.c: In function ‘main’: \ /tmp/a.c:2:153: warning: initialization from incompatible pointer type [enabled by default] \ /tmp/a.c:2:2: warning: passing argument 1 of ‘main’ makes integer from pointer without a cast [enabled by default] \ /tmp/a.c:2:6: note: expected ‘int’ but argument is of type ‘volatile char ***’ \ /tmp/a.
18:51:33 <Gregor> Oh, my C++ destructor is never being called... >_O
18:52:57 <elliott> fizzie: you get that working.
18:53:22 <elliott> oh, I guess it wouldn't.
18:53:40 <elliott> `cc #include <stdio.h> \n int main(__attribute__((cleanup(puts))), char **argv) {}
18:53:41 <HackEgo> ​/tmp/a.c:2:41: error: expected declaration specifiers or ‘...’ before ‘,’ token
18:53:47 <elliott> `cc #include <stdio.h> \n int main(__attribute__((cleanup(puts))) int argc, char **argv) {}
18:53:48 <HackEgo> ​/tmp/a.c:2:2: warning: ‘cleanup’ attribute ignored [-Wattributes]
18:53:52 <elliott> *phew*
19:07:10 -!- shikhin has changed nick to gamergate.
19:07:17 -!- gamergate has changed nick to shikhin.
19:08:24 * elliott 's banhammer twitches
19:08:33 <Gregor> Ha
19:13:33 -!- nys has joined.
19:26:43 -!- AnotherTest has joined.
19:49:11 -!- shikhout has joined.
19:52:36 -!- shikhin has quit (Ping timeout: 256 seconds).
19:57:23 -!- shikhout has changed nick to shikhin.
20:08:07 -!- DTSCode has joined.
20:48:55 -!- MoALTz_ has quit (Ping timeout: 244 seconds).
20:57:37 -!- Frooxius has joined.
21:07:49 -!- Sprocklem has joined.
21:13:07 -!- boily has quit (Quit: APPROXIMATIVE CHICKEN).
21:19:59 <vanila> Hi esoteric
21:20:30 <vanila> consider productions like f(X,Y,Z) -> a X X Y b Z c c
21:20:52 <vanila> e.g. tag(T,B) -> '<' T '>' B '<' '/' T '>'
21:21:48 <vanila> any how how I could write a good compressor that tages a srting and produces a grammar like this which builds the string?
21:22:04 <vanila> I thinkt that a powerful compressor of that type would uncover lots of interesting structure automatically
21:22:23 <fizzie> Look up "grammar induction".
21:24:13 <fizzie> I think I played a little bit with ADIOS.
21:24:45 <fizzie> http://adios.tau.ac.il/ADIOS.html
21:24:45 <vanila> I heard of adios
21:25:06 <fizzie> I don't remember any details about what I used it for, and what kind of models it does.
21:34:07 <Sgeo> <Sgeo> Isn't the typed side of a typed-untyped module barrier so arrogant? It always blames the untyped side for contract violations...
21:34:08 <Sgeo> <mithos28> Sgeo: well not always
21:34:08 <Sgeo> <mithos28> if the untyped side was better behaved there wouldn't be any violations and it wouldn't get blamed
21:40:52 <Bike> is that so dot amv
21:41:17 <vanila> didn't wadler make this a theorem
21:42:53 -!- MeerLin has joined.
21:46:55 -!- MeerLin has quit (Ping timeout: 246 seconds).
22:21:05 -!- FreeFull has quit (Ping timeout: 256 seconds).
22:23:16 -!- DTSCode has quit (Ping timeout: 272 seconds).
22:23:17 -!- FreeFull has joined.
22:23:56 -!- Patashu has joined.
22:29:35 -!- boily has joined.
22:30:55 -!- Vorpal_ has joined.
22:30:55 -!- Vorpal_ has quit (Changing host).
22:30:55 -!- Vorpal_ has joined.
22:34:49 -!- Vorpal has quit (Ping timeout: 260 seconds).
22:37:08 -!- AnotherTest has quit (Remote host closed the connection).
23:04:40 -!- nyuszika7h has quit (Remote host closed the connection).
23:10:58 <Taneb> Sweet, my custom T-shirt protesting against one of my lecturer's insistence that anyone who disagrees with him on a certain arbitrary decision is wrong has arrived!
23:11:20 <vanila> lol cani see
23:12:21 <Taneb> It just says "0 ∈ ℕ"
23:12:42 <vanila> hhaha oh noo
23:12:47 <vanila> don't get involved in that
23:13:09 <vanila> half the mathematicians are gonna hate you
23:13:26 <Taneb> That's most the reason I'm wearing it
23:14:03 <vanila> you could get 1 in N on the back
23:14:09 <vanila> that would be funny
23:14:13 <Taneb> Although I kind of wished I got it so I could turn it inside out and it'd say "0 ∉ ℕ" or something
23:14:13 <vanila> argue with someone and then just walk off
23:17:30 <b_jonas> Taneb: great!
23:27:30 <zzo38> It doesn't render on my computer
23:27:50 <b_jonas> what doesn't render?
23:28:07 <zzo38> Can you please tell me how it is supposed to mean, with ASCII codes?
23:28:14 <zzo38> b_jonas: Taneb's stuff
23:28:24 <fizzie> zzo38: 0 \in \mathds{N}, LaTeX-wise.
23:28:29 <fizzie> zzo38: I don't know what it is in plain TeX.
23:29:06 -!- oerjan has joined.
23:29:06 <zzo38> What is the second one?
23:29:09 <shachaf> Taneb: 0 certainly ∈ ℕ
23:29:42 <shachaf> Taneb: You should read a book I have. It calls integers ≥ 0 "positive" and integers > 0 "strictly positive".
23:30:08 <fizzie> zzo38: Same but with \not\in.
23:30:14 <zzo38> Ah, OK
23:30:48 <fizzie> I wonder if someone, somewhere has used € to stand in for \in.
23:30:51 <zzo38> And what do you mean by \mathds? Is that like black board bold?
23:30:55 <fizzie> Yes.
23:30:58 <shachaf> Double-struck, probably.
23:31:09 <fizzie> It's called both "blackboard bold" and "double-struck".
23:31:48 <oerjan> i definitely used \mathbb, way back
23:31:51 <fizzie> The 'dsfont' package provides a \mathds for it, and I think AMS has \mathbb.
23:31:57 <shachaf> fizzie: a € b means ∃ c. a ∈ c ∧ c ∈ b
23:31:59 <shachaf> clearly
23:32:19 <Bike> how much do you think a shirt reading "-1 ∈ ℕ" would cost
23:32:27 <oerjan> shiny squares
23:32:37 <oerjan> `unidecode ∃ c. a ∈ c ∧ c ∈ b
23:32:38 <HackEgo> ​[U+2203 THERE EXISTS] [U+0020 SPACE] [U+0063 LATIN SMALL LETTER C] [U+002E FULL STOP] [U+0020 SPACE] [U+0061 LATIN SMALL LETTER A] [U+0020 SPACE] [U+2208 ELEMENT OF] [U+0020 SPACE] [U+0063 LATIN SMALL LETTER C] [U+0020 SPACE] [U+2227 LOGICAL AND] [U+0020 SPACE] [U+0063 LATIN SMALL LETTER C] [U+0020 SPACE] [U+2208 ELEMENT OF] [U+0020 SPACE] [U+00
23:32:42 <b_jonas> Bike: ugh
23:32:52 <fizzie> oerjan: "There exists space" well can't argue with that.
23:33:06 <Bike> b_jonas: don't be a mathphobe
23:33:37 <oerjan> fizzie: today the newspaper had a "quote of today" that was something like "there's nothing there's more of than nothing"
23:34:05 <shachaf> oerjan: exists c. a `in` c && c `in` b hth
23:34:07 <b_jonas> Bike: that's like "Let ε<0"
23:34:22 <Bike> ok so how much would that be on a shirt
23:34:45 <Bike> or i could splurge, get a proof that .999... != 1 printed
23:35:05 <fizzie> All the London guides start with "When a man is tired of London, he is tired of life" quote by Samuel Johnson, which makes me think nobody famous never said anything else positive, so they all have to go with that.
23:35:26 <oerjan> unfortunately it was translated into norwegian, i don't remember the person (some old dead guy), and google finds nothing
23:36:01 <zzo38> To me, zero is a natural number, but some people use different definition of a natural number.
23:36:16 <oerjan> to the greeks, not even one was natural
23:36:44 <Bike> i guess for maximum pissing off it has to be something boring and arbitrary, like zero in the naturals, rather than .999... which is just obviously dumb
23:36:46 <oerjan> or so i read
23:36:52 <Bike> 0^0 = 1, maybe
23:37:15 <fizzie> > 0^0
23:37:16 <lambdabot> 1
23:37:18 <fizzie> In good company.
23:37:22 <shachaf> let ε ∈ {x ∈ R | x² = 0} hth
23:37:27 <Bike> #owned
23:37:35 <shachaf> zzo38: an unnatural definition hth
23:37:45 -!- nyuszika7h has joined.
23:38:18 <Bike> if it's unnatural how do you explain this photograph of i have of a turtle using the same convention in its natural habitat
23:38:23 <Bike> ethology works mother fuckers
23:38:39 <oerjan> > undefined^0 -- someone did that yesterday
23:38:40 <lambdabot> 1
23:39:31 <oerjan> Bike: exponential turtles? that sounds dangerous.
23:39:45 <oerjan> oh wait
23:39:50 <Bike> it's pretty common ecology, actually
23:40:04 <Bike> such is breeding
23:40:09 <shachaf> logarithmic turtles
23:46:04 <shachaf> Bike: how are the manifolds going
23:46:57 <Bike> not great
23:47:08 <Bike> now that i know what a section is i understand more things so my motivation has dropped
23:47:55 <shachaf> it helps with reading math books
23:48:03 <shachaf> but if you know what a chapter is you can usually get by
23:48:46 <shachaf> (What's a section?)
23:49:11 <shachaf> Is it just a right inverse or something more complicated?
23:51:27 <Bike> a right inverse.
23:53:49 <shachaf> did you know the axiom of choice is equivalent to "every surjection has a right inverse"
23:54:01 <shachaf> (which makes sense if you think about it)
23:56:17 -!- ^v has quit (Read error: Connection timed out).
23:57:29 -!- ^v has joined.
←2014-11-07 2014-11-08 2014-11-09→ ↑2014 ↑all