←2011-12-12 2011-12-13 2011-12-14→ ↑2011 ↑all
00:07:28 -!- elliott has quit (Quit: doop).
00:14:16 -!- kmc has quit (Quit: Leaving).
00:19:00 -!- pikhq_ has joined.
00:19:15 -!- hagb4rd has quit (Ping timeout: 240 seconds).
00:19:16 -!- pikhq has quit (Ping timeout: 248 seconds).
00:27:29 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
00:29:25 -!- pikhq has joined.
00:29:48 -!- pikhq_ has quit (Ping timeout: 252 seconds).
00:37:11 <quintopia> finish this analogy
00:37:24 <quintopia> Christianity:Windows::Wicca:?
00:40:52 <Jafet> Christianity has many distros
00:42:18 -!- DCliche has joined.
00:45:54 -!- Klisz has quit (Ping timeout: 252 seconds).
00:46:27 -!- DCliche has changed nick to Klisz.
00:51:33 -!- copumpkin has joined.
00:52:34 -!- calamari has joined.
00:53:50 -!- hagb4rd has joined.
00:57:57 <quintopia> Jafet: yes, true, but ignore that for now. is has the property that (a) the majority of religion-users in the western world use it and (b) it is very much targeted at the lowest common denominator, although there is latent potential for power users as well.
01:04:16 <pikhq> Shame you didn't go with Scientology.
01:04:21 <pikhq> Then I could finish it so easily.
01:04:39 <pikhq> ::Scientology:LoseThos
01:05:54 <quintopia> i want to know which OS is so esoteric and obscure that only paganism suits it
01:06:18 <pikhq> I'm inclined to go with OS/2.
01:06:32 <pikhq> Or perhaps FreeDOS.
01:07:16 <oerjan> but but, it needs to be an os which claims to be the modern revival of an os which windows brutally crushed
01:07:45 <Jafet> An OS/2 remake?
01:07:55 <pikhq> OS/2 is still maintained.
01:08:57 <Jafet> Modern Christianity has as many pagan elements as Christian elements
01:09:28 -!- Jafet has quit (Quit: Leaving.).
01:18:13 <oerjan> eek, reddit won't load, i haven't seen that in a while
01:36:25 <fizzie> How about that BeOS remake?
01:38:56 <fizzie> Not that BeOS really counts as "brutally crushed" in the "existed earlier but then" sense, more in the "tried to get going but then" one.
01:39:58 <zzo38> Jafet: Yes, I can understand. The religions are based on older traditions so that includes Christian as well as pagan (for various reasons; you might learn on Wikipedia)
01:40:36 <zzo38> I use FreeDOS at a Roman Catholic education center.
01:47:35 -!- elliott has joined.
01:47:51 <elliott> 01:05:54: <quintopia> i want to know which OS is so esoteric and obscure that only paganism suits it
01:47:54 <elliott> paganism is "so esoteric and obscure"?
01:48:35 <quintopia> IT TOTALLY IS
01:49:24 <elliott> 01:06:18: <pikhq> I'm inclined to go with OS/2.
01:49:31 <elliott> pikhq: For some reason I want to say that OS/2 is Zoroastrianism.
01:49:34 <elliott> I know little about both.
01:49:54 <elliott> 01:36:25: <fizzie> How about that BeOS remake?
01:50:15 <elliott> fizzie: It's called Haiku, dude, there's pretty much no chance it's not Buddhism?
01:55:32 <MDude> A quick look as WIikipedia ways that Wicca is a specific form of paganism related to witchcraft.
01:56:42 <MDude> That agrees with what I know from that Scoobie Doo movie with the wiccans in it.
01:56:50 <elliott> `addquoet <MDude> A quick look as WIikipedia ways that Wicca is a specific form of paganism related to witchcraft. <MDude> That agrees with what I know from that Scoobie Doo movie with the wiccans in it.
01:56:52 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: addquoet: not found
01:56:56 <elliott> `addquote <MDude> A quick look as WIikipedia ways that Wicca is a specific form of paganism related to witchcraft. <MDude> That agrees with what I know from that Scoobie Doo movie with the wiccans in it.
01:56:58 <HackEgo> 762) <MDude> A quick look as WIikipedia ways that Wicca is a specific form of paganism related to witchcraft. <MDude> That agrees with what I know from that Scoobie Doo movie with the wiccans in it.
01:57:05 <fizzie> Haiku - "I can't believe it's not but.. Buddha".
01:57:12 <elliott> MDude: You should write a book and call it Everything I Know About Wicca I Learned From Scooby Doo.
01:58:04 -!- cheater has joined.
01:59:23 <MDude> Is there any operating system connected to to some earlier system that was hunted down in a manner similar to a witch hunt?
02:00:04 <elliott> MDude: All I can think of is if SCO suceeded in DESTROYING LINUX and then someone started developing it again decades later.
02:00:10 <elliott> That didn't happen though. (YET?)
02:00:21 <MDude> Also, I heard about wiccans form other places, but figured it was mostly generic pagan stuff.
02:00:28 <elliott> I don't think operating systems are hunted a lot.
02:00:45 <MDude> Though I guess I thought a lot of pagan stuff was connected to witches.
02:00:50 <elliott> They're too boring, and there's a huge barrier to entry so obviously illegal stuff doesn't tend to happen.
02:01:05 <elliott> MDude: Isn't "witch" just generic pagan stuff these days? :p
02:01:36 <MDude> I don't really know, it's not the kind of tihng I keep up with.
02:01:49 <MDude> There is actually a witchcraft-themed linix, though.
02:02:50 <MDude> I found it by looking up "Linux grimoire".
02:03:54 <elliott> That just brings up Source Mage for me.
02:04:00 <elliott> I suppose that counts as "witchcraft-themed".
02:04:04 -!- thatmentat has joined.
02:04:14 <thatmentat> Greetings friends.
02:04:28 <elliott> `welcome thatmentat
02:04:31 <HackEgo> thatmentat: Welcome to the international hub for esoteric programming language design and deployment! For more information, check out our wiki: http://esolangs.org/wiki/Main_Page
02:04:43 <oerjan> i should point out that in some muslim states you can _still_ get executed for presumed witchcraft, i saw one mention from saudi arabia in a paper today
02:04:45 * elliott is a `welcoming machine of ruthless efficiency
02:05:05 <elliott> oerjan: We sure are unifying the two definitions of esoteric here.
02:05:05 <MDude> Well it doens't seem like it's themed after ancient Persian scholars.
02:05:19 <zzo38> oerjan: And apparently in Canada it is illegal to charge money for "witchcraft" stuff or something like that.....
02:05:53 <zzo38> elliott: In that case, you can probably unify a lot of stuff in certain ways for certain purposes
02:05:55 <thatmentat> This is a chat room for programming languages?
02:05:55 <elliott> http://esoteric.voxelperfect.net/w/index.php?title=1_Chat_Line&curid=4885&diff=26035&oldid=26034 one of our spambots just tweaked the colours it's using
02:06:03 <elliott> "naw, i think red is better here"
02:06:06 <oerjan> zzo38: wrt that i read in britain (until recently?) it was not illegal to _be_ a witch but it was illegal to _pretend_ to be one
02:06:12 <elliott> thatmentat: Yes. Even if it doesn't seem like it right now.
02:06:16 <elliott> (Are you here for that, or the other kind of esoteric?)
02:06:19 <oerjan> *-that
02:06:25 <oerjan> er
02:06:28 <oerjan> *-*-that
02:06:31 <elliott> oerjan: well they might burn someone by mistake
02:06:45 <zzo38> thatmentat: Yes, it is a chat room for esoteric programming but we discuss a lot of things here anyways
02:06:45 <thatmentat> I came for the second. I haven't the patience to learn programming.
02:06:59 <elliott> thatmentat: you probably won't find it on freenode, then
02:07:02 <elliott> it's mostly technology-oriented
02:07:52 <thatmentat> What is mostly tech oriented?
02:07:58 <elliott> freenode, the IRC network you are on
02:08:07 -!- cheater has quit (Ping timeout: 245 seconds).
02:08:23 <zzo38> But if you have a specific question (regardless of topic), you might ask. And then quit if you do not get an answer (unless it is a question about esoteric programming in which case stay)
02:09:17 <oerjan> thatmentat: alas we have never learned of a good irc channel to recommend for those who come here expecting the other interpretation of esoteric
02:09:44 <elliott> oerjan: we should just make one and let them all trickle in, it'll be more active than this place within a year :P
02:09:52 <quintopia> that
02:09:52 <oerjan> heh
02:09:54 <quintopia> do that thing
02:10:01 <thatmentat> I could use recommendations of other irc places though, even if not specifically esoterical.
02:10:07 <zzo38> I realized that if you define a monad transformer and/or comonad transformer then you can easily define return and extract as well the definition will always the be same: return = lift . return; extract = extract . lower;
02:10:16 <oerjan> elliott: well those guys who started #philosophy tried to do that, didn't they? how is it working?
02:10:23 <thatmentat> send people to irc.dal.net #esoteric
02:10:26 <thatmentat> ^
02:10:29 <elliott> it's not #philosophy, is it?
02:10:33 <elliott> thatmentat: Oh, is that active?
02:10:41 <quintopia> it was a year ago i think
02:10:44 <oerjan> elliott: i thought it was _something_ like that...
02:10:45 <thatmentat> more than not existing
02:10:53 <elliott> * Users on #Esoteric: elliott thatmentat QueenAqua @^roshi marduk666 @Venus666 VenusSatanas_ Trollfood ami- Cocytus hippl^
02:10:55 <elliott> Cocytus again!
02:11:03 <elliott> did that guy just join #esoteric on every server everywhere
02:11:16 -!- derdon has quit (Remote host closed the connection).
02:11:22 <oerjan> elliott: that list looks promising, at least :P
02:11:23 <zzo38> I have an IRC server too, however it has no channels what you want probably and hardly anyone is in there
02:11:29 <elliott> thatmentat: well, glad you've found somewhere
02:11:36 <elliott> oerjan: <^roshi> thing is there are several streams of alchemy
02:11:38 <elliott> oerjan: looks good :P
02:11:52 * elliott lurks.
02:12:08 <zzo38> What about alchemy?
02:12:10 <quintopia> let us know if anything above and beyond the usual pale of ridiculousness falls out
02:13:10 <elliott> quintopia: thatmentat is still here, you know! :P
02:13:47 <zzo38> What are you talking about alchemy?
02:14:21 <quintopia> elliott: what's your point?
02:14:44 -!- oerjan has set topic: Zeroth to prove spontaneous human combustion wins | This is a programming channel; if you are looking for the other kind of esoteric you might try #esoteric on irc.dal.net | Logs: http://codu.org/logs/_esoteric/.
02:15:05 <elliott> oerjan: hey i was going to _ask_ them first
02:15:14 -!- elliott has set topic: Zeroth to prove spontaneous human combustion wins | http://codu.org/logs/_esoteric/.
02:15:15 <oerjan> elliott: well we can remove it again
02:15:33 <zzo38> oerjan: OK that is good. But still we discuss a various a lot of things in here.
02:15:52 <thatmentat> I just joined ones that looked like they had people in them.
02:15:55 <zzo38> So, figure out, should that message be there or not? Maybe it makes too long? Or other reason?
02:16:07 * elliott asks them
02:16:08 <thatmentat> I was curious.
02:17:05 <thatmentat> Interesting response. I didn't think he would reject the idea elliott.
02:17:19 <elliott> yeah that was out of left field :P
02:17:20 <zzo38> But note, once someone accessed this channel, and then quit, and then I had something about astrology and then they could not have their question answered because they missed it. But still, notice that we have more mathematical points of view so they might not have understood the answer anyways (maybe).
02:17:47 <oerjan> <zzo38> What are you talking about alchemy? <-- elliott was quoting an example message from the other #esoteric channel at dalnet
02:18:25 <quintopia> they refused?
02:18:33 <elliott> quintopia: no, the guy misunderstood what i said
02:18:35 <quintopia> oh
02:18:57 <zzo38> What does "several streams of alchemy" mean anyways? Alchemy is what they did before they had proper science, they could do it like that they did not know things better or have better equipment to know better. Now we have chemistry
02:19:35 <thatmentat> The idea is that there are several basic models for Alchemy I believe.
02:20:07 <thatmentat> Alchemy as was being discussed goes beyond simply trying to manipulate materials.
02:21:01 <elliott> `run echo "This channel is about programming -- for the other kind of esoterica, try #esoteric on irc.dalnet.net." >wisdom/esoteric
02:21:03 <HackEgo> No output.
02:21:07 <elliott> `? esoteric
02:21:10 <HackEgo> This channel is about programming -- for the other kind of esoterica, try #esoteric on irc.dalnet.net.
02:21:44 <zzo38> elliott: Yes that way might be good idea instead of topic message, I supppose.
02:22:04 <zzo38> And then you can make a shortcut for those kinds of informations message.
02:22:12 <elliott> the only thing that can successfully survive our constant topic changes is the log link :P
02:22:32 <oerjan> zzo38: as i understand, alchemy sometimes has a strong spiritual component aside from the chemistry - basically you are supposed to transform yourself at the same time as you are learning how to transform materials
02:23:10 <oerjan> when put like that, it sounds like you could possibly even make a modern version based on actual chemistry
02:23:21 <elliott> oerjan: i'm afraid not: "It must never be supposed that the practice of alchemy consists only in the exercise of the mind, will, and imagination, or that the products obtained are imaginary and intangible or invisible to mortal eyes."
02:23:31 <elliott> from a link posted in #esoteric while i was there :P
02:23:42 <elliott> apparently you still need the physical materials, though.
02:23:57 <oerjan> elliott: "only" does not mean that it doesn't also involve that
02:24:02 <zzo38> oerjan: Yes, sometimes they did do spiritual things based on some ideas of alchemy.
02:24:06 <elliott> oh, wait
02:24:08 <elliott> must never be supposed
02:24:14 <elliott> i completely negated that meaning
02:24:19 <zzo38> But I think it is "spiritual alchemy" instead of real alchemy.
02:24:55 <xxDarkProphetxx> hi gaiz
02:25:13 <xxDarkProphetxx> oh right.
02:25:15 -!- xxDarkProphetxx has changed nick to kallisti.
02:25:39 <zzo38> Now we have science so we don't need alchemy (except for the purpose of making up new alloys, sometimes, at least according to some opinions).
02:25:40 <kallisti> (that's /too/ much irony. I can't handle it)
02:27:11 <kallisti> zzo38: okay so I'm working on an IRC bot that is intended to assist tabletop RPGing over IRC.
02:27:12 <zzo38> Whatever the discussion in here, it often involves some scientific and mathematical stuff, sometimes. Because this is how the people in this channel are, in general.
02:27:33 <zzo38> kallisti: Yes I was doing so, too. I think one IRC server has a GS command to do that too
02:27:57 <kallisti> zzo38: should I use my native WoD terminology for concepts, or should I use D&D, or is there some standard terminology that isn't D&D?
02:28:13 <kallisti> most people say "gamemaster" and "campaign" where I would say "storyteller" and "chronicle" I think.
02:28:25 <zzo38> kallisti: I say "referee" in my opinion, at least.
02:28:36 <oerjan> D&D uses dungeon master sometimes, doesn't it?
02:28:38 <kallisti> that... no I don't like that. :P
02:28:38 <zzo38> For dice, just use 1d6+2 or whatever.
02:28:39 <kallisti> oerjan: yes
02:28:50 <kallisti> oerjan: game or dungeon master works. I think gamemaster is typically preferred.
02:29:00 <zzo38> oerjan: D&D usually calls "dungeon master" but you could use different terms. I prefer "referee" but use whatever you prefer.
02:29:01 <kallisti> but I honestly don't know much about D&D culture
02:29:13 <kallisti> because I don't play that game.
02:29:24 * kallisti likes "storyteller"
02:29:25 -!- thatmentat has left.
02:30:04 <zzo38> kallisti: Read the D&D recordings I wrote and learn about how I play the game, at least.
02:30:11 <kallisti> with a single game being a story, and a set of stories with recurring characters and themes being a chronicle.
02:31:02 <zzo38> kallisti: Yes, that is a sensible view. I consider the game (story) consisting of several sessions, which have both session breaks and chapter breaks, which might or might not coincide.
02:31:23 <zzo38> I think some IRC server, if you use the command "GS ROLL 1d6" for 1d6 roll dice, and so on. You can optionally include a channel afterward to copy the results to the named channel
02:31:39 * kallisti plans to incorporate a little bit more than a simple dice roller, since he already has that.
02:31:54 <kallisti> I plan on implementing dice rollers for each system, perhaps with the ability to track stats.
02:32:43 <kallisti> so that you can say: !roll Dexterity+Acrobatics+2 diff 6
02:32:44 <oerjan> @dice 3d6 + 1d20
02:32:44 <lambdabot> 3d6 + 1d20 => 27
02:32:45 <kallisti> for example
02:33:04 <zzo38> O, lambdabot already has
02:33:21 <kallisti> that doesn't work well with shadowrun and WoD systems
02:33:27 <kallisti> where you roll a large number of dice against a target number
02:33:37 <oerjan> @dice 1000d6
02:33:38 <lambdabot> 1000d6 => 3527
02:34:37 <zzo38> I have thought of a different system: referee rolls all the dice by hand; players don't, however some common text adventure abbreviations should be understood by the referee
02:34:56 <kallisti> zzo38: well yes I was planning to have options to allow the referee to roll everything
02:35:12 <kallisti> !roll with <character> <roll>
02:35:13 <kallisti> for example
02:35:30 <kallisti> I don't know if the complexity is warranted though, for the average tabletop gamer.
02:35:31 <zzo38> kallisti: No, I mean by hand. Like, not on the IRC.
02:35:58 <elliott> @dice 8d8
02:35:58 <lambdabot> 8d8 => 28
02:36:12 <zzo38> Do it slightly similar to a text adventure game. (Text adventure game are the closest kind of computer games to a role playing games, in my opinion)
02:37:10 <kallisti> zzo38: oh yes, I play that way as well.
02:42:31 <zzo38> Have a program that runs on the referee's computer, with a separate window and the IRC as well; it is connected to the IRC server so that someone can use PRIVMSG whatever :HELP and so on, and make file transfer of the data if wanted, in the computer data format, and then possibly to DVI to print as well
02:43:16 <zzo38> (Commands other than HELP and STATUS would not be accepted if you are not currently in a game session, I guess)
02:44:01 <zzo38> And everyone makes synchronized local copy of game data, with the main data on the referee's computer
02:44:19 <zzo38> While private data does not have to go into the program at all
02:45:57 <zzo38> I do have a channel in my IRC server for RPG sessions, and I might be able to add server scripts for a few of things you do in there, if I want to do so.
02:47:41 <kallisti> zzo38: I was going to make the entire thing public, but with access restrictions.
02:48:00 <kallisti> of course rolls can be done in private via privmsg
02:48:07 <kallisti> also entering stats
02:48:19 <kallisti> but a storyteller for a certain chronicle would have full access to every characters information.
02:49:00 <zzo38> Just do all commands by private; results can be copied to the channel if the game is in session. And then have data files access
02:49:05 * kallisti would also need to implement an authentication system to make sure that nicks are identified.
02:49:15 <kallisti> I haven't figured out how to do that with the bot framework I'm using in Perl.
02:49:21 <zzo38> kallisti: That is, for IRC servers that have that.
02:49:23 <kallisti> so I might have to rewrite the low-level bits.
02:49:58 <zzo38> And there are some differences between servers too.
02:50:44 * kallisti wishes he was still coding for that WoD MUD
02:50:50 <kallisti> I was going to do so many awesome things with their dice roller.
02:51:33 <kallisti> like having a huge weapon table to automatically handle damage rolls on firearms and melee weapons
02:52:09 <zzo38> The server scripting language for my IRC is called "Cthulhu.194" and this is an example file: http://sprunge.us/SNPD
02:52:11 <kallisti> you'd basically have to know even less about the system than you already did in order to play.
02:52:22 <kallisti> oh god what is this. lol
02:53:33 <Sgeo> I assume it's called Cthulhu for a reason
02:53:51 <zzo38> (The WEBIRC command was originally built in to the server program. I removed that feature and then added a script to implement it instead. A script can have multiple command names to access it; this is defined in the configuration file)
02:53:56 <kallisti> I... can't tell if it's postfix or prefix.
02:53:58 <kallisti> it seems to change.
02:54:27 <zzo38> Sgeo: Yes, it is because I implemented the SUMMON command that no other IRC has. And then someone in this channel mentioned SUMMON CTHULHU and they don't like that or whatever, so I called it that.
02:56:29 <zzo38> kallisti: Actually it is all prefix, although a few things act like they are postfix.
03:00:15 <zzo38> Here is another script (currently active in my server; however you do not have permission to access it): http://sprunge.us/RAjB
03:00:20 <Sgeo> The memory manager I wrote for class has O(n) access time :(
03:01:13 <elliott> pro
03:03:59 <kallisti> at first I thought creating a weapons table for a dice roller would be a huge pain, BUT
03:04:27 <kallisti> now that I've got a little better at scraping stuff with perl, I can just steal something online and convert it into a desired format.
03:05:16 <kallisti> instead of manually writing "Colt Anaconda difficulty 6, damage 6, rate 2, clip 6, range 35, Colt Detective Special difficulty 6, damage 4, rate 4, ..."
03:05:24 <kallisti> and then eventually killing myself
03:05:54 <zzo38> Just write the numbers separated by commas and a semicolon at the end of each record, is another way
03:05:58 <kallisti> as I go through common models of revolvers, shotguns, semi-automatic pistols, machine guns, machine pistols, rifles, assault rifles, battle rifles, ...
03:08:00 <kallisti> there's even weapon data on fun stuff like jackhammers, industrial drills, war hammers, tridents, chainsaws, and crossbows
03:08:15 <kallisti> because.. I'm totally going to bring a trident to a gun fight. that's my character's preference.
03:08:36 <zzo38> kallisti: O, OK. But then it is not a proper gun fight, isn't it?
03:08:41 <kallisti> guess not.
03:09:06 <kallisti> actually, if you're playing as vampires, the rules actually make melee weapons feasible, as bullets are nowhere near as effective against vampires.
03:10:35 <kallisti> so, vampire+chainsaw could be a viable option against a squishy mortal + small pistol
03:11:28 <Sgeo> Attention self: It is NOT ok for the starting address of each partition to be the number of the partition
03:11:58 <kallisti> ..
03:13:46 <Madoka-Kaname> Sgeo, why did you
03:14:17 <zzo38> Read the character data that I recorded for D&D games if you want to see some information about it in case it helps you to write a program to store these kind of data (mine is D&D 3.5 edition; but make the program acceptable for many systems including but not limited to this one)
03:14:19 <Sgeo> Madoka-Kaname, I didn't deliberately. It's a bug that I somehow didn't notice when testing yesterday
03:14:29 <zzo38> And if you have other questions about the system you can ask that too
03:14:53 <hagb4rd> zzo38!
03:15:13 <zzo38> hagb4rd: ?
03:15:18 <kallisti> zzo38: I'm going to work on shadowrun and world of darkness first as these are the systems I primarily enjoy, though it's difficult to find anyone who has an interest in those things.
03:15:20 <hagb4rd> what kind of "information"?
03:15:59 <kallisti> zzo38: basically each system will have mostly unique rules so I'm not going to generalize anything. Each dice roller will use its own special syntax.
03:16:20 <kallisti> each system will have different kinds of data in character tables, etc
03:16:30 <zzo38> kallisti: OK, do that first, then. But see what I have afterward, you might be able to make a more generalized system if necessary. I can also give a little bit of information about the Icosahedral RPG system since it uses a few special requirements for character data storage
03:16:33 <Sgeo> I had .Count() instead of .Sum()
03:16:53 <hagb4rd> hey may i see your ad&d work zzo38?
03:16:57 <kallisti> zzo38: well some of the library code will be generalized.
03:17:07 <zzo38> kallisti: Yes, that is what I was about to suggest.
03:17:17 <kallisti> zzo38: to avoid tedium. The idea is that you could specify what a character sheet contains and the "create character" command would just refer to that in order to generate a blank sheet.
03:17:41 <zzo38> hagb4rd: http://zzo38computer.cjb.net/dnd/recording/level20.tex
03:17:41 <kallisti> zzo38: and since it's all Perl I just let dynamic typing do its thing.
03:17:53 <hagb4rd> thank you
03:18:25 <zzo38> hagb4rd: It is a game story. If you want spells/feats/whatever I invented, I can show you those things too
03:18:57 <zzo38> kallisti: That was my idea with the Icochash program I wrote; however, I abandoned that and might later rewrite it, but not in PHP next time! Same thing with Icoruma, I might rewrite it in a faster programming language than PHP next time.
03:19:11 <kallisti> zzo38: why would you even consider PHP
03:19:23 <hagb4rd> yea.. actally yes.. i'm planning to write a irc-bot as a supporting device for pen & paper games over the net
03:19:23 <kallisti> zzo38: also why is performance important?
03:19:29 <kallisti> ...lol
03:19:35 <kallisti> SO MUCH CODE DUPLICATION
03:20:06 <hagb4rd> but the idea is you still need a game master and a story teller
03:20:12 <hagb4rd> and real roleplaying
03:20:14 <zzo38> kallisti: PHP is not very good but I have used it before. Next time I will use C or Haskell. And performance is good because when there are a large number of files it becomes slow
03:20:37 <kallisti> not if you just load everything into memory.
03:21:01 <hagb4rd> but zzo38 your link doesnt resolve in chrome
03:21:03 <zzo38> kallisti: Even if loading everything into memory, it is slow because it still has to load the files and parse them.
03:21:29 <hagb4rd> is tex like text in (la)tex?
03:21:30 <kallisti> at startup sure. or is this a web thing?
03:21:33 <zzo38> hagb4rd: Try adding "view-source:" to the front; that might work (I know it works in Mozilla; I don't know whether Chrome does or not)
03:21:48 <zzo38> kallisti: No, it is a standalone program, actually.
03:22:07 <kallisti> oh, well then parsing only adds to startup overhead.
03:22:11 <kallisti> and then everything is fine?
03:22:11 <hagb4rd> k lets do it that way then.. one need them all these days..*dumidum
03:22:12 <zzo38> hagb4rd: LaTeX is a format for TeX; this file is Plain TeX.
03:22:17 <hagb4rd> k
03:22:19 <kallisti> hagb4rd: what language do you want to use?
03:22:24 <Sgeo> kallisti, elliott update
03:22:38 <zzo38> kallisti: Yes but it must reload every time you modify the input files in order to recompile them, and that makes it very slow
03:22:51 <hagb4rd> php or c# or sth in betwenn.. maybe all.. -> web services
03:22:53 -!- Nisstyre has quit (Ping timeout: 244 seconds).
03:22:53 <hagb4rd> dunno
03:22:56 <kallisti> Sgeo: I feel this intermission is a bit rushed, but nonetheless awesome to read.
03:23:13 <kallisti> hagb4rd: I thought it was an IRC bot and not a web-thing?
03:23:27 <hagb4rd> irc just as endpoint
03:23:33 <hagb4rd> to players
03:23:48 <kallisti> hagb4rd: oh, okay.
03:23:54 <kallisti> that's not a bad approach actually.
03:24:16 <kallisti> I'm used to MUDs though so I have absolutely no problems with a marginally complicated command interface.
03:24:20 <kallisti> a web interface would be convenient though.
03:24:37 <hagb4rd> im really not that far into how to implement things..and implementation will be trivial at all
03:24:48 <zzo38> I think it should not be a web interface; it should be MUD. But possibly add a Java web interface as an alternative.
03:24:50 <kallisti> +not (?)
03:24:59 <zzo38> (Some systems, such as FICS, do this)
03:25:14 <hagb4rd> its kind of operation research
03:25:25 -!- Vorpal has quit (Ping timeout: 276 seconds).
03:25:27 <kallisti> commands simplify things for the implementation. Normal people will be scared though because OH MY GOD I HAVE TO LEARN SYNTAX.
03:25:54 -!- Nisstyre has joined.
03:26:06 <hagb4rd> it would be nice if players could extend the world its actors actions and stuff by writing some kind of easy readable xmlcode
03:26:08 <zzo38> kallisti: Then do what I specified; use MUD and then make a Java frontend as an alternative interface to use?
03:26:20 <zzo38> hagb4rd: It doesn't have to be XML, necessarily.
03:26:28 <hagb4rd> no it doesnt
03:26:32 <hagb4rd> as i mentioned
03:26:55 <kallisti> hagb4rd: are you familiar with MOO?
03:27:07 * Sgeo goes to make random access in his memory manager O(1)
03:27:23 <hagb4rd> im into designing the game itself.. + try to invent something revolutionary new and motivational
03:27:24 <zzo38> hagb4rd: Do you like the document I posted, now? Can you read it now? (You could just download it and open in a text editor, if necessary)
03:27:25 <kallisti> Sgeo: isn't that kind of redundant?
03:27:33 <kallisti> random access typically implies O(1) I thought.
03:27:34 <hagb4rd> yes exactly
03:27:35 <hagb4rd> :)
03:27:41 <kallisti> if it's O(n) or anything like that it's no longer random access.
03:28:08 <zzo38> I had the idea Icosahedral RPG too, is the new game; however, it is not a computer game.
03:28:45 * kallisti wishes MUDs were not quickly dying out
03:28:55 <kallisti> they are a good medium for multiplayer roleplaying games I feel.
03:29:17 <zzo38> Here are two examples of Icoruma input files: http://zzo38computer.cjb.net/icosahedral/icoruma/intro.irm http://zzo38computer.cjb.net/icosahedral/icoruma/spells.irm
03:29:21 <kallisti> I definitely think they could use a modern interface, while still retaining the text-based medium.
03:29:24 <calamari> there was a mud years ago which I believe still exists.. it had a huge map of middle earth and various towns and quests
03:29:29 <kallisti> but incorporating some mixed media.
03:29:41 <zzo38> kallisti: Then use MUDs if you like that way. I think just use the same protocol as the old way
03:29:52 <monqy> http://esoteric.voxelperfect.net/w/index.php?title=1_Chat_Line&curid=4885&diff=26035&oldid=26034
03:30:03 <kallisti> zzo38: I'm kind of talking about a separate project
03:30:06 <zzo38> You don't need to incorporate some mixed media, I think.
03:30:07 <calamari> anyways I almost got banned because I made a program that gave me a graphical map and could automatically navigate between towns
03:30:09 <kallisti> zzo38: my IRC bot is much simpler than a MUD
03:30:27 <monqy> oh already bene noted
03:30:29 <monqy> ;_;
03:30:37 <kallisti> calamari: those are fairly common in MUD clients. You don't even need to make one.
03:30:47 <calamari> kallisti: this was a long time ago
03:30:53 <zzo38> kallisti: OK. Still, I think a MUD should be made the same way as the old way, possibly support alternative front-ends if they would help but allow any MUD client to continue working
03:30:59 <kallisti> calamari: also it's generally impossible to detect if you put a reasonable delay between moves.
03:31:06 <zzo38> Even a simple dumb MUD client should be acceptable.
03:31:19 <calamari> kallisti: that's what I did lol
03:31:29 <hagb4rd> yes zzo38 at least i can grab it..will examine things later..im far behind tired
03:31:32 <kallisti> zzo38: I was thinking from the perspective of refreshing the community with new people.
03:31:33 <hagb4rd> need to sleep
03:31:57 <zzo38> kallisti: Well, add on new signals that are turned on when the client indicates support
03:32:00 <hagb4rd> far beyond
03:32:04 <kallisti> zzo38: though even with interface improvements most people are so attached to their big budget graphical games that they probably wouldn't adjust well to the text-based format.
03:32:10 <calamari> kallisti: it added features too, where I could have virtual parties that existed.. the game didn't handle them, but we could track each other on the map via special private messages
03:32:16 <kallisti> zzo38: yes that's generally how it would work.
03:32:24 <calamari> kallisti: was a lot of fun
03:33:00 <kallisti> zzo38: plenty of existing custom MUD clients are implemented over telnet and allow general clients.
03:33:04 <zzo38> But a dumb client supporting no signals other than text receive and command send, should still be acceptable. But also make the new clients with many new options and so on
03:33:42 <kallisti> one occasionaly problem is that many MUD clients are not actually legitimate telnet clients
03:33:54 <calamari> I implemented this as a modem program actually... had to dial up to my unix shell account in order to telnet
03:34:15 <calamari> in ms-dos of course, lol
03:34:17 <kallisti> but it's not a huge problem. You just send them something telnety and if they don't respond with something telnety then you just treat them like a basic socket and dump text (maybe with ANSI codes if the option is turned on since most clients support those)
03:34:48 <calamari> so it was actually layers of hacks.. oh well.. it worked and it was fun
03:34:49 <zzo38> kallisti: Well, yes, if it is a telnet then you should handle backspacing and those things at the server too.
03:34:55 -!- GreaseMonkey has quit (Quit: The Other Game).
03:34:57 <kallisti> zzo38: there are actually some "mud protocols" that exist that allow mixed media and the like, but they're generally bad and not well supported.
03:35:04 <zzo38> But if it is a dumb linemode client, then use that.
03:35:41 <calamari> kallisti: I remember back in the day that some bbses supported extra codes where if you had the right client you'd get a graphical gui
03:35:51 <calamari> it was lame overall tho
03:36:16 <calamari> just made it slower and didn't really add much since it was just showing the same info
03:36:52 <calamari> well let's see how xfce compares against lxde.. bbl
03:37:22 -!- calamari has quit (Quit: Leaving).
03:45:27 -!- calamari has joined.
03:52:43 <kallisti> I have two lists of words
03:53:16 <kallisti> A and B, split by newlines. what's the fastest way in bash to display the words in A that aren't in B?
03:57:27 <Sgeo> My memory manager is demented! Yay!
03:57:37 <Sgeo> Probably due to the hastily conceived "random access" idea
03:57:43 * kallisti found the solution to his problem as well: use perl instead of bash
03:57:51 <Sgeo> Or, well, poor implementation thereof
03:57:53 <quintopia> was gonna say that :p
03:58:11 <kallisti> quintopia: sometimes I wonder why I even try to use bash.
03:58:24 <kallisti> I get the misguided notion that I'm going to be faster with it if I get the hang of it.
03:58:27 <kallisti> but I'M NEVER GOING TO UNDERSTAND BASH
03:58:53 <oerjan> kallisti: probably bad elliott influence ;P
03:59:09 <elliott> wat
03:59:10 <hagb4rd> faster to write? or faster computed?
03:59:13 <kallisti> to write.
03:59:29 <kallisti> yeah I'm all about the BREAKNECK SPEED of my simple automated tasks.
03:59:55 <kallisti> I want them to be UNNOTICEABLE FRACTIONS OF SECONDS FASTER
04:00:09 <zzo38> Icoruma has a few features I would like to see in other programming languages, such as wildcard includes. I don't know of other programming languages that have that.
04:00:23 <hagb4rd> show
04:00:31 <elliott> oerjan: wat
04:01:53 <oerjan> elliott: see: certain HackEgo commands i rewrote
04:02:42 <elliott> >_>
04:03:58 <zzo38> The idea of what exactly a "mana" is in Icosahedral RPG could also be used in other games too if you want to.
04:06:59 <zzo38> (Among other things, it is a commutative monoid, with five primes.)
04:14:29 <zzo38> I think, in the XOR monoid, True is prime. Is it?
04:18:39 <Sgeo> .... I think, my professor's default fixed partition memory manager allocates an unneeded partition
04:33:27 <Sgeo> elliott, kallisti, update
04:33:46 <elliott> oh.
04:35:53 -!- calamari has quit (Quit: Leaving).
04:47:40 -!- Jafet has joined.
05:12:38 -!- hagb4rd has quit (Quit: Nettalk6 - www.ntalk.de).
05:13:06 -!- oerjan has quit (Quit: Good night).
05:14:25 -!- pikhq_ has joined.
05:15:01 -!- pikhq has quit (Ping timeout: 268 seconds).
05:33:10 <zzo38> What is the property of applicatives for which this applies: () <$ x = pure () for any x of this applicative type
05:34:24 <elliott> zzo38: sounds like the equivalent of commutative monads
05:34:40 <elliott> possibly equivalent to (f <$> a <*> b) = (flip f <$> b <*> a), I think
05:37:02 <zzo38> O, is that what commutative monads means? Your condition seems to me like commutative applicative?
05:37:46 -!- Jafet has quit (Quit: Leaving.).
05:38:05 <elliott> something like that, yes :P
05:38:15 <elliott> commutative monad is stronger i think
05:38:22 <elliott> a >>= \x -> b >>= \y -> f x y = b >>= \y -> a >>= \x -> f x y
05:38:23 <elliott> apparently
05:38:31 <elliott> oh
05:38:35 <elliott> do { a <- mb; b <- mb; f a b }
05:38:35 <elliott> =
05:38:39 <elliott> do { b <- mb; a <- ma; f a b }
05:38:43 <elliott> that's easier to read :P
05:41:08 <zzo38> Is that similar but after join?
05:43:03 <elliott> right
05:53:57 <kallisti> `style
05:54:00 <HackEgo> ​/home/hackbot/hackbot.hg/multibot_cmds/lib/limits: line 5: exec: style: not found
05:54:01 <kallisti> ^style
05:54:01 <fungot> Available: agora* alice c64 ct darwin discworld europarl ff7 fisher fungot homestuck ic irc iwcs jargon lovecraft nethack pa qwantz sms speeches ss wp youtube
05:54:04 <kallisti> ^celebrate
05:54:04 <fungot> \o| |o| |o/ \m/ \m/ |o/ \o/ \o| \m/ \m/ \o| |o| |o/
05:54:05 <myndzi> | | | `\o/´ | | | `\o/´ | | |
05:54:05 <myndzi> |\ /| /| | |\ /`\ /| | /< >\ /'\
05:54:05 <myndzi> (_|¯´¯|_) /´\
05:54:05 <myndzi> (_| |_)
06:50:51 -!- Klisz has quit (Quit: You are now graced with my absence.).
06:59:09 <itidus21> so can a single string draw the edge of a mobius strip?
06:59:19 <itidus21> it seems kind of wild to imagine
06:59:44 <itidus21> i guess it just has to float in space a bit
07:00:42 <Sgeo> elliott, did you intend to do mb twice in your first part of the equation?
07:00:56 <elliott> no
07:01:11 <elliott> x <- mx was the intent
07:01:11 <elliott> for all x
07:01:33 <Sgeo> I should go food
07:02:16 -!- MDude has changed nick to MSleep.
07:05:42 -!- sebbu2 has joined.
07:05:42 -!- sebbu2 has quit (Changing host).
07:05:42 -!- sebbu2 has joined.
07:06:36 -!- sebbu has quit (Ping timeout: 240 seconds).
07:08:37 <itidus21> disregard
07:08:53 <itidus21> especially you, over-zealous log-reader
07:09:00 <elliott> hi
07:09:51 <itidus21> i watched the tintin movie today
07:17:58 <zzo38> Is this a proper monad? newtype ReadthisT f x = ReadthisT { runReadthisT :: f () -> f x }; lift = ReadthisT . const; fmap f = ReadthisT . (fmap f .) . runReadthisT; join (ReadthisT x) = ReadthisT (\y -> x y >>= ($ (() <$ (y >> x y))) . runReadthisT);
07:31:58 -!- zzo38 has quit (Remote host closed the connection).
07:38:41 <kallisti> > let collatz = takeWhile (/=1) . iterate c; c n = if even n then n `div` 2 else 3*n+1 in collatz 150
07:38:42 <lambdabot> [150,75,226,113,340,170,85,256,128,64,32,16,8,4,2]
07:40:11 <copumpkin> > map (succ . head . tail) . iterate (drop 2) . map length . group . fix $ show
07:40:16 <lambdabot> mueval-core: Time limit exceeded
07:40:22 <copumpkin> > take 5 . map (succ . head . tail) . iterate (drop 2) . map length . group . fix $ show
07:40:25 <lambdabot> [2,4,8,16,32]
07:40:32 <kallisti> congrats
07:40:37 <copumpkin> thank you
07:40:55 <copumpkin> I do think it's the best way to compute the powers of 2
07:41:10 <kallisti> no obviously my powerset construction is the best. :P
07:41:18 <kallisti> lengths of powersets.
07:41:34 <kallisti> though really that's probably way better because there's a fix and I have no clue what it's doing as a result.
07:41:42 <kallisti> because fix still kind of baffles me sometimes.
07:41:49 <copumpkin> yeah, I'm fixing show
07:41:53 <copumpkin> :P
07:42:07 <kallisti> so infinite string of... something.
07:42:11 <copumpkin> > fix show
07:42:12 <lambdabot> "\"\\\"\\\\\\\"\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"\\\\\\\\\\\\...
07:42:15 <kallisti> ah right
07:42:16 <copumpkin> :P
07:42:17 <kallisti> quotes
07:45:36 <kallisti> > let twood = length . filterM (const [True, False]) . flip replicate undefined in map twood [1..10]
07:45:37 <lambdabot> [2,4,8,16,32,64,128,256,512,1024]
07:46:39 <kallisti> copumpkin: you can't deny its elegance.
07:46:51 <copumpkin> :)
07:47:00 <copumpkin> yeah, but look how much faster yours is than mine
07:47:09 <kallisti> an added benefit!
07:47:13 <copumpkin> I can't even get up to 10
07:47:14 <elliott> avoid speed at all costs
07:47:18 <elliott> haskell motto
07:47:19 <copumpkin> before lambdabot craps out on me
07:47:22 <copumpkin> elliott: exactly
07:47:33 <elliott> copumpkin: well what can we expect from an agda programmer like you
07:47:36 <elliott> OHHHHHHHHHHHHHHHHHHHHHHHHHBURGNRJKGNR
07:47:46 <copumpkin> you want a geometric series? you can't expect it to be fast
07:47:51 <elliott> once this agda guy tried to burn me
07:47:52 <elliott> but
07:47:58 <kallisti> copumpkin: what's the runtime on mine... O(2^n)???
07:48:02 * copumpkin burns elliott
07:48:02 <kallisti> I think that's forgetting something
07:48:04 <elliott> his irc client froze up calculating the natural number representing his irc line
07:48:14 <elliott> because he tried to type more than 10 characters
07:48:14 <copumpkin> kallisti: nah, that should be it
07:48:15 <elliott> the joke is
07:48:15 <elliott> haha
07:48:16 <elliott> agda is slow
07:48:25 <copumpkin> orly?
07:48:26 <kallisti> copumpkin: see look the runtime is the same as the function. how elegant.
07:48:50 <copumpkin> > take 10 . map (succ . head . tail) . iterate (drop 2) . map length . group . fix $ show
07:48:51 <lambdabot> [2,4,8,16,32,64,128,256,512,1024]
07:48:55 <copumpkin> oh I can get to 10
07:49:00 <copumpkin> they're probably the same time complexity actually
07:49:46 <kallisti> > let f = length . flip replicate undefined in map f [1..]
07:49:48 <lambdabot> [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28...
07:49:59 <kallisti> oh look! a linear function that runs in linear time
07:50:00 <kallisti> YESSSSSSS
07:50:41 <elliott> i like functions that describe their own complexity
07:50:42 <elliott> like fib
07:50:58 <kallisti> I think that may be a characteristic of any function that uses the list representation of natural numbers?
07:51:05 <copumpkin> unary
07:52:15 <kallisti> no nevermind what am I saying.
07:53:00 <elliott> wat
07:53:02 <elliott> oops
07:53:03 <elliott> wrong window
07:54:54 <Sgeo> o.O
07:55:00 <elliott> what
07:55:11 <Sgeo> The thing where numbers came out of fix show
07:55:12 <monqy> hi
07:55:19 <elliott> > fix show
07:55:20 <lambdabot> "\"\\\"\\\\\\\"\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"\\\\\\\\\\\\...
07:55:21 <elliott> numbers
07:55:55 <monqy> 1 3 7 15
07:57:36 <Sgeo> I didn't see the > fix show, just copumpkin's take 10 . map etc thing
07:59:36 <Sgeo> Why am I still reading Station V3
08:00:03 <kallisti> because you have a history of reading things that are terrible
08:00:06 <monqy> whats that is it good hi sgeo
08:00:10 <kallisti> like that cliparty universe
08:00:18 <monqy> i love clip art
08:00:19 <Sgeo> monqy, even I think it's stale.
08:00:27 <Sgeo> (not the cliparty universe. Station V3)
08:00:48 <elliott> http://www.stationv3.com/comics/20111213sv3.gif
08:00:49 <elliott> hilarious
08:01:20 <kallisti> ..
08:01:24 <monqy> i dont
08:01:25 <monqy> get it
08:01:40 <monqy> i vaguely see how it might be gotten
08:01:41 <monqy> but
08:01:42 <monqy> nope
08:01:47 <elliott> http://www.stationv3.com/comics/20111212sv3.gif
08:01:49 <elliott> hilarious
08:01:58 <elliott> http://www.stationv3.com/comics/20111211sv3.gif
08:01:59 <elliott> hilarious
08:02:11 <kallisti> ......................
08:02:23 <elliott> these might be the least funny gifs i have viewed with my eyes in like
08:02:24 <elliott> years
08:02:24 <monqy> huh
08:02:28 <elliott> it's like
08:02:32 <elliott> a picture of wooden flooring
08:02:38 <elliott> it elicits absolutely no reaction
08:02:39 <elliott> at all
08:02:55 <Sgeo> There are some funny ones
08:02:56 * kallisti actually laughed because of how terribly impossibly bad it was.
08:03:01 <Sgeo> They're all in the past
08:03:07 <monqy> i laughed, possibly for the same reason as kallisti
08:03:41 <elliott> Sgeo: whats the worst webcomic
08:03:42 <elliott> in your
08:03:43 <elliott> opinion
08:03:52 <monqy> oh man there are so many bad webcomics i dont even know about
08:04:04 <monqy> excitement
08:04:15 <Sgeo> elliott, is it allowed to be in the Station V3 family?
08:04:21 <elliott> there's a family
08:04:27 <Sgeo> Yes, there is a family.
08:04:31 <elliott> why
08:05:03 <monqy> is it a happy family
08:05:09 <monqy> are they frends
08:05:21 <Sgeo> http://silenceinthedarknessonq16.comicostrich.com/
08:05:34 <monqy> this is a good comic
08:05:50 <elliott> silence in the darkness on q16
08:05:57 <Sgeo> Start at the beginning, it's actually not that bad
08:05:58 <elliott> http://silenceinthedarknessonq16.comicostrich.com/comic.php?cdate=20111211
08:05:59 <elliott> wow
08:06:00 <elliott> this is
08:06:03 <elliott> are they all like this
08:06:11 <monqy> this is amazing
08:06:16 <elliott> Sgeo: i went to the beginning
08:06:18 <elliott> it's still bad
08:06:22 <elliott> please advise
08:06:38 <elliott> Sgeo: how old is
08:06:39 <elliott> the author of this
08:06:43 <elliott> they've spent uh
08:06:47 <elliott> 8 years
08:06:47 <monqy> http://z7.comicostrich.com/
08:06:48 <elliott> of their life
08:06:49 <elliott> writing these things
08:06:57 <elliott> so they must be like
08:07:05 <elliott> i don't even know
08:07:12 <Sgeo> Linton (on V3) is humorous
08:07:31 <monqy> sorry sgeo i do not trust your opinions
08:07:48 <monqy> you read v3
08:07:54 <elliott> http://forum.comicostrich.com/viewtopic.php?t=418&sid=ceaf354a4066a147d94ca3c93d76ce27
08:08:00 <elliott> i dont know what htis is but why does it have 21 pages
08:08:14 <Sgeo> http://www.stationv3.com/d/20030616.html
08:08:23 * elliott reads
08:08:23 <kallisti> elliott: what would happen if randall munroe and andrew hussie met
08:08:25 <elliott> today's dinosaur comic
08:08:26 <elliott> it is therapy
08:08:30 <elliott> for reading station v3
08:08:31 <elliott> you are all
08:08:33 <elliott> welcome to join me
08:08:39 <kallisti> dinosaur comic is bad too
08:08:42 <Sgeo> The rumormongers are the blue things
08:08:43 <Sgeo> Usually
08:08:47 <monqy> kallisti....................
08:08:49 <elliott> monqy: look at kallisti's wrong opinions
08:08:52 <elliott> look at him just
08:08:53 <elliott> casually having them
08:09:18 <kallisti> elliott: I think dinosaur comics is too fast-paced. The scenery changes too rapidly.
08:09:34 <kallisti> it's hard to tell what's going on.
08:09:35 <elliott> your jokes cannot
08:09:36 <elliott> make you a good person
08:10:04 <monqy> beyond redemption
08:10:10 <monqy> the kallisti way of life
08:10:25 <Sgeo> http://www.stationv3.com/d/20050319.html
08:10:30 <Sgeo> That one's almost good
08:10:39 <Sgeo> Actually, I'm laughing at these. I'm finding them funny
08:10:43 <elliott> n
08:10:43 <elliott> o
08:10:45 <monqy> no sgeo ni
08:10:45 <elliott> its not
08:10:46 <elliott> almost good
08:10:48 <monqy> no, I mean
08:10:48 <elliott> its not even
08:10:59 <elliott> Sgeo
08:11:00 <elliott> its not
08:11:01 <elliott> healthy
08:11:03 <monqy> not even remotely anywhere near something resembling good
08:11:03 <elliott> to laugh at this stuff
08:11:09 <elliott> i accept
08:11:10 <elliott> that tastes
08:11:11 <elliott> are subjective
08:11:15 <elliott> but i think you are permanently
08:11:17 <elliott> damaging
08:11:19 <elliott> your soul
08:11:35 <Sgeo> It gave me a soul?!?
08:11:36 <Sgeo> Yay!
08:11:40 <monqy> yay
08:11:44 <elliott> n;o
08:11:53 <kallisti> elliott: though in its defense dinosaur comics makes excellent use of foreshadowing
08:12:07 <kallisti> that moment when you realize the previous panel hinted at the events of the next
08:12:09 <elliott> I wonder if T-Rex canonically crushes a new house every single day.
08:12:14 <kallisti> somewhat rewarding.
08:12:51 <monqy> the many joys of dinosaur comics
08:12:52 <monqy> the many joys of life
08:13:04 <Sgeo> http://www.stationv3.com/d/20050328.html
08:13:42 <monqy> actually
08:13:47 <monqy> these comics remind me of you, sgeo
08:13:55 <Sgeo> o.O
08:14:06 <kallisti> elliott: well, it's either that or it continually goes back in time
08:14:08 <monqy> they have your personality
08:14:10 <kallisti> or it's a glimpse of different universes.
08:14:10 <monqy> or perhaps
08:14:12 <monqy> you have theirs
08:14:29 <monqy> have you considered you and stationv3 may be soulmates
08:14:44 <elliott> kallisti: there's chronology
08:14:54 <elliott> monqy: yeah these comics are very Sgeo
08:15:05 <kallisti> elliott: so then... he has to crush a house every time.
08:15:11 <kallisti> CONSISTENCY
08:15:21 <elliott> kallisti: well there's no conclusive PROOF he crushes the house
08:15:28 <kallisti> true.
08:15:38 <elliott> http://www.qwantz.com/index.php?comic=1
08:15:43 <elliott> here we see that he doesn't stomp on the girl at least in comic 1
08:15:43 <elliott> so
08:15:47 <kallisti> elliott: WHY DON'T YOU SAY THAT TO PAST ELLIOT INSTEAD ASSHOLE
08:15:53 <Sgeo> http://www.stationv3.com/d/20050415.html
08:15:58 <elliott> *TT
08:16:32 <elliott> Sgeo: thats
08:16:33 <elliott> not funny
08:16:40 <elliott> i am TRYING to laugh
08:17:28 <kallisti> is there even a joke with these?
08:17:30 <kallisti> I can't tell.
08:17:40 <monqy> i think that one was supposed to have a joke, at least
08:17:47 <kallisti> can you explain it to me?
08:17:51 <elliott> Sgeo: was there a station v2
08:17:52 <elliott> kallisti: the station
08:17:53 <elliott> isn't safe
08:17:54 <elliott> that's the joke
08:18:01 <kallisti> ..what?
08:18:04 <monqy> yes
08:18:14 <elliott> http://www.stationv3.com/d/20030506.html
08:18:16 <elliott> station v3
08:18:17 <elliott> comic 1
08:18:37 <elliott> http://www.stationv3.com/links.html
08:18:40 <elliott> list of comics to avoid reading
08:18:44 <elliott> http://ebb.comicostrich.com/
08:18:45 <monqy> not even comic 1
08:18:49 <Sgeo> Is that not like judging Homestuck by 1901?
08:18:50 <elliott> OH YES ANOTHER SPINOFF FUCK YES GOD YES!
08:18:52 <monqy> unless it is
08:19:11 <kallisti> elliott: dude you're going to have to explain all of the jokes to all of these.
08:19:27 <Sgeo> There's plot.
08:19:28 <elliott> Sgeo: yes, if homestuck was a terrible gag-a-day strip with a dozen spinoffs and also no because we've also looked at like fifty other ones by now and they are all equally bad
08:19:28 * kallisti iIT IS YOUR DUTY
08:19:30 <Sgeo> It's plotlines
08:19:42 <elliott> oh Sgeo's using dots at the end of sentences i think we're disliking station v3 a little too intensely
08:19:49 <monqy> gripping station v3 plotlines
08:20:00 <monqy> with enchanting station v3 characters
08:20:01 <elliott> station v3 plotline one: station... v4???
08:20:05 <Sgeo> Two characters who were previously mute become able to talk
08:20:14 <monqy> enchanting
08:20:16 <Sgeo> Because all of reality changed.
08:20:17 <monqy> gripping
08:20:19 <elliott> i'm ehcanthed
08:20:23 <monqy> are you gripped
08:20:26 <elliott> im
08:20:28 <monqy> i'm GRIPPED
08:20:31 <elliott> so gripped i dont think ill ever be able to be ungripped
08:20:33 <elliott> permanent grippeling
08:20:34 <kallisti> YES IT GRIPED ME
08:20:39 <monqy> gripe
08:20:41 <elliott> we are all
08:20:44 <elliott> gripped together
08:20:51 <kallisti> monqy: gripe with me
08:20:51 <elliott> http://forum.comicostrich.com/viewtopic.php?t=11&sid=ceaf354a4066a147d94ca3c93d76ce27
08:20:55 <monqy> station v3 frendship
08:21:15 <kallisti> monqy: not the only ship in station v3
08:21:19 <kallisti> -punchline-
08:21:29 <elliott> why are these forums active!!!
08:21:34 <elliott> why
08:21:40 <Sgeo> Who's Prentice?
08:21:47 <Sgeo> *Prentis
08:22:00 <elliott> are
08:22:03 <elliott> you expecting me to know the answer to this
08:22:58 <monqy> elliott resident station v3 expert
08:23:05 <monqy> in mere minutes he has surpassed even sgeo
08:23:11 <elliott> the robot guy
08:23:12 <elliott> is called floyed
08:23:17 <Sgeo> Floyd
08:23:21 <elliott> floyde
08:23:25 <monqy> I think there are two goerges???
08:23:35 <Sgeo> Linton is the idiot security officer
08:23:40 <Sgeo> And same species as the pirates
08:23:41 <monqy> oh
08:23:43 <elliott> is there nonidiots
08:23:43 <monqy> that makes sense
08:23:49 <elliott> goerg
08:24:21 <monqy> "station v3" -- georg
08:24:25 -!- Ngevd has joined.
08:24:28 <Sgeo> The blue things on the planet are called rumormongers, and for some reason XChat thinks that rumormongers is spelled correctly.
08:24:37 <monqy> hi
08:24:39 <Ngevd> Hello!
08:24:41 <Sgeo> I do not recall adding rumormongers to the dictionary
08:24:56 <elliott> you realise
08:25:00 <elliott> that rumormonger
08:25:01 <elliott> is a word
08:25:05 <elliott> outside of this incredibly shitty comic
08:25:15 <Sgeo> Now I do (seconds before you told me)
08:25:32 <monqy> knowledge is power
08:25:41 <elliott> -keanu reves
08:25:48 <Sgeo> France is a meme.
08:25:55 <monqy> hysterical
08:28:33 * Sgeo looks for good Linton comics
08:28:38 <monqy> good luck
08:29:26 <Sgeo> http://stationv3.com/d/20071009.html
08:29:47 <monqy> oh I see
08:29:50 <monqy> it's funny because
08:29:51 <monqy> he
08:29:53 <monqy> uh
08:30:16 <monqy> sgeo i think you got the wrong comic
08:30:17 <monqy> this isn't good
08:30:18 <monqy> this is crap
08:30:27 <shachaf> People in this channel really enjoy things that they don't enjoy, don't they.
08:30:36 <monqy> yes
08:30:39 <monqy> at least I do
08:30:48 * Sgeo is laughing insanely right now
08:31:38 <Sgeo> Hmm, this (not what I linked) was a good arc
08:34:25 <elliott> no
08:34:26 <elliott> it wasn't
08:34:51 -!- elliott has quit (Quit: i cant handle any more station v3).
08:34:55 <monqy> rip
08:35:52 <itidus21> yeah thats a pretty awful comic strip
08:36:04 <itidus21> i mean that particular one... 2007 10 09
08:36:10 <itidus21> i dont mean they're all necessarily bad
08:36:33 <monqy> incidentally, they are
08:37:19 <itidus21> http://www.stationv3.com/d/20071011.html
08:38:26 <itidus21> thats really devastatingly bad..
08:38:35 <monqy> station v3 quality
08:38:39 <itidus21> i am not sure if it's just the mood i'm in
08:39:39 <Sgeo> http://www.stationv3.com/d/20080901.html
08:40:12 <monqy> thanks
08:40:34 <itidus21> maybe they make sense if you read a whole bunch of them.. like very context-dependant
08:40:58 <Sgeo> They do, I think
08:41:27 <Sgeo> The plot gets repetitive though. How many times can you destroy the universe and have it be restored from backup?
08:41:42 <monqy> (canned laughter)
08:42:23 <Sgeo> http://www.stationv3.com/d/20080908.html
08:44:39 <kallisti> NO. MORE.
08:44:42 <kallisti> MUST NOT CLICK
08:44:47 <monqy> no it's great
08:44:56 -!- Ngevd has quit (Ping timeout: 240 seconds).
08:45:04 <monqy> rip
08:45:22 <itidus21> it has a way about it
08:45:39 <monqy> how many more of us will it kill
08:45:57 <itidus21> I heard a rumor that it won't kill any more of us.
08:46:14 <monqy> have you considered you may already be dead
08:46:29 <itidus21> Not until you asked.
08:47:28 <itidus21> I mean, actually, yes... i have been led into some superstitious beliefs on that subject
08:50:50 <Sgeo> http://stationv3.com/d/20050809.html
08:51:21 <monqy> great
08:52:05 <Sgeo> http://stationv3.com/d/20040709.html
08:52:24 <monqy> how are you finding these
08:52:53 <Sgeo> OhNoRobot
08:53:50 <Sgeo> http://stationv3.com/d/20040402.html
08:54:40 <monqy> why are you finding these
08:54:45 -!- elliott has joined.
08:54:59 <elliott> pikhq_: OK, I have a really stupid build system idea, you get to tell me why it doesn't work.
08:55:05 <monqy> hi
08:55:33 * Sgeo failed to see elliott's quit message until now
08:55:44 <Sgeo> So, what you missed: More Station V3
08:55:51 <elliott> awesome.
08:56:00 <monqy> it was great stuff
08:56:22 <Sgeo> Maybe I'm choosing badly, and just selecting random ones will have higher probability of good comics
08:56:54 <Sgeo> :t randomR
08:56:56 <lambdabot> forall a g. (Random a, RandomGen g) => (a, a) -> g -> (a, g)
08:56:57 <elliott> Sgeo
08:56:59 <elliott> there is no possible way
08:57:01 <elliott> this comic could be salvaged
08:57:27 <Sgeo> Homestuck might suck if someone tried to present random panels at you
08:57:52 <Sgeo> Who am I kidding. The reason I brought up Station V3 in the first place is that I had no idea why I kept it in my rss reader
08:57:53 <elliott> not this badly Sgeo
08:57:55 <elliott> not this badly
08:58:20 <Sgeo> It used to be good
08:58:23 <elliott> like homestuck's first 100 panels over and over again would be about six billion times better than a single station v3 strip
08:58:28 <kallisti> something to clense your mind from station v3http://www.fanfiction.net/s/5937032/1/Grab_a_boob_day
08:58:30 <elliott> ok i will
08:58:32 <elliott> take back my opinions Sgeo
08:58:36 <elliott> if you can link me one (1) good strip
08:58:59 <Sgeo> monqy, do the Linton strips I linked count as good?
08:59:29 <monqy> no
08:59:36 <itidus21> Sgeo: i have decided i like them.
08:59:47 <elliott> oh
08:59:50 <elliott> um
08:59:51 <elliott> why
09:02:54 <elliott> why itidus21 ;_;
09:03:35 <monqy> station v3, the worst existential crisis yet
09:03:36 <itidus21> i suppose i could like any graphic which is non-static combined with any grammatical piece of text
09:04:13 <elliott> but
09:04:14 <elliott> they're static
09:04:17 <elliott> theyre not animated....
09:04:21 <itidus21> i mean uhh
09:04:45 <itidus21> any graphic which is a non-random signal
09:04:46 <monqy> it's hard to tell with a comic as alive, endearing, enthralling, graipping, enchanting, as station v3
09:04:57 <elliott> so garipping
09:05:12 <shachaf> Ugh, I want to set a breakpoint in gdb for an address that doesn't exist until some point in runtime.
09:05:14 <itidus21> i meant as in a tv-static
09:05:22 <shachaf> How am I do that.
09:05:35 <elliott> 08:41:42: <monqy> (canned laughter)
09:05:37 <itidus21> i don't even know what static means in relation to a tv channel with an unrecognized signal
09:05:39 <elliott> monqy: god i wish i could can laughter
09:05:39 <shachaf> elliott: Aren't you a gdb expert?
09:05:54 <elliott> shachaf: My gdb knowledge is set args ... \n start \n cont \n bt \n quit
09:06:11 <shachaf> elliott: Did you know gdb --args ./foo bar baz?
09:06:20 <elliott> Yes, because Deewiant told me, but then I forgot it again./
09:06:41 * shachaf is trying to debug hs-plugins code.
09:07:04 <shachaf> At least gdb disables ASLR.
09:07:26 <Sgeo> http://www.stationv3.com/d/20060204.html
09:07:33 <shachaf> So the address is deterministic (or seems to be), but I can't set a breakpoint at it straight away, because the code is not loaded yet.
09:07:57 <elliott> http://www.stationv3.com/d/20040710.html
09:07:58 <elliott> hilarious
09:08:09 <elliott> Sgeo: is this you trying to link a good one
09:08:49 <Sgeo> All the comic's I've linked are attempts to find a good one
09:08:52 <Sgeo> comics
09:08:53 <elliott> wow
09:08:54 <elliott> uh
09:08:56 <elliott> good
09:08:57 <elliott> good work
09:09:23 <monqy> two thumbs up
09:09:31 <Sgeo> Maybe I suck at finding
09:09:34 <monqy> I'd give you more, but two is all I have.
09:10:56 <monqy> speaking of thumbs and comics, I made a comic a real long time ago
09:11:25 <elliott> is it better than station v3
09:11:30 <monqy> i think so, yes
09:11:30 <elliott> i could use a better comic than station v3 right now
09:11:59 <monqy> http://dl.dropbox.com/u/13786158/diner.png
09:12:16 <elliott> better than station v3
09:12:18 <elliott> i like the peppers
09:12:18 <Sgeo> elliott, Station Z7?
09:12:27 <elliott> Sgeo: :(
09:13:22 <elliott> monqy: are they peppers in panel 1 and 2 and you just can't see them
09:13:28 <elliott> or did he become ppeppeperp
09:13:30 <elliott> or is that smily
09:13:31 <elliott> unrelated
09:13:32 <monqy> everything is pepper
09:13:33 <elliott> to other characters
09:13:34 <elliott> ok
09:13:38 * Sgeo looks at the Station V3 encyclopedia
09:13:49 <monqy> is there a
09:13:50 <monqy> is that
09:13:51 <monqy> a
09:13:51 <monqy> thing
09:14:03 <Sgeo> http://www.stationv3.com/wiki/index.php?title=Main_Page
09:14:06 <Sgeo> Not much of a thing
09:14:14 <elliott> it's not spammed
09:14:16 <elliott> why is our wiki spammed
09:14:18 <elliott> instead of this
09:14:27 <Sgeo> http://www.stationv3.com/wiki/index.php?title=Special:Allpages
09:14:27 <elliott> why are there edits this month
09:15:32 <Sgeo> elliott, SBAHJ apparently updated
09:15:48 <monqy> wonderful
09:16:08 <elliott> better than station v3
09:16:36 <monqy> "phhpppbbbbbthb" - better than station v3
09:16:49 <monqy> ":'(" - station v3
09:17:20 <monqy> "not sorry" - better than station v3
09:17:56 <monqy> sgeo are nay of these station v3 wiki pages good
09:18:01 <Sgeo> I don
09:18:10 <monqy> there are so many choices I don't know which to pick
09:18:11 <Sgeo> I don't know, I didn't even know there was a wiki until now
09:18:34 <elliott> http://www.stationv3.com/wiki/index.php?title=Station_V3_%28comic_strip%29
09:18:52 <elliott> http://www.stationv3.com/wiki/index.php?title=Tom_Truszkowski
09:18:58 <elliott> oh, he's a programmer
09:19:00 <elliott> That Explains Things
09:19:24 <kallisti> elliott: I thought all webcomic authors could program.
09:19:39 <kallisti> it's like a requirement.
09:19:53 <elliott> Station Q16 is the main station in the comic strip Silence in the Darkness on Q16 The station has had a power failure sometime before the first strip and is still in the dark. This may be because the station only exists within a rumormongers mind.
09:19:54 <monqy> if he has disabilitys, is it bad to make fun of stations v3.....
09:20:12 <elliott> his disability: writing station v3
09:20:19 <monqy> :'(
09:21:53 <elliott> monqy what does the reverse text say
09:21:54 <elliott> in your comic
09:21:55 <elliott> im too lazy
09:22:11 <monqy> doug's "dougalicious" diner
09:22:12 <itidus21> doug's dougilicious
09:22:14 <monqy> "it's dougalicious"
09:22:48 <elliott> it's dougalicious in my heart
09:23:07 <itidus21> im worse at writing dialogue than tom t.
09:23:27 <monqy> :(
09:23:38 <itidus21> snickers
09:26:11 <itidus21> . o O ( "hello snail" "hello tree" "how are you doing today?" "oh just fine. what about you, how are you doing?" "i am also fine" "i frankly harbor apathetic feelings towards your current state of well being" "is that so?" "it is so" "well ok then" "good" )
09:26:27 <elliott> better than station v3
09:26:44 <itidus21> harbor -- tree -- arbor is an accidental pun
09:30:26 <monqy> im inspired
09:38:59 <Sgeo> Station V3 + SBaHJ?
09:39:13 <monqy> hi
09:39:52 <elliott> hi
09:42:48 <Sgeo> Night
09:42:51 <elliott> hi
09:42:54 <monqy> hi
09:43:05 <Sgeo> Station Zzz...
09:43:11 <monqy> no
09:45:09 <elliott> station bad
09:50:50 -!- monqy has quit (Quit: hello).
10:08:44 -!- kmc has joined.
10:18:00 -!- Jafet has joined.
10:51:18 -!- Jafet has quit (Quit: Leaving.).
10:55:40 -!- ais523 has joined.
11:18:39 <ais523> md5 is sufficient for avoiding random collisions on non-malicious input, right?
11:19:14 <ais523> also, and relatedly, are VHDL identifiers allowed to be long enough to fit an entire md5 hash inside them?
11:21:49 <elliott> ais523: yes, but why not go for SHA-1?
11:22:01 <elliott> 'tis only 32 more bits
11:22:13 <ais523> md5's in the OCaml standard libraries, SHA1 isn't
11:22:31 <elliott> :/
11:22:34 <elliott> get a better standard library
11:23:02 <elliott> ais523: googling doesn't show up any obvious limits on identifier name
11:23:05 <elliott> s
11:23:23 <ais523> good
11:23:26 <elliott> ais523: you can pack it into base 62, at least
11:23:50 <elliott> so it'll be 28 at most (27 + 1 byte prefix to avoid digit as first character)
11:24:13 <elliott> ais523: wtf, you're not allowed two underlines in a row in a vhdl identifier
11:24:14 <ais523> yep, but I don't really want to if there's no reason
11:24:18 <elliott> and they can't end with underlines
11:24:26 <elliott> (or start, for that matter)
11:24:28 <ais523> seriously? that is an important limitation for my project
11:24:28 <elliott> err
11:24:31 <elliott> s/underline/underscore/g
11:24:33 <ais523> I'll have to escape them, in that case
11:24:41 <elliott> ais523: it is? wtf are you doing
11:24:46 <elliott> also "But VHDL also supports extended identifiers, enclosed by backslashes, which can contain any graphic ISO Latin-1 character (including backslashes if doubled)."
11:25:07 <ais523> /Latin-1/?
11:25:12 <ais523> that's, umm, I don't get it
11:25:17 <elliott> ais523: "any byte"
11:25:26 <elliott> there, I got it for you :)
11:25:29 <elliott> i.e.
11:25:36 <ais523> nope, 32 of the possible values of a byte aren't graphic in Latin-1
11:25:39 <elliott> if (identc == '\\') append(identifier, getchar())
11:25:41 <elliott> ais523: oh, hmm
11:25:43 <elliott> extended_indentifier ::= \graphic_character { graphic_character } \
11:25:49 <elliott> I guess VHDL is just defined in terms of Latin-1 because old
11:26:02 <elliott> and they presumably think control characters in identifiers is ridiculous
11:26:18 <ais523> well, it is ridiculous
11:26:28 <ais523> but then, so is much of VHDL, I guess
11:26:54 <ais523> anyway, what I'm trying to do, is to translate variable names from a source program into variable names in the resulting VHDL, whilst mangling them as little as possible
11:27:01 <ais523> so it's easy to see which corresponds to which
11:27:26 <ais523> and the source language doesn't have any arbitrary rules about double underscores
11:27:38 <elliott> ais523: have you considered implementing your module layer in not vhdl...
11:27:55 <elliott> define some intermediate language, and have the linker translate it to vhdl
11:28:00 <elliott> all at once
11:28:03 <fizzie> ais523: 65 of possible values of byte aren't graphic in Latin-1; 0..31 and 127..159.
11:28:16 <ais523> fizzie: oh right, I forgot 127
11:28:24 <ais523> also, screwed up multiplying 32 by 2
11:28:26 <elliott> oh, wait, this is for name mangling from a source language
11:28:30 <elliott> I thought this was for adding module prefixes
11:28:31 <elliott> or something
11:28:41 <ais523> yep, name mangling from a source language
11:29:02 <ais523> the module prefixes are where the md5 stuff comes in
11:29:18 <ais523> VHDL has namespacing, but I need to make sure that the namespaces don't have the same names as each other, or it'd just be a huge mess
11:29:20 <elliott> ais523: I suggest just mangling everything other than [a-zA-Z0-9] into _xNN_
11:29:22 <elliott> where NN is the byte value
11:29:25 <elliott> assuming there's no Unicode involved
11:29:35 <elliott> and I think OCaml is dark-ages enough for it presumably not to be
11:29:58 <ais523> elliott: the source language isn't OCaml
11:30:04 <elliott> ais523: I didn't say it was.
11:30:18 <ais523> at the moment, it uses the same identifier rules as pre-Unicode-era C
11:30:29 <ais523> without the length restrictions
11:30:30 <elliott> ais523: I'm saying that I'm very sceptical OCaml does Unicode in anything vaguely approximating out of the box.
11:30:36 <ais523> ah, I see
11:32:57 <ais523> bleh, is it wrong to want to write the project in OCaml+Perl?
11:33:15 <ais523> it's quite a nice mix of languages, as their strengths complement each other nicely
11:34:19 <elliott> ais523: Complaining about your language lock-in will only cause me to mock OCaml more :)
11:34:28 <ais523> I'm not sure if I have a language lockin
11:34:42 <ais523> I'd rewrite the whole thing in Anarchy if it wasn't vaporware
11:34:44 <elliott> ais523: If your alternative is OCaml+Perl, you have no alternative.
11:36:04 <ais523> what do you dislike about OCaml, by the way?
11:36:13 <ais523> I'm trying to mentally work out what its bad points are
11:36:22 <ais523> because it definitely has some, but I have trouble putting a finger on them
11:36:50 <elliott> ais523: For one, it's essentially stuck in 2002
11:37:01 <ais523> hmm, that may well be valid
11:37:16 <ais523> oh right: it doesn't really have typeclasses
11:37:17 <elliott> It has a reputation for speed, but that's mostly in single-threaded tight loops, it doesn't really have a concurrency story at all, which is ridiculous
11:37:41 <elliott> Its standard library is weirdly inconsistent and incomplete (the fact that a library exists just to add all the things you forgot to the standard library is telling...).
11:37:44 <ais523> in particular, you can't add "methods" to other classes
11:37:50 <ais523> heh, which one's that?
11:37:52 <elliott> Yes, lack of typeclasses or something similarly useful is painful.
11:37:57 <elliott> ais523: Batteries (Included)
11:38:13 -!- kallisti has quit (Ping timeout: 252 seconds).
11:38:14 <ais523> I actually think that Pervasives seems a little too large
11:38:19 <ais523> in particular, I don't get why it has I/O in
11:38:44 <elliott> I also don't like the syntax much (Standard ML's is nicer), and the fact that it has multiple sort-of-object-systems is just ridiculous design.
11:39:08 <ais523> heh, I just saw exception Exit looking at the Pervasives docs
11:39:13 <elliott> The type system could also do with doing a bit less weak.
11:39:14 <ais523> it's an exception provided for user use, and not used by the library
11:39:24 <elliott> And more subjectively: I'd rather it be pure and lazy, but, uh, the language I want OCaml to be already exists.
11:39:30 <ais523> except, the user can (and frequently does) trivially define exception types
11:39:35 <ais523> elliott: heh
11:39:42 <elliott> ais523: sounds like a relic from before you could do that to me :P
11:39:47 <ais523> perhaps
11:39:54 <ais523> although, Exit can't carry a payload
11:39:57 <elliott> ais523: Oh! Another thing I don't like about OCaml: THEY IMPLEMENTED PRINTF IN THE COMPILER
11:40:01 <ais523> which would make it reasonably useless for that purpose
11:40:03 <elliott> PRINTF LITERALLY HAS SPECIAL COMPILER SUPPORT
11:40:05 <elliott> IN THE TYPE SYSTEM
11:40:18 <ais523> really? that's ridiculous
11:41:06 <elliott> ais523: yes
11:41:23 <elliott> ais523: you can't type printf in OCaml even with the dynamically-typed way Haskell does it, since that relies on overloading
11:41:39 <elliott> ais523: check out the type of printf, basically the "string literal" format you give to it?
11:41:41 <elliott> that's not a string literal at all
11:41:47 <elliott> that's a type-carrying format value
11:41:55 <elliott> (printf <string literal>) is just special-cased
11:42:03 <elliott> and I don't think you can pass a variable format at all, that's the only way you can call it
11:42:11 <ais523> crazy and heretical way to do printf: make it take all its arguments as strings
11:42:30 <elliott> ais523: that doesn't help, it's variadic
11:42:34 <elliott> you need it to take a list of strings
11:42:38 <ais523> yep, that's what I meant
11:42:39 <elliott> at which point it becomes a really weird syntax for concat
11:42:40 <elliott> :P
11:43:00 <ais523> elliott: no, I meant it'd parse the strings back into the original arguments
11:43:23 <elliott> ais523: wat
11:43:29 <ais523> you'd do printf "%2.3g" ["0.0000142"]
11:43:43 <ais523> or whatever
11:43:51 <elliott> heh
11:44:22 <elliott> ais523: oh, another ocaml complaint: bignums are awkward (although i never used them myself, admittedly)
11:44:25 <ais523> another thing that gets me about OCaml's standard library is its naming
11:44:33 <ais523> List.hd, List.tl, List.rev, List.length
11:44:47 <elliott> (but they have their own operator set (of course) and you can't use integer literals with them, so I'm pretty sure I'm right)
11:44:54 <elliott> ais523: yeah, ew
11:45:08 <ais523> and List.append is also Pervasives.(@)
11:45:14 <elliott> ais523: oh, Exit is to exit the program, I think
11:45:17 <ais523> which I didn't know about for ages because I was looking in the wrong module
11:45:20 <elliott> I bet it has a top-level handler that just exit(0)s
11:45:25 <ais523> heh
11:45:29 <ais523> even that's a two-line wrapper
11:45:50 <ais523> try … with Exit -> ()
11:46:29 <ais523> val incr : int ref -> unit
11:46:31 <ais523> Increment the integer contained in the given reference. Equivalent to fun r -> r := succ !r.
11:46:41 <elliott> ais523: this is making me feel so much better about how crufty the Prelude is
11:46:44 <ais523> why is that even in the standard library?
11:47:19 <ais523> I mean, it's not an entirely useless operation, but it's reasonably uncommon, and it's almost as short to write r := !r + 1, and you could define it yourself trivially if you needed to
11:47:30 <elliott> ais523: oh yeah, strings are their own type and not an instantiation of some sequence type too
11:47:34 <elliott> that makes so much sense!!
11:48:05 <ais523> that does make sense, in a way; the internal representation is completely different
11:48:15 <elliott> ais523: "of some sequence type"
11:48:24 <elliott> strings are certainly an instantiation of a more general sequence type
11:48:28 <elliott> in OCaml's case, probably unboxed arrays
11:48:32 <elliott> with a list interface
11:48:43 <ais523> nah, not quite, unboxed null-terminated arrays
11:48:56 <elliott> (admittedly haskell ByteString has this flaw too, but there's an effort to define ByteString as Vector Word8s)
11:49:00 <elliott> ais523: what?!
11:49:07 <elliott> ais523: OCaml uses null-terminated strings?
11:49:15 <ais523> elliott: it stores the length too
11:49:18 <elliott> >_<
11:49:28 <ais523> the null terminator's there so that they can be passed to C functions unchanged, or something
11:49:50 <elliott> ais523: and to make them useless for storing binary data!
11:49:54 <ais523> also, the defining feature of OCaml strings is that you can't change their length
11:50:19 <elliott> ais523: even in an impure language I can't think of a decent argument for making strings mutable
11:50:23 <elliott> even /Python/ has immutable strings
11:50:28 <ais523> here: earlier towakeperiod I was trying to write a handler that stored every character read
11:50:49 <elliott> ais523: let me quote to you the types involved in ocaml printf
11:50:51 <elliott> type ('a, 'b, 'c, 'd) format4 = ('a, 'b, 'c, 'c, 'c, 'd) format6
11:50:51 <elliott> Format strings have a general and highly polymorphic type ('a, 'b, 'c, 'd, 'e, 'f) format6. Type format6 is built in. The two simplified types, format and format4 below are included for backward compatibility with earlier releases of Objective Caml. 'a is the type of the parameters of the format, 'b is the type of the first argument given to %a and %t printing functions, 'c is the type of the argument transmitted to the first argument of "kprintf"
11:50:51 <elliott> -style functions, 'd is the result type for the "scanf"-style functions, 'e is the type of the receiver function for the "scanf"-style functions, 'f is the result type for the "printf"-style function.
11:50:52 <elliott> type ('a, 'b, 'c) format = ('a, 'b, 'c, 'c) format4
11:50:54 <elliott> val string_of_format : ('a, 'b, 'c, 'd, 'e, 'f) format6 -> string
11:50:56 <elliott> Converts a format string into a string.
11:50:58 <elliott> val format_of_string : ('a, 'b, 'c, 'd, 'e, 'f) format6 -> ('a, 'b, 'c, 'd, 'e, 'f) format6
11:51:00 <elliott> format_of_string s returns a format string read from the string literal s.
11:51:02 <elliott> val (^^) : ('a, 'b, 'c, 'd, 'e, 'f) format6 ->
11:51:03 <ais523> basically, suppose you're doing getc in a loop, and you want to store the entire file read
11:51:04 <elliott> ('f, 'b, 'c, 'e, 'g, 'h) format6 -> ('a, 'b, 'c, 'd, 'g, 'h) format6
11:51:06 <elliott> f1 ^^ f2 catenates formats f1 and f2. The result is a format that accepts arguments from f1, then arguments from f2.
11:51:21 <ais523> elliott: I have the page open in w3m right now, no real reason to quote it
11:52:11 <ais523> also, I wanted it to be O(n), not O(n^2)
11:52:18 <ais523> out of interest, how do you do that in Haskell?
11:52:34 <ais523> I suspect it wouldn't be the same as how I eventually did it in OCaml; the result was slightly lower-level than C
11:52:40 <ais523> because OCaml doesn't have a realloc equivalent
11:53:05 <ais523> so I had to do what was effectively malloc + memmove (luckily no explicit free required as it's GCed)
11:53:23 <ais523> /then/, I had to allocate another string when I was finished, in order to trim it down to size
11:56:03 -!- sebbu has joined.
11:56:03 -!- sebbu has quit (Changing host).
11:56:04 -!- sebbu has joined.
11:56:28 * ais523 suddenly wonders what the top Google result is for "search engine optimization"
11:57:56 -!- sebbu2 has quit (Ping timeout: 240 seconds).
11:58:16 <ais523> hmm, the top paid result is from www.seoconsult.com; the first nonpaid result is Wikipedia, and the second www.searchengineoptimisation.org, followed by www.searchengineoptimisation.co.uk
11:58:45 <ais523> I suppose the lesson is, that if you really want to win an SEO war against people who are as cutthroat as you are, make the domain name match the search query exactly
11:59:49 <ais523> haha, indeed; I changed the query to "search optimisation engine", and now the winning non-Wikipedia nonpaid result is on the site www.searchengineoptimising.com
12:00:05 -!- ais523 has set topic: Search optimisation engine | http://codu.org/logs/_esoteric/.
12:01:19 <elliott> ais523: oh, you asked a question
12:01:32 <elliott> <ais523> basically, suppose you're doing getc in a loop, and you want to store the entire file read
12:01:32 <elliott> <ais523> also, I wanted it to be O(n), not O(n^2)
12:01:32 <elliott> <ais523> out of interest, how do you do that in Haskell?
12:02:03 <elliott> slurp :: Handle -> IO String; slurp h = do { eof <- hIsEOF h; if eof then return "" else (:) <$> getChar <*> slurp h }
12:02:30 -!- cheater has joined.
12:03:06 <elliott> ais523: that's for linked-list strings, though
12:03:23 <elliott> ais523: I presume youw ant it for flat-byte-array type things?
12:03:25 <elliott> *you want
12:08:18 <elliott> oops, s/getChar/hGetChar h/
12:08:31 <elliott> ais523: in which case, an obvious strategy is just s/hGetChar h/B.hGet h 8192/ and then apply B.concat to the result of it all
12:09:10 <elliott> the actual implementation of B.hGetContents says:
12:09:18 <elliott> "This function reads chunks at a time, doubling the chunksize on each read. The final buffer is then realloced to the appropriate size. For files > half of available memory, this may lead to memory exhaustion. Consider using readFile in this case."
12:09:54 <elliott> readFile is clever; it just asks the OS how big the file is, then does one big B.hGet of that size
12:16:05 <elliott> ais523: :(
12:44:13 -!- cheater has quit (Ping timeout: 240 seconds).
12:53:28 -!- Phantom_Hoover has joined.
12:53:39 <Phantom_Hoover> lambdabot!
12:53:39 <lambdabot> Phantom_Hoover: You have 2 new messages. '/msg lambdabot @messages' to read them.
13:01:30 <elliott> helo Phantom_Hoover
13:01:42 <Phantom_Hoover> Hamlo.
13:01:45 <elliott> hamlo
13:02:27 <elliott> Gregor: Is there a shorter way to write {struct foo *bar = malloc(sizeof(struct foo)); memcpy(bar, &foo, sizeof(struct foo));}
13:05:45 <fizzie> "struct foo *bar = malloc(sizeof *bar);" is a classical way to write the malloc sorta-type-safely; "*bar = foo" is a shorter way to write the memcpy, if you don't mind letting the compiler decide how to do it, and that some padding bytes may not get moved if it doesn't want to.
13:08:18 <fizzie> struct foo *bar = g_memdup(&foo, sizeof foo); if you want to be all glib about it. :p
13:10:09 <elliott> fizzie: glib is the relevant scenario since it's mcmap :P
13:10:17 <elliott> But I just rewrote it as a malloc plus assignments, so oh well.
13:10:48 <elliott> fizzie: Do you mind much if I make a directory for map code? It's just that map_flat.c and map_surface.c and map_cross.c and map_iso.c seems a bit ridiculous.
13:11:12 <fizzie> Feel free to.
13:11:38 <elliott> Most excellente.
13:18:43 <ais523> elliott: I was at a seminar, I'm back now
13:18:58 <ais523> you'd probably have understood it better than most of the people there; I managed to follow it eventually
13:19:16 <elliott> heh; what was it about?
13:19:49 <ais523> containers and comonads
13:20:16 <ais523> in particular, it defined an extra structure on containers, then showed that containers with that structure were all comonads, and all containers that were also comonads had that structure
13:20:26 <elliott> what definition of container?
13:20:32 <ais523> we ended up concluding that List actually worked more naturally as a comonad than as a monad
13:20:42 <elliott> lists aren't comonadic
13:20:47 <elliott> you don't have [a] -> a
13:20:52 <elliott> nonempty lists are though
13:20:53 <ais523> err, nonempty lists
13:21:01 <elliott> right
13:21:27 <ais523> the definition's that containers have a set of shapes, each shape has its own set of positions
13:21:55 <ais523> I suspect that the fact that List is a comonad isn't too useful for actual programming, though
13:23:29 <elliott> ais523: well, (=>>) is \xs f -> map f (tails xs)
13:23:37 <elliott> which seems useful, in theory
13:23:42 <elliott> you can implement (a very slow) scanl with it
13:24:27 <ais523> it was defined in terms of unreturn and unflatten
13:24:45 <ais523> but that (=>>) looks like a reasonable definition on that basis
13:24:56 <elliott> ais523: *extract and duplicate
13:25:09 <elliott> (=>>) is just flip extend, it's the analogy of (>>=)
13:25:15 <elliott> where extend f = fmap f . duplicate
13:25:27 <elliott> duplicate is like join, extend is like flip (>>=)
13:26:03 <ais523> hmm, the thing about general definitions like monads and comonads is that there are all sorts of plausible names for the operations
13:26:24 <ais523> <elliott> "This function reads chunks at a time, doubling the chunksize on each read. The final buffer is then realloced to the appropriate size. For files > half of available memory, this may lead to memory exhaustion. Consider using readFile in this case." <-- my OCaml code did that but manually
13:26:46 <ais523> come to think of it, it'd have been simpler to read everything into memory first, then parse from memory
13:26:50 <elliott> ais523: nah, the problem is that there's no plausible name for return
13:26:58 <elliott> return doesn't make any sense, it's just trying to look vaguely like C
13:27:09 <elliott> pure sort of makes sense but not really
13:27:29 <elliott> point is meaningful but really bland and unevocative
13:27:30 <ais523> rather than parse from disk and hook the parser with a hook that builds up a copy of what it parsed in memory
13:27:37 <ais523> "wrap"?
13:27:46 <elliott> ais523: wrap's worse than any of those
13:27:57 <elliott> promotes the container view (fallacy) of monads
13:28:09 <elliott> (whereas pure promotes the computation view (fallacy) :/)
13:28:34 <ais523> the computation view is pretty much a special case
13:28:53 <elliott> no
13:28:58 <elliott> lots of containers are monads
13:29:04 <elliott> lots of computations are monads
13:29:11 <elliott> but describing monads as either is very wrong and misleading
13:29:20 <elliott> it's not a "special case" any more than Maybe is a special case of Monad
13:29:24 <ais523> yep, but I meant that computations all fit into a subset of monads
13:29:24 <elliott> it's not, it just has an instance
13:29:32 <ais523> that have something in common
13:29:39 <ais523> and it's a little hard to say what
13:29:40 <elliott> ais523: well, OK; "computation" isn't used as something with a precise definition here
13:29:45 <ais523> ah, I see
13:29:48 <elliott> but instead something people analogise to to try and understand monads
13:29:52 <elliott> which doesn't work
13:30:01 <elliott> e.g. State and IO fit into that
13:30:08 <elliott> but [] doesn't
13:30:17 <elliott> (well, [] is nondeterministic computation :P)
13:30:21 <ais523> elliott: I actually have a reasonably computationy view of List
13:30:27 <ais523> and Maybe, fwiw
13:30:33 <elliott> yeah, I just cba to think of a better example off the top of my head
13:30:38 <elliott> the computation view isn't as bad as the container view
13:30:38 <ais523> hmm, which view would you say Identity falls into?
13:30:42 <elliott> which insists that an (m a) /contains/ an a
13:30:47 <ais523> it's a genuinely useful monad
13:30:54 <elliott> and talks about (>>=) "unwrapping" the value
13:30:59 <elliott> which is just Not Even Wrong
13:31:05 <elliott> ais523: it is?
13:31:08 <elliott> only as the base of a transformer stack
13:31:14 <ais523> elliott: nope, it handles taint
13:31:36 <elliott> ais523: well, OK
13:31:42 <elliott> ais523: I doubt the monad part is that useful
13:31:55 <elliott> Applicative seems as far as you'd want to go with taint most of the time
13:32:18 <ais523> you definitely need lift for tainting, but Applicative has that, right?
13:32:30 <ais523> I can never quite remember what Applicative has, and what it doesn't have
13:33:57 <elliott> ais523: Applicative is Functor, pure, and (<*>)
13:34:06 <elliott> although Functor isn't necessary
13:34:11 <elliott> fmap f x = pure f <*> x
13:34:13 <ais523> what do monads have over that?
13:34:16 <elliott> join
13:34:25 <elliott> pure :: a -> f a, (<*>) :: f (a -> b) -> f a -> f b
13:34:29 <elliott> join :: m (m a) -> m a
13:34:40 <elliott> basically, join lets the /structure/ of a computation depend on the /result/ of another
13:34:54 <elliott> Applicatives have static control structure, Monads have dynamic control structure
13:34:57 <ais523> and in the case of Identity, you can't really tell whether it exists or not, because it's trivial
13:35:05 <ais523> there is only the one structure
13:35:11 <elliott> whether it exists or not? huh?
13:35:12 <ais523> so join is trivial to define but doesn't do anything
13:35:20 <elliott> sure join does something
13:35:22 <ais523> elliott: err, hmm
13:35:24 <elliott> I'm not denying Identity is a Monad
13:35:38 <elliott> I'm just saying that I might not agree with "Identity is a useful monad"
13:35:48 <ais523> ah, OK
13:35:54 <elliott> although do notation is certainly useful for taint, I think you'd usually express computations that can be expressed with Applicative with it
13:36:00 <ais523> I think what I'm saying makes sense in my own mind, but is not an elliott-approved concept
13:36:11 <elliott> heh
13:36:49 <elliott> ais523: I actually don't know what you mean, though :P
13:37:47 <ais523> I think, umm, if there's only one possible definition of something (as in, you can get the definition just from the types), it's impossible to tell whether that definition's being used or not
13:37:50 <ais523> well, obviously it /is/
13:38:22 <ais523> note that I almost passed out on the bus this morning, I may not be in a particularly sane state of mind
13:38:30 <elliott> try not passing out on the bus
13:38:34 * elliott advice
13:38:52 <ais523> I did; I even succeeded
13:38:57 <ais523> but it was pretty close for a while
13:39:00 <elliott> congratulations! now try not almost passing out on the bus
13:39:03 <ais523> it was lucky that today was so incredibly windy
13:39:04 <elliott> (advanced stage)
13:39:21 <ais523> it helped keep me alert, wind does that
13:39:35 -!- Vorpal has joined.
13:39:45 <ais523> oh, something I read in the paper this morning; you know how non-tech press normally calls all malware viruses?
13:40:13 <ais523> well, I saw a variation this time, along the lines of "even if you don't enter any personal information, the malicious pages can still fill your computer with bugs"
13:40:31 <ais523> and I was trying to work out what definition of "bugs" they meant, and if it was a reasonable metaphor or not
13:41:18 <elliott> heh
13:41:34 <fizzie> There's the "covert listening device" definition of bug.
13:41:42 <ais523> fizzie: indeed, I was wondering if they meant that
13:41:57 <ais523> I think it's a more accurate description than the typical newspaper one; also, more vague and more confusing
13:42:05 <elliott> I think most broadly all a computer user cares about is "it doesn't do what I want"
13:42:09 <elliott> and you could call all those bugs
13:42:15 <elliott> if you want to be weird :P
13:42:26 <ais523> hmm, I don't consider misfeatures to be bugs
13:43:19 <fizzie> elliott: Incidentally, the "listening device" definition of a bug is used in what I believe (from glancing perusal of the earlier discussion) is nowadays your favourite comicky strip ever, the Silence in the Darkness on Q16.
13:43:51 <elliott> fizzie: Please tell me you learned this from that discussion and you're not like some super Silence in the Darkness on Q16 fan.
13:44:30 <fizzie> Well, I learned it from the discussion in the sense that post-discussion I click-througed quite a number of black squares; one of the few non-black ones was http://silenceinthedarknessonq16.comicostrich.com/comic.php?cdate=20070512 which uses it.
13:44:47 <fizzie> (Hadn't heard of SitDoQ16 before today at all.)
13:44:58 <fizzie> (I suppose it abbreviates like that?)
13:45:03 <elliott> Yes, that assurance was all I needed.
13:49:18 <ais523> anyway, I'm reasonably happy with my object file format
13:49:40 <ais523> it's a bunch of VHDL comments which contain key/context/value triples, followed by something arbitrary, which could well be VHDL
13:49:48 <elliott> hmm, what's context?
13:51:11 <ais523> things like what variable the key applies to
13:51:19 <ais523> whereas there are finitely many keys
13:51:28 <elliott> that sounds like part of the value to me
13:52:06 <ais523> elliott: err, what?
13:52:18 <elliott> oh, hmm
13:52:19 <elliott> right :)
13:52:32 <ais523> you could consider it part of the key, I guess
13:52:41 * elliott would probably go straight to key = list of strings and no fixed keys
13:52:50 <elliott> you should probably ignore unrecognised keys, anyway, for future extensibility
13:52:50 <ais523> but the whole thing's more flexible than just keys and just values, and doesn't really follow a pattern
13:52:59 <ais523> and indeed, that seems reasonable
13:58:00 <elliott> ais523: anyway, you have to hear my ridiculous build system idea since nobody else will:
13:59:31 <ais523> go on; one of the most important purposes of this channel is finding people to bounce ridiculous ideas off
13:59:47 <elliott> ais523: set up a FUSE filesystem that has all the output files existing already; they can be opened fine, but read and stat will block until the files exist for real; then, start every single command that needs to be run in parallel (note: the FUSE filesystem doesn't pretend the output file exists for the process trying to write it, i.e. it knows which file not to fake for each process)
13:59:58 <elliott> this achieves maximum parallelism thanks to the operating system
14:00:18 <elliott> reads of yet-to-be-built input files succeed as soon as possible
14:00:33 <ais523> elliott: that's awesome, I'm just upset that many compilers will fail on that sort of thing due to being badly designed
14:00:45 <elliott> ais523: I'm not sure they would, actually
14:00:52 <elliott> most compilers don't break on really slow filesystems
14:01:05 <ais523> what if they seek around in the file that they're writing?
14:01:15 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 , Skype: patashu0 .).
14:01:15 <ais523> it wouldn't at all surprise me if an ar/tar variant did that
14:01:18 <elliott> ais523: that works fine; the output file is "normal" for each command
14:01:23 <elliott> it's every other output that's faked
14:01:36 <elliott> i.e. the file to be created doesn't exist in the filesystem each command runs in
14:01:44 <ais523> elliott: oh, do you only remove the block on the read when the file is actually closed?
14:01:45 <elliott> just every other output of the build process
14:02:02 <elliott> ais523: when the command completes successfully, yes; I suppose that would work as an optimisation, too
14:02:02 <ais523> I thought you meant it only blocked until the relevant portion of the file had been written
14:02:16 <elliott> heh, that's even better, but most compilers stat
14:02:19 <elliott> well, some of them anyway
14:02:28 <elliott> and the vast majority buffer their output fully
14:02:32 <elliott> so that wouldn't actually help much
14:02:33 <ais523> yep, but stat wouldn't break it, just read-after-write-barrier it
14:02:49 <elliott> ais523: well, I mean
14:02:54 <elliott> you'd have to wait for the whole thing to finish
14:02:57 <elliott> for them to get the correct stat result
14:03:06 <ais523> yep, that's what I meant by a read-after-write barrier
14:03:08 <elliott> right
14:03:11 <elliott> so the advantage is negated
14:03:21 <ais523> you know what we need? lazy languages
14:03:31 <elliott> ais523: thankfully, I fear this scheme won't work very well
14:03:36 <ais523> so that you could have stat return before its results were available
14:03:40 <elliott> because I suspect the overhead of setting up every process is too great
14:03:51 <elliott> and the scheduler will hate you
14:04:07 <elliott> ais523: heh
14:04:12 <elliott> ais523: that's just unsafeInterleaveIO
14:04:23 <ais523> oh, is that what that does?
14:04:33 <ais523> (what's unsafe about it, btw?)
14:04:33 <elliott> ais523: it's just (return . unsafePerformIO), essentially
14:04:37 <elliott> so the IO only gets executed when you force the action
14:04:39 <elliott> weeeeeell
14:04:42 <elliott> some people argue it isn't unsafe
14:04:46 <elliott> but they're wrong
14:04:51 <elliott> it exposes evaluation order as IO
14:04:53 <elliott> i.e.
14:05:03 <elliott> whenever some /pure/ code forces the value you get out of an unsafeInterleaveIO action
14:05:06 <elliott> the IO occurs
14:05:21 <ais523> oh right, it lets you tell things apart that should be indistinguishable
14:05:21 <elliott> you can justify this as still being inside the IO monad -- it doesn't break purity in a strict sense
14:05:25 <elliott> but it's eurgh
14:05:26 <elliott> ais523: not rtue
14:05:27 <elliott> true
14:05:29 <elliott> _|_ lets you do that
14:05:36 <elliott> to determine evaluation order
14:05:39 <elliott> but... it's icky
14:05:49 <elliott> getContents uses that, it returns all of stdin as a lazy string
14:05:49 <ais523> well, you can code to protect your code from _|_ in particular
14:05:54 <elliott> ais523: err, what?
14:05:58 <ais523> using seq or whatever
14:06:07 <elliott> you're confused, unsafeInterleaveIO doesn't let you tell things apart that should be distinguishable at all
14:06:18 <elliott> wow, they're making a film out of Battleship
14:06:33 <elliott> as in, the game
14:06:34 <ais523> hmm… I suppose unsafeInterleaveIO could be implemented in terms of exceptions and an unthrow operation that went back to where the exception was thrown from
14:06:46 <ais523> elliott: it'd just be a generic war film, right?
14:07:12 <elliott> ais523: "In the Hawaiian Islands, an international naval fleet at Pearl Harbor engage in a very dynamic and intense battle against an alien race known as "The Regents". The aliens come to planet Earth, on a mission to build a power source in the ocean. Upon their visit, they come in contact with the navy fleet. The film is also purported to show both sides of the story, from the aliens' perspective, as well as the humans' so the audience knows exa
14:07:12 <elliott> ctly where the opponent's ships are.[4]"
14:07:15 -!- Ngevd has joined.
14:07:27 <elliott> my games of Battleship usually aren't against aliens...
14:07:35 <Ngevd> Hello...
14:07:36 <Ngevd> Ill
14:07:42 <elliott> have they made a film out of Monopoly yet?
14:07:49 <elliott> that would be THE WORST THING EVER AND SO SHIT AND EVERYONE WHO WOULD ENJOY IT SHOULD DIE
14:07:54 <elliott> IN A DEATHLY MANNER
14:07:56 <elliott> ahem
14:07:57 <elliott> hi Ngevd
14:08:16 <fizzie> There are quite a few movie trailers for Tetris: The Movie, but I don't think anyone's made it for reals. :/
14:08:27 <ais523> the thing is, that with games that are simplifications (often huge ones) of reality, then complicating them into a film just makes it look like it's a film based on reality
14:08:32 <ais523> fizzie: I know; some of them are quite good
14:08:41 <ais523> but I doubt there'd be enough plot in it to carry a full-length movie
14:08:51 <fizzie> ais523: Like a Tetris movie would just be a documentary on the construction of high-rise buildings.
14:09:12 <ais523> also, pretty much all non-computer attempts to simulate Tetris that I've seen don't allow for the removal of lines to work correctly
14:09:13 <elliott> fizzie: Well, there's Complete History of the Soviet Union.
14:09:21 <ais523> I saw a Tetris board game once; it didn't really work
14:09:22 <elliott> It has plot and everything!
14:09:44 <ais523> if you completed a line you were meant to put a peg next to it to mean "this line's completed, ignore it"
14:09:49 <elliott> ais523: haha
14:09:56 <elliott> I think I've seen that, too
14:10:02 <ais523> but you couldn't physically stretch the pieces across it because they were made of rigid plastic
14:10:52 * elliott is still feeling let down by that "first person" Tetris.
14:11:05 <elliott> It could have been my favourite game!
14:11:33 <ais523> there's no obvious reason why that would necessarily be awful
14:11:34 <elliott> fizzie: (Admittedly it's not so much as a Tetris film as a film with Tetris jammed into the side of it.)
14:11:34 -!- hagb4rd has joined.
14:11:36 <ais523> was it just implemented badly?
14:11:39 <elliott> ais523: it wasn't first person
14:11:44 <elliott> it just rotated the screen as you rotated the piece, that's all
14:11:47 <elliott> otherwise it was standard tetris
14:12:14 <ais523> hmm, it meets one of the necessary conditions to be first person, but is also missing at least one
14:12:15 <hagb4rd> ah here we are.. hello esofriends :}
14:12:24 <ais523> hi hagb4rd
14:12:52 <elliott> ais523: by the way, we found a place to send the lost people
14:12:54 <elliott> `? esoteric
14:13:01 <HackEgo> This channel is about programming -- for the other kind of esoterica, try #esoteric on irc.dalnet.net.
14:13:05 <ais523> elliott: yay
14:13:15 <ais523> that will make a lot of people happier, I think
14:13:34 <ais523> I see no reason why esoterica shouldn't be discussed; just it's awkward to put two mostly unrelated subjects in one channel
14:13:45 <elliott> We can still mock them before sending them off, right? :(
14:13:46 <hagb4rd> how are things goin..look like a rainy day..and this cold winds comin from the northern sea
14:13:51 <fizzie> Regarding Tetris, I think they never got the Chernobyl control center simulator they were building for Altparty 2011 to work. There were people fiddling with it at all times of day during the whole weekend, with multimeters and soldering irons and whatnot, but from what I hear it never quite worked out wrong the right way.
14:14:09 <elliott> fizzie: In, um, Tetris?
14:14:32 <fizzie> No, no, just, you know, associating. Tetris -> Soviet Union + game -> that thing.
14:14:49 <elliott> Simulating that in Tetris would be impressive.
14:14:59 <ais523> I've heard a rumour that in nuclear power plants, the alarms sound continuously except when there's a problem, when they stop, because it's more noticeable that way or something
14:15:02 <ais523> I suspect it's false, though
14:15:11 <elliott> that seems dubious
14:15:16 <elliott> it's easy to notice persistent sounds stopping
14:16:03 <ais523> agreed; but it seems like a bizarre decision to make
14:16:12 <ais523> when the other way round would presumably work too
14:16:42 <Ngevd> Hunt the errors: http://hpaste.org/55219
14:16:58 <Ngevd> And the little things that are just /wrong/
14:17:32 <fizzie> And the wumpus.
14:17:33 <ais523> elliott: anyway, I've concluded that reducing problems to problems that have already been solved is a fast way to do software development, but tends to lead to subquality programs
14:18:26 <ais523> also, I did probably the most bizarre optimization I've done ever this morning
14:18:47 <ais523> it was to a function that calculated strongly connected subsets of graphs
14:19:00 <elliott> ais523: I reject that because it contradicts one of my core principles :P
14:19:02 <ais523> the graph was (and still is) represented as a list of pairs
14:19:03 * elliott rational.
14:19:13 <elliott> ais523: you optimised before getting a better graph representation?
14:19:15 <ais523> and the order is arbitrary
14:19:39 <ais523> elliott: that representation comes naturally out of the problem; optimising the representation would involve writing a conversion function
14:19:48 <ais523> and it was profile-guided optimisation, looking for the slowest part and speeding it up
14:19:55 <ais523> anyway, I sped the program up by a factor of 6 simply by reversing the list
14:20:03 <elliott> haha
14:20:43 <elliott> Ngevd: What do you think interact does?
14:20:44 <hagb4rd> what have zou optimized..the calculating or the drawing part
14:20:48 <ais523> my theory in this respect is that the list happens to be sorted, and it's quite plausible that sorted lists happen to hit the worst case of whatever algorithm I'm using (I got it from Wikipedia)
14:21:01 <elliott> Ngevd: Also, you don't want an Array.
14:21:02 <ais523> and reversing it gets rid of that worst-casiness in the case of the algorithm in question
14:21:10 <elliott> hagb4rd: drawing?
14:21:36 <Ngevd> elliott, I have no idea what interact is, and I have no idea why I would want an array
14:21:47 <ais523> elliott: what is an array in Haskell?
14:21:50 <elliott> Ngevd: Then why did you type "interact $"?
14:22:02 <Ngevd> Because the type signature seemed right!
14:22:08 <elliott> Ngevd: What are you trying to do?
14:22:17 <hagb4rd> i wonder how one could imprve the speed of calculating maths without changing the architecture of your hardware
14:22:17 <elliott> ais523: Can I have a standard response for "your question is unanswerable without you clarifying it"?
14:22:36 <ais523> elliott: hmm
14:22:44 <elliott> Because $that.
14:22:47 <Ngevd> elliott, really, I want to learn my latin vocab
14:22:48 <ais523> normally, you're in a better position to clarify the questions than I am
14:23:01 <ais523> because my typical reply is "indeed, I'm not quite sure of what I'm asking, but asked because I want to know what I should be asking"
14:23:09 <elliott> Ngevd: That's a bit more general than I was intending my question to be answered in.
14:23:18 <ais523> why don't we just assume the response/reply and save time?
14:23:23 <Ngevd> It's what the entire program is for
14:23:23 <elliott> ais523: OK, let me rephrase what I said: Rephrase what you said, or I can't answer it.
14:23:32 <elliott> Ngevd: What are you trying to achieve by applying interact?
14:24:04 <ais523> elliott: what operations does a value of type Array x y support in Haskell, and is there anything particularly notable about their performance behaviour?
14:24:12 <Ngevd> By the fact that I don't actually know, I'd guess I should rewrite it
14:24:27 <ais523> :t interact
14:24:28 <lambdabot> (String -> String) -> IO ()
14:24:34 <ais523> right, indeed
14:24:40 <elliott> ais523: it's (Array i a), where i is the index type, and a is the element type
14:24:47 <elliott> and it's just a boxed, lazy array
14:24:58 <elliott> that is, a contiguous region of memory containing pointers to thunks
14:25:12 <ais523> I could almost remember what interact did, just not the details
14:25:17 <elliott> and the API is crappy and everyone uses Vector instead but Ngevd doesn't want Vector here either I don't think
14:25:26 <elliott> ais523: interact happens to use lazy IO (-> unsafeInterleaveIO).
14:25:32 <elliott> Cue sad track (is that a thing?)
14:25:35 <ais523> elliott: hmm, so it supports operations like copy but with one element changed?
14:25:57 <elliott> ais523: There are mutable and immutable versions; the immutable version is stuff like that, yes.
14:26:00 <ais523> that's what I'd expect an array to do in a pure functional language
14:26:15 <elliott> There's also unboxed arrays, but that's not the type being used here.
14:26:21 <elliott> And also the API is horrible and everyone uses Vector instead.
14:26:22 <ais523> and it's the sort of thing that can reasonably easily be optimised by the compiler into mutation behind the scenes, in cases where the optimisation is obviously correct (which are common)
14:26:26 <elliott> Have I said that enough?
14:26:30 <elliott> ais523: that's not reasonably easy at all
14:26:48 <elliott> I think GHC does do it, but it's not something I'd want to rely on
14:27:10 -!- kallisti has joined.
14:27:11 -!- kallisti has quit (Changing host).
14:27:11 -!- kallisti has joined.
14:27:56 <elliott> Ngevd: anyway, I think you should use an explicit pattern match instead of either there
14:28:09 <elliott> Ngevd: you can tell that you're using interact wrong, because
14:28:15 <ais523> elliott: the most obvious case is if there's only possibly one reference to the input array, and it goes out of scope upon the copy-replace operation
14:28:16 <elliott> do { ... IO stuff ... } :: IO a (for some a)
14:28:21 <elliott> in (interact f), f must :: String -> String
14:28:26 <elliott> IO a =/= (String -> String)
14:28:35 <elliott> ais523: yes, sufficiently smart compilers are really easy to explain
14:28:38 <ais523> and I find that's reasonably common in functional languages
14:28:44 <ais523> elliott: gcc can implement that
14:28:46 <elliott> and take decades to implement
14:28:53 <elliott> ais523: gcc doesn't implement Haskell
14:29:04 <ais523> I'd imagine that most compilers that even vaguely do optimisations do that, actually
14:29:27 <ais523> the problem is that you'd need a stupidly smart compiler if the array operation was written in Haskell, rather than hardcoded into the compiler
14:29:48 <elliott> ghc implements array operations as fairly thin wrappers over primitives
14:29:58 <elliott> but anyway, I think you're vastly oversimplifying things
14:30:36 <ais523> well, let's see, there are two properties we need to check; "only reference" and "dies here"
14:30:55 <ais523> "dies here" is trivial to check; in most compilers that go via SSA you need to actively throw away information to not track that
14:31:12 <elliott> ais523: i am disagreeing with your assessment of the situation
14:31:17 <elliott> I don't feel like debating it right now though
14:31:23 <ais523> "only reference" is rather harder, but the common case where you just created the reference and haven't passed it to anything else yet can be optimised
14:31:39 <ais523> elliott: OK, what about this for an argument: I actually implemented that optimisation for Underload in derlo
14:31:55 <ais523> except at runtime
14:31:57 <elliott> ais523: I am glad we live in that special world where Underload is Haskell
14:32:13 <ais523> elliott: why do you think that Haskell is somehow magically special when it comes to this?
14:32:20 <elliott> indeed, Underload shares many properties that make this kind of mutating optimisation tricky in Haskell, such as full laziness!
14:32:22 <elliott> oh, wait, hmm.
14:32:24 <elliott> no it doesn't
14:32:33 <ais523> oh right, I forgot about laziness
14:32:50 <ais523> the world needs a strict version of Haskell
14:32:57 <elliott> no, it really doesn't
14:33:05 <ais523> not necessarily because it'd be better, but because it would make it much easier to compare it with things
14:33:12 <elliott> heh
14:33:15 <elliott> well, there's DDC.
14:33:26 <ais523> Haskell has lots of innovations that have nothing to do with laziness, and the laziness gets in the way when you'd like to evaluate them on their own
14:33:44 <elliott> ais523: haskell is for people who want to write programs, not for people who want to debate languages :P
14:35:18 <ais523> wait, does Ngevd's Haskell program seriously say "interact $ do"?
14:35:30 <elliott> yes.
14:35:30 <ais523> no wonder it jumped out at elliott
14:35:46 <elliott> trivial type errors are quite easy to spot :P
14:36:28 <ais523> elliott: well, String = [Char] and thus is a monad action type, technically speaking…
14:36:47 <ais523> err, no
14:36:53 <ais523> wait, yes
14:36:57 <elliott> ais523: yep, but that's irrelevant
14:37:01 <elliott> the head is (->) here
14:37:04 <elliott> it's the reader monad
14:37:16 <ais523> oh, right, that's what I first thought
14:37:19 <ais523> then I forgot about the $
14:37:20 <elliott> but, err, getStdGen rather ruins that theory
14:37:25 <elliott> ais523: ?
14:37:28 <elliott> the $ is irrelevant
14:37:31 <elliott> it's just (interact (do ...))
14:37:39 <ais523> err, hmm
14:37:46 <ais523> yep
14:38:07 <ais523> no, it is relevant
14:38:18 <ais523> imagine if it had been (interact $ (do …) "abc")
14:38:22 <elliott> well, OK
14:38:25 <elliott> but it isn't
14:38:33 <ais523> err, that doesn't make sense either
14:38:46 <elliott> fizzie: When did map.h start including world.h? :/
14:38:47 <ais523> elliott: it'll explain a lot if I explain that I don't find Haskell intuitive
14:38:56 <elliott> ais523: you've said that
14:39:13 <ais523> I can write in it, but I often make crazy type mistakes or whatever due to not grasping it
14:39:23 <ais523> whereas in OCaml, pretty much all the type errors I make are typos
14:39:38 <elliott> that's because OCaml's type system is too shallow to catch any real type errors :)
14:39:43 <ais523> haha
14:39:44 <elliott> BRUUUUUN
14:39:48 <ais523> just wait until Anarchy comes around
14:40:04 <elliott> no language called Anarchy is allowed to have a type system
14:40:30 <ais523> the idea is that it's statically typed with a really expressive type system, that's also massively complex but it doesn't matter because the types aren't user-visible
14:40:45 <ais523> I have problems just coming up with a notation to write the types down
14:40:48 <ais523> in general
14:40:55 <fizzie> elliott: $ git blame map.h | grep world.h
14:40:55 <fizzie> 3105a3b3 (Elliott Hird 2011-07-23 10:00:04 +0100 5) #include "world.h"
14:40:58 <fizzie> elliott: Better ask yourself that.
14:41:02 <elliott> fizzie: :-(
14:41:06 <ais523> but it doesn't matter because it just makes sure that the program types for the specific uses of the functions you're using
14:41:11 <elliott> ais523: scapegoat won't have blame, right?
14:41:14 * elliott rimshot
14:41:29 <ais523> elliott: it'd be hard not to ;)
14:41:38 <ais523> why do you think it's called scapegoat in the first place?
14:41:42 <elliott> dude
14:41:43 <elliott> i already
14:41:43 <elliott> did
14:41:44 <elliott> the rimshot
14:41:49 <elliott> you don't have to point it out :'(
14:41:52 <hagb4rd> <ais523>just wait until Anarchy comes around <== isn't that how everything started?
14:42:03 <ais523> hagb4rd: nah, Anarchy's an esolang
14:42:07 <hagb4rd> ah
14:42:07 <ais523> or will be, once I work it out
14:42:09 <hagb4rd> k
14:42:17 <fizzie> I suppose I should've used "git annotate", it's less bitchy.
14:42:22 <ais523> it is slightly more implemented than most completely vaporware esolangs, because it has a parser, which also actually works
14:42:36 <ais523> (this puts it in a different category from Cyclexa, which has only a parser but it doesn't work)
14:43:06 <ais523> actually, hmm, Cyclexa : Anarchy :: UNIX : @, but less so
14:43:22 <ais523> or, hmm, a better analogy
14:43:27 <ais523> Cyclexa : Anarchy :: bash : Powershell
14:43:32 <elliott> ais523: hey, add some more spaces around those colons, or those words will start fighting
14:43:32 <ais523> but more so
14:43:45 <ais523> ?
14:43:54 <elliott> ais523: UNIX and @
14:43:58 <ais523> I see
14:44:11 <ais523> that was something like the third interpretation I tried
14:44:45 <ais523> incidentally, it seems that the next big thing in JavaScript implementation is type inference
14:45:02 <ais523> not as part of the language, but getting the compilers to infer types so that they don't have to put type checks in at runtime
14:45:20 <elliott> the next big thing?
14:45:24 <elliott> you mean the previous big thing
14:45:35 <elliott> at least, they've been doing that, or at least talking about doing that, for years
14:45:35 <ais523> oh, have they managed it now? they were starting on it last I looked
14:45:43 <elliott> oh, well it may be that they're only just now succeeding :)
14:46:08 <ais523> incidentally, in Anarchy tuples and lists are special cases of the same thing
14:46:25 <ais523> which is probably obvious, but they use the same type constructor, (,)
14:46:50 <elliott> ais523: are you sure anarchy isn't just dynamically typed :)
14:47:03 <ais523> I suppose the defining feature of Anarchy is just picking up a convenient type constructor from somewhere and not worrying about if it already means something else
14:47:13 <ais523> elliott: it's aptly named
14:47:55 <ais523> I suppose you could call it an instance of the whole sufficiently smart compiler thing, with respect to "a sufficiently smart compiler should just magically figure out all the types I'm using even if they make no sense"
14:48:01 <ais523> except I think it's practical
14:48:50 <ais523> hmm, I'm not really sure what to do about polymorphic recursion
14:48:58 <ais523> it's obviously allowed, and also obviously not allowed in general
14:49:04 <ais523> but I can't figure out what the restrictions are
14:50:25 <ais523> the simplest way would just be to put an arbitrary limit on the number of different type constructors that can be used in any given type (whether or not they have the same names; or perhaps only if they have the same names, as only a finite number of type constructor names can be used in any given program)
14:50:57 <elliott> ais523: just take the fixed-point
14:51:21 <ais523> elliott: indeed; the problem is, I'm not yet convinced it's computable to determine if there is a fixed-point
14:51:42 <ais523> hopefully it'll turn out that there's always one, so its computability is not in question
14:51:49 <hagb4rd> y isnt just restricted by avaiable memory?
14:52:16 <hagb4rd> ]that
14:52:22 <ais523> hagb4rd: the limit's to detect infinite loops in the traditional crude way of "well, it hasn't finished yet, it's probably infinite"
14:52:37 <hagb4rd> elliott saz
14:52:44 <elliott> what
14:52:46 <hagb4rd> says its limited
14:53:02 <hagb4rd> the number of constructors
14:53:05 <elliott> Says what's limited?
14:53:10 <elliott> ais523 is the one who said that.
14:53:12 <elliott> And he just said "finite".
14:53:18 <elliott> Programs are finite, usually...
14:53:50 <ais523> hagb4rd: if you can write a program containing infinitely many different names for type constructors, good on you, but don't expect me to be able to compile it, or even yourself to be able to fit it in a pastebin
14:53:53 <hagb4rd> no it was ais: as only a finite number of type constructor names can be used in any given program
14:54:10 <elliott> finitely many, not a fixed amount
14:54:13 <ais523> hagb4rd: well, you can't exactly generate them at runtime
14:54:16 <hagb4rd> i was just curious
14:54:23 <ais523> it might be anarchic, but it isn't Perl
14:54:28 <elliott> also, limited by memory = a finite limit :)
14:54:35 <elliott> hagb4rd: i was just answering your curiosity
14:55:11 <hagb4rd> ok.. so everything works out fine
14:57:03 <elliott> ais523: Ban fizzie please. :/
14:57:35 <fizzie> For the offense of not inventing names for you?
14:57:47 <elliott> Yes.
14:57:54 <elliott> I'm very upset.
14:58:05 <ais523> wait, of course it's decidable
14:58:58 <ais523> also, the same issue is why Haskell and OCaml's error messages for type errors are less helpful than usual when recursion is involved
14:59:24 <ais523> :t fix id
14:59:25 <lambdabot> forall a. a
14:59:42 <elliott> they are?
14:59:47 <elliott> not if you specify a type signature, at least
14:59:57 <ais523> right, I mean in the case of inference only
15:00:29 <ais523> typically what they end up complaining about is nonobvious because it's based on a bunch of assumptions that you hadn't meant to be correct
15:01:33 <ais523> elliott: is "even-length list" a type expressible in Haskell?
15:01:49 <elliott> ais523: yes, extremely trivially
15:01:54 <elliott> I'll let you think for a second to figure out how
15:02:06 <ais523> elliott: but not in a way that's a special case of [], right?
15:02:47 <ais523> I mean, I can define EvenList a = Nil | ConsEven a (OddList a) and OddList a = ConsOdd a (EvenList a)
15:02:54 <elliott> no: to do that would require subtyping, which wreaks hell on inference; I suspect you would accept something that could be constructed like (Foo [1,2,3,4]), in which case I will complain that you're giving list literal syntax undue weight :)
15:03:13 <elliott> ais523: I was going for data EvenList a = Nil | Cons a a (EvenList a)
15:03:25 <ais523> but not EvenList = Nil | Cons a (OddList a) and OddList = Cons a (EvenList a)
15:03:32 <ais523> elliott: hmm
15:03:36 <ais523> but then you can't get the tail with a pattern-match
15:04:05 <ais523> wait, yes you can, just put the element back manually
15:04:39 <ais523> anyway, the definition which uses Cons in both places rather than ConsEven and ConsOdd is what you'd use in Anarchy, if you could specify types at all rather than having them inferred
15:04:45 <ais523> and it desugars into ConsEven and ConsOdd
15:05:10 <ais523> although probably with less meaningful names
15:07:40 <Phantom_Hoover> Aha I have found the hipsterest metal.
15:15:25 <ais523> hmm, recent discovery: YouTube's making people give them their cellphone number to uncap accounts and allow them to upload videos longer than 15 minutes
15:15:29 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
15:15:37 <ais523> I'm not entirely sure I can explain that away in any way /but/ being evil
15:24:59 -!- MSleep has quit (Ping timeout: 276 seconds).
15:25:47 -!- MSleep has joined.
15:27:42 <elliott> ais523: to avoid bots clogging the servers?
15:28:06 <ais523> elliott: it's not the only requirement
15:32:47 -!- MSleep has quit (Ping timeout: 276 seconds).
15:32:57 -!- MSleep has joined.
15:34:03 -!- MSleep has quit (Read error: Connection reset by peer).
15:34:22 -!- MSleep has joined.
15:39:45 -!- copumpkin has joined.
15:42:44 <coppro> I got a Japanese ditto last night :D
15:43:14 <ais523> coppro: err, context?
15:43:19 <ais523> it could be Pokémon, but I'm not sure it is
15:43:22 <coppro> ais523: yes
15:43:37 <ais523> flawless speed and HP stat?
15:43:41 <coppro> nah, just japanese
15:44:11 <coppro> I should really get a quebecois game and do shenanigans if I ever decide to try to breed pokes for combat
15:46:25 <ais523> don't, the international bonus effectively works out to a 13% decrease in the length of time it takes to train them up to level 50/100, which is not really noticeable
15:46:35 <ais523> there's no impact on the actual eventual stats
15:48:26 -!- Ngevd has quit (Quit: Goodbye).
15:50:50 -!- Ngevd has joined.
15:55:47 <coppro> ais523: oh, I wasn't talking about that
15:55:58 <coppro> also I don't think quebecois would count as international
15:56:08 <coppro> it's shininess that I'm going for
15:56:28 <ais523> it would; the cartridges for games in a particular language are identical
15:56:47 <coppro> But I would register it as having the same location
15:56:49 <coppro> since it's my location
15:56:50 <ais523> so it can't distinguish US/France from England/France from English Canadian/French Canadian
15:57:06 <ais523> registered location is ignored, I think, because it's so easily faked
15:57:15 <coppro> ah
15:58:10 <ais523> hmm, TIL that detonating a nuclear bomb was only banned in 1998
15:58:13 <ais523> in the UK
15:58:34 <ais523> (it was a consequence of the comprehensive test ban treaty; typically, detonating a nuclear bomb before then would typically violate some other law indirectly)
16:12:19 <fizzie> How about just possessing a nuclear bomb, that legal?
16:22:44 -!- Taneb has joined.
16:24:21 <fizzie> Best ISP-given workaround ever. Paraphrasing here: "We've switched some mobile data connections to use NAT; connecting mobile devices will randomly get either a public IP or a NATted one. [What do I do if a service I'm using requires a public IP?] In this case, you must try establishing the connection again until you get a public IP. Use [link] to check your current IP."
16:24:27 <fizzie> The most helpful.
16:25:04 -!- Ngevd has quit (Ping timeout: 248 seconds).
16:26:14 <fizzie> Official justification is the predicted sparsity of v4 addresses.
16:26:44 <Gregor> So give 'em IPv6 addresses. They'll do just fine.
16:26:58 <fizzie> That would be too futuristic.
16:32:45 <kallisti> I'm kind of surprised at how slowly IPv6 is being adopted.
16:33:47 <Taneb> People don't like change changing
16:34:28 <kallisti> I think NAT probably has slowed down the change as well?
16:35:02 <kallisti> since it lets everyone procrastinate the looming address exhaustion apocalypse
16:35:20 <elliott> There's no real reason you can't just NAT further and further.
16:35:38 <kallisti> but...
16:35:39 <kallisti> but
16:35:42 <kallisti> so ugly. ;_;
16:36:21 <elliott> I didn't say it was a good idea.
16:37:07 <kallisti> ""[...] it is possible that its [NAT's] widespread use will significantly delay the need to deploy IPv6. [...] It is probably safe to say that networks would be better off without NAT [...]" -- "Some"
16:37:32 <kallisti> This is what Some[6] say, according to Wikipedia
16:44:42 <Gregor> Yeah, the Some Institute of Somersville.
17:00:13 -!- MSleep has changed nick to MDude.
17:02:44 -!- ais523 has quit (Remote host closed the connection).
17:09:57 -!- Taneb has quit (Quit: Goodbye).
17:24:10 <itidus21> i think station v3 has a sort of gilligan's isle sort of plot except it does seem they are always endeavouring to get from A to B
17:24:40 <itidus21> as for the characters they would all look perfectly at home in commander keen
17:28:12 <itidus21> ... oh i think i see now.. im just in complete confusion over all the events since im just reading from a random position
17:28:36 <itidus21> thus giving the illusion that lots of stuff was all miraculously invented at once
17:30:00 <itidus21> kind of like how video games seemed amazing all at once, despite requiring the discovery of electricity, the invention of computers, the invention of television, the invention of the microchip,
17:35:40 <kallisti> the invention of people.
17:35:56 <kallisti> the invention of money
17:36:14 <itidus21> life too
17:36:22 <itidus21> eyes
17:36:23 <itidus21> hands
17:36:33 <itidus21> light
17:36:59 <itidus21> hmm
17:37:24 <itidus21> its te same effect when you encounter a webcomic for the first time
17:37:46 <itidus21> it can seem like theres endless pages until you catch up
17:38:14 <itidus21> but then, to be fair, theres endless webcomics out there
17:44:40 <quintopia> did itidus get incremented? o_0
17:45:42 <itidus21> `pastelogs itidus21
17:46:08 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.17205
17:47:10 <itidus21> itidus21 from 23rd july
17:47:16 <itidus21> `pastelogs itidus20
17:47:24 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.29013
17:47:57 <itidus21> itidus20 from 16th july .. it seems to vary back and forth
17:48:33 <quintopia> this is a phenomenon which requires explanation
17:48:58 <itidus21> it's my alt nick i guess
17:49:26 <itidus21> since i am not used to irc, i havent made provisions to use underscores
17:52:24 <quintopia> oh
18:01:21 -!- oklopol has joined.
18:37:13 <Gregor> When did freshmeat.net change to freecode.com???
18:38:47 <kallisti> ___---_-----------------------_______
18:39:07 <Deewiant> Gregor: 2011-10-29
18:39:30 <Gregor> Man, I would have noticed that if it hadn't become so irrelevant.
18:39:37 -!- Phantom_Hoover has quit (Ping timeout: 240 seconds).
18:42:21 <kallisti> Gregor: you're irrelevant.
18:43:05 <quintopia> kallisti: you're a relephant
18:47:01 -!- Klisz has joined.
18:55:58 -!- Phantom_Hoover has joined.
18:59:31 -!- DCliche has joined.
19:03:00 -!- Klisz has quit (Ping timeout: 252 seconds).
19:17:57 -!- kallisti has quit (Read error: Connection reset by peer).
19:21:01 -!- kallisti has joined.
19:21:01 -!- kallisti has quit (Changing host).
19:21:01 -!- kallisti has joined.
19:21:50 <kallisti> my computer just overheated on my bed.
19:21:53 <kallisti> perhaps I need to clean the fan.
19:23:47 <oklopol> did it catch on fire
19:24:40 -!- zzo38 has joined.
19:25:48 -!- derrik has joined.
19:27:12 <kallisti> oklopol: no
19:27:21 <quintopia> presumably it turned itself off
19:27:33 <quintopia> which is not nearly as cool as spontaneous combustion
19:28:02 <oklopol> insert heat joke
19:28:03 -!- sebbu2 has joined.
19:28:03 -!- sebbu2 has quit (Changing host).
19:28:03 -!- sebbu2 has joined.
19:30:57 -!- sebbu has quit (Ping timeout: 240 seconds).
19:39:23 <kallisti> `run cat lol &| echo
19:39:26 <HackEgo> bash: -c: line 0: syntax error near unexpected token `|' \ bash: -c: line 0: `cat lol &| echo'
19:39:29 <kallisti> `run cat lol | echo
19:39:32 <HackEgo> ​\ cat: lol: No such file or directory
19:39:38 <kallisti> hmm
19:39:47 <kallisti> what was that thing that's like 2>&1 |
19:40:00 <kallisti> `run cat lol |& echo
19:40:03 <HackEgo> No output.
19:40:43 <kallisti> `run cat lol | echo
19:40:45 <HackEgo> ​\ cat: lol: No such file or directory
19:45:34 -!- sebbu2 has changed nick to sebbu.
19:48:24 <kallisti> head -c 200 | head -n 2
19:48:34 <kallisti> can this be combined into a single head command?
19:49:06 <quintopia> have you tried the obvious yet?
19:49:14 <kallisti> obviously not. :P
19:49:25 <quintopia> well
19:49:28 <quintopia> let me know
19:49:36 <kallisti> oh wait I think I did try it a while ago.
19:49:47 <kallisti> but I will try again because I don't remember
19:50:35 <kallisti> it's ambiguous without an explicit ordering though so I don't think it would work.
19:51:25 <kallisti> yeah using -c with -n just ignores -n
19:58:13 -!- nys has joined.
20:08:29 -!- GreaseMonkey has joined.
20:09:23 <kallisti> > 9**9**9
20:09:24 <lambdabot> Infinity
20:12:04 <Gregor> Close enough.
20:17:28 -!- oerjan has joined.
20:25:13 <kallisti> !perl @a = qw(a b c); print splice @a, 0, 5
20:25:16 <EgoBot> abc
20:25:41 -!- azaq23 has joined.
20:25:49 -!- azaq23 has quit (Max SendQ exceeded).
20:25:53 <kallisti> !perl @a = qw(a b c); map {print "ha" if undefined } splice @a, 0, 5
20:25:54 <EgoBot> hahaha
20:26:10 <kallisti> !perl @a = qw(a b c); map {print "ha" if !defined } splice @a, 0, 5
20:26:23 <kallisti> sanity. check.
20:33:11 <fizzie> > 9^9^9
20:33:16 <lambdabot> mueval: ExitFailure 1
20:33:16 <lambdabot> mueval: Prelude.undefined
20:33:20 <fizzie> (Just checking.)
20:33:30 <fizzie> I guess "Infinity" was closer.
20:40:24 <oerjan> > 9^9
20:40:25 <lambdabot> 387420489
20:40:41 <kallisti> !perl sub test(\$) { my ($s) = @_; return my (defined wantarray? undef : $s) = 2; } local $, = ' '; my $s = 1; print test $s; test $s; print $s
20:40:41 <EgoBot> Can't declare null operation in "my" at /tmp/input.23478 line 1, near ") ="
20:40:48 -!- calamari has joined.
20:40:53 <kallisti> NOOOOOO
20:41:00 <kallisti> my completely beautiful code is ruined.
20:41:07 <kallisti> I have to use /multiple lines/
20:41:58 <oerjan> i'd sort of think the point of my is that it's lexically scoped at compile-time
20:42:38 <kallisti> !perl sub test(\$) { my ($s) = @_; return my (defined wantarray? undef : $s) = 2; } local $, = ' '; my $s = 1; print test $s; test $s; print $s
20:42:38 <EgoBot> Can't declare null operation in "my" at /tmp/input.23726 line 1, near ") ="
20:42:52 <kallisti> !perl sub test(\$) { my ($s) = @_; return (defined wantarray? undef : $$s) = 2; } local $, = ' '; my $s = 1; print test $s; test $s; print $s
20:42:52 <EgoBot> Modification of a read-only value attempted at /tmp/input.23799 line 1.
20:43:13 <kallisti> !perl sub test(\$) { my ($s) = @_; return (defined wantarray? (undef) : $$s) = 2; } local $, = ' '; my $s = 1; print test $s; test $s; print $s
20:43:14 <EgoBot> Assignment to both a list and a scalar at /tmp/input.23860 line 1, near "2;"
20:43:38 <kallisti> !perl sub test(\$) { my ($s) = @_; return (defined wantarray? (undef) : ($$s)) = 2; } local $, = ' '; my $s = 1; print test $s; test $s; print $s
20:43:38 <EgoBot> 22
20:43:45 <kallisti> lol
20:44:39 <kallisti> okay maybe there's a better way to write that in one line.
20:44:54 <kallisti> !perl sub test(\$) { my ($s) = @_; return (defined wantarray? $_ : $$s) = 2; } local $, = ' '; my $s = 1; print test $s; test $s; print $s
20:44:54 <EgoBot> 22
20:45:18 <kallisti> !perl sub test(\$) { my ($s) = @_; return defined wantarray? $_ : $$s = 2; } local $, = ' '; my $s = 1; print test $s; test $s; print $s
20:45:19 <EgoBot> 22
20:45:31 <kallisti> it's more confusing without the parens I think.
20:46:19 <kallisti> !perl sub test(\$) { my ($s) = @_; return defined wantarray? $_ : $$s = 2; } local $, = ' '; my $s = 1; print test $s; test $s; print $s; print
20:46:20 <EgoBot> 222
20:46:26 <kallisti> also it overwrites $_
20:46:34 <kallisti> !perl sub test(\$) { my ($s) = @_; return defined wantarray? my $_ : $$s = 2; } local $, = ' '; my $s = 1; print test $s; test $s; print $s; print
20:46:34 <EgoBot> 22
20:46:37 <kallisti> there we go.
20:47:50 <kallisti> return (defined wantarray? my $_ : $$s) = join "\n", (splice @lines, 0, $n // $line_cap);
20:47:56 <kallisti> this is my opus magnus.
20:48:46 <kallisti> I could also write my (undef)
20:49:01 <kallisti> er wait no that wouldn't work
20:49:37 -!- Phantom_Hoover has quit (Ping timeout: 240 seconds).
20:50:10 <kallisti> !perl sub test(\_) { my ($s) = @_; return defined wantarray? my $_ : $$s = 2; } local $, = ' '; my $s = 1; print test $s; test $s; print $s; print
20:50:11 <EgoBot> Malformed prototype for main::test: \_ at /tmp/input.24632 line 1.
20:50:21 <kallisti> hmmm, I would think \_ could be a valid prototype
20:50:36 <kallisti> it looks like a nice comfy chair (without legs)
20:51:06 <fizzie> What'd it mean? I mean, _'s not a sigil.
20:51:23 <kallisti> _ means to use $_ if no argument is supplied.
20:51:29 <zzo38> I think the multimana semiring (from Icosahedral RPG) is like (Cont Natural Five) because, a mana can be (Five -> Natural) to tell you how many copies of a prime factor, and a mana -> Natural tells you what integer multiple of that mana is added together. It won't work to read the amount of your mana in Haskell, because the set of manas is infinite.
20:51:30 <kallisti> it's otherwise treated as $
20:52:01 <fizzie> Yes, but: "Any backslashed prototype character represents an actual argument that absolutely must start with that character." That's not going to work for a \_.
20:52:14 <kallisti> that's a dumb rule. :P
20:52:29 * kallisti is talking about what should be.
20:52:52 <kallisti> hmmm
20:53:05 <fizzie> So you'd like to get a scalarref to $_ if the argument is missing?
20:53:06 <kallisti> plenty of perl operators mutate $_ in place
20:53:11 <kallisti> yes.
20:53:40 <kallisti> I don't actually need it right now
20:53:46 <kallisti> it's just something I could see being useful to have.
20:53:52 <zzo38> Does that make a semiring if the result type (r) of a continuation is a semiring?
20:53:53 <kallisti> when emulating perl operators.
20:55:33 <kallisti> fizzie: but I'm pretty sure you can just do that with manual hacks.
20:55:41 <kallisti> since $_ can be modified in-place anywhere
20:56:28 <kallisti> just make the argument optional. if it's missing, modify a non-lexically bound $_
20:56:29 <zzo38> (Of course to implement in Haskell requires additional constraints)
20:58:38 <fizzie> !perl sub foo (;\$) { my $ref = shift // \$_; $$ref = "ha"; } $_ = "x"; foo; my $bar = "y"; foo $bar; print "$_ $bar";
20:58:38 <EgoBot> ha ha
20:58:41 <kallisti> fizzie: man I really wish Perl 6 were a branched language and perl 6 were just some basic improvements to perl 5.
20:59:54 <kallisti> fizzie: hm
21:00:26 <kallisti> oh I misread. yes that's basically what I was suggesting.
21:00:56 <fizzie> It doesn't even arguably look that bad, since it's just a //\$_ piece of line-noise.
21:01:12 <kallisti> ($ref? $$ref : $_) = "ha";
21:01:14 <kallisti> works as well.
21:01:28 <kallisti> fizzie: I am immune to perl line noise..
21:01:31 <kallisti> it doesn't bother me.
21:01:33 <fizzie> /\/\/ do the wave.
21:02:21 <kallisti> I look at perl and see a beautiful language. :)
21:02:48 <olsner> kallisti: ocular adjustment required
21:03:02 <kallisti> NOPE I SEE WITH MY BRAIN.
21:03:10 <kallisti> I see beauty with my brain anyway.
21:03:19 <kallisti> probably other things too!
21:04:16 <kallisti> oh hey I just found a great way to grab two elements at a time.
21:04:44 <kallisti> while( my ($x,$y) = splice @array, 0, 2 ) { ... }
21:04:53 -!- monqy has joined.
21:04:56 <kallisti> @array needs to be something you don't mind throwing away.
21:04:57 <lambdabot> Arrr!
21:04:57 <oerjan> @tell ais523 <ais523> elliott: the most obvious case is if there's only possibly one reference to the input array [...] <-- congratulations on reinventing the Clean language
21:04:57 <lambdabot> Consider it noted.
21:06:01 -!- Phantom_Hoover has joined.
21:06:32 <kallisti> return (defined wantarray? my $_ : $$s) = join "\n", (splice @lines, 0, $n // $line_cap);
21:06:35 <kallisti> monqy: look at this
21:06:47 <monqy> is that perle
21:06:50 <kallisti> yes
21:07:14 <fizzie> kallisti: Isn't there a module for that?-) (Grabbing two elements from a list at a time.)
21:07:23 <kallisti> fizzie: List::MoreUtils
21:07:36 <fizzie> Right, the well-named "natatime".
21:07:57 <fizzie> It's natatime! Let's all nata the nat up.
21:08:00 <kallisti> it's not standard though. splice is built-in and arguably takes less code.
21:08:10 <fizzie> But is it FAST.
21:08:12 <kallisti> since natatime uses an iterator object so you need a line before the loop to create it.
21:08:28 <kallisti> fizzie: probably not as fast no.
21:08:39 <kallisti> because it deletes and resizes the array.
21:09:01 <kallisti> fizzie: but yes that's always my first question when talking about something in perl.
21:12:19 <kallisti> for(my $x; $x+1 != $#array; ++$x)
21:12:27 <kallisti> fizzie: fastest natatime
21:13:28 <kallisti> my ($a,$b) = @array[$x,++$x]
21:13:34 <oerjan> <elliott> ais523: I was going for data EvenList a = Nil | Cons a a (EvenList a) <-- type EvenList a = [(a,a)] kthxbye
21:14:02 <fizzie> kallisti: Also the most scientific benchmark ever:
21:14:03 <fizzie> $ perl -e 'use Time::HiRes qw(time); use List::MoreUtils qw(natatime); { my @a; $#a = 10000000; $t1s = time; while (my ($x, $y) = splice @a, 0, 2) {} $t1e = time; } { my @a; $#a = 10000000; $t2s = time; for (my $it = natatime 2, @a; my ($x, $y) = $it->(); ) {} $t2e = time; } print $t1e-$t1s, " ", $t2e-$t2s, "\n";'
21:14:03 <fizzie> 1.51157808303833 2.85868787765503
21:14:19 <fizzie> Splice is them victorious.
21:14:24 <kallisti> oh wow.
21:14:29 <kallisti> I wouldn't expect that.
21:15:33 <kallisti> perhaps perl has a way to efficient remove elements from the front of a list or something?
21:15:37 <kallisti> *efficiently
21:15:49 <fizzie> I might have done something "worng", like my ADSL router configuration interface puts it. But anyhow.
21:16:12 <kallisti> also I guess natatime is written in perl whereas splice is in C, but that's still only constant factors so...
21:16:21 <kallisti> maybe at higher inputs natatime beats splice?
21:17:50 <fizzie> Added a zero (well, technically, two zeros), but ran out of memory. :/
21:18:05 <fizzie> Doubling goes to 3.05185985565186 5.66645216941833, that looks quite O(n) that far.
21:18:16 <kallisti> huh
21:18:17 <Phantom_Hoover> There's a Cave Story+??
21:18:29 <kallisti> so yeah I guess splice can just do efficient deletes at the front (and maybe the end) of arrays.
21:19:36 <oerjan> <kallisti> my computer just overheated on my bed. <-- you are not supposed to use it for that, sheesh
21:19:53 <kallisti> fizzie: perl works hard to maintain its position of just slightly slower than most scripting languages.
21:21:41 <fizzie> Well, you know the old adage, you have to run hard in order to run a still. Or something like that, anyway. (I think it's talking about outrunning the cops.)
21:21:53 <kallisti> yes.
21:22:06 <Deewiant> Phantom_Hoover: Has been for a while. (Though it's rather new for PC.)
21:22:08 <kallisti> prohibition era fuck yeaaaah
21:22:21 <Phantom_Hoover> OMG the bundle has Gratuitous Space Battles.
21:22:44 <Phantom_Hoover> This is definitely worth the 70p I plan to pay for it.
21:23:08 <Deewiant> You'll get neither CS+ nor GSB for 70p
21:24:23 <Phantom_Hoover> Oh FFS.
21:24:34 <Phantom_Hoover> Why are people so infuriatingly ethical.
21:25:10 <Deewiant> I already owned them both and I still paid well above the average, so... sorry, I guess?
21:25:20 <Phantom_Hoover> I hate you so much.
21:25:50 <Deewiant> In fact, only 3 new games out of 7, it appears
21:26:00 <Phantom_Hoover> Henceforth, the part of Finland Deewiant lives in is officially in Sweden.
21:26:13 <kallisti> in a C program where are static variables allocated?
21:26:21 <Deewiant> I'll have to check with the local authorities; I doubt it
21:26:33 <Phantom_Hoover> Pah, what do they know.
21:28:25 <fizzie> That's not really a C question but a compiler question, but generally I'd expect them to end up in either the .data, .rodata or .bss section of the executable, depending on constness and zeroinitiality.
21:30:42 <kallisti> fizzie: yeah I knew it wasn't a language question. I just wanted a general idea of what happens there regardless of compiler.
21:31:11 <kallisti> I often ask about a "language" when I really mean "what generally happens in many implementations"
21:33:02 <Deewiant> You totally lack proper DS9K attitude
21:33:20 <fizzie> I vaguely recall a comp.lang.c thread about whether the standard says anything about the value of a local (in-function) static variable before the function has been executed for the first time.
21:33:36 <fizzie> It's slightly hard to test for that empirically.
21:33:51 * kallisti hates language lawyery answers to such implementation-related questions.
21:34:29 <Deewiant> The correct answer to a randomly chosen C question is usually "it's undefined; if you're feeling lucky, read the documentation for your environment, they might tell you"
21:34:34 <kallisti> it doesn't have to be in the standard. I just want a general idea of what you can typically expect, if anything.
21:34:46 <kallisti> Deewiant: yes that happens a lot. :P
21:35:10 <Deewiant> Unfortunately, implementors aren't typically dickish enough for such answers to be realistic
21:36:37 <kallisti> so as it turns out
21:36:42 <kallisti> Perl is a good language to write IRC bots in.
21:37:04 <monqy> oh?
21:37:36 <kallisti> fizzie: do you know of a way to "delay" interpolation. Basically to have a string with $ variables in it and then fill those variables in later.
21:37:47 <fizzie> Eval. :p
21:37:52 <kallisti> oh... yes.
21:38:02 <kallisti> I always forget the eval hacks.
21:38:35 <kallisti> just have to make sure I don't expose anything to IRC.
21:38:38 <oerjan> kallisti: substitution?
21:38:47 <kallisti> oerjan: yes I use that currently for one thing.
21:38:49 * kallisti vague.
21:38:52 <fizzie> Probably would end up with quoting-related issues.
21:39:21 <fizzie> I guess with no strict refs a single s///e might be able to do it too.
21:39:46 <oerjan> !perl for ($x = 1; x < 5; x++) { s/.*/$x/; print; }
21:39:46 <kallisti> a... single one?
21:39:46 <EgoBot> Can't modify constant item in postincrement (++) at /tmp/input.29417 line 1, near "x++"
21:39:52 <oerjan> oops
21:39:59 <oerjan> !perl for ($x = 1; $x < 5; $x++) { s/.*/$x/; print; }
21:40:00 <EgoBot> 1234
21:40:56 <fizzie> s/\$(\w+)/${$1}/ge or something like that? I don't really know. IIRC you can use a string as a scalarref with no strict refs.
21:41:12 <kallisti> yes that's correct
21:41:31 <Vorpal> the "lifetime warranty" nonsense just reached new heights. I saw an advert for a GPU having "double lifetime warranty"
21:41:36 <Vorpal> I have no clue what that means
21:42:03 <calamari> double rainbow?
21:42:14 <oerjan> Vorpal: clearly it means for the lifetime of your heir.
21:42:15 <Vorpal> heh
21:42:20 <kallisti> also if I expose that feature to IRC then it would prevent things like @{[`find / -type f -delete`]}
21:42:24 <Vorpal> oerjan, right
21:42:55 <kallisti> that would be possible with a basic eval.
21:44:03 <fizzie> !perl $a = 1; $b = 2; sub foo { my $s = shift; my ($a, $b) = (42, 69); $s =~ s/\$(\w+)/${$1}/eg; return $s; } print foo('a$a, b$b');
21:44:03 <EgoBot> a1, b2
21:44:20 <fizzie> Apparently won't go with lexical scope there, unsurprisingly.
21:44:32 * oerjan wonders what's wrong with his suggestion.
21:45:33 <Vorpal> new humble bundle btw
21:46:53 <fizzie> oerjan: I'm not sure what your suggestion was. The !perl snippet seemed somewhat unrelated for turning a string '$foo $bar' (received from somewhere) into the string '[current value of $foo] [current value of $bar]'.
21:47:00 <kallisti> fizzie: what I'll probably end up doing is using a hash so s/\$(\w+)/$vars{$1}//$$1"
21:47:03 <kallisti> er
21:47:06 <kallisti> accidentally hit enter.
21:47:40 <kallisti> fizzie: what I'll probably end up doing is using a hash so s(\$(\w+))($vars{$1}//'$'.$1)e
21:48:31 <fizzie> I've done a substitute-with-keys-from-a-hash-with-s///e too, though I think I used %foo% or some-such for the placeholders, since it's clearly not "real" variable interpolation.
21:49:09 <fizzie> Also so DOS-batch-file-retroistic. If I recall them right.
21:49:20 <fizzie> %s were involved anyway.
21:50:28 <kallisti> Python has a modified printf where you can pass in a dictionary and %(name)s will interpolate to d['name']. it's pretty handy.
21:51:02 <fizzie> %var%, but %N for positional params? There was some unsymmetry like that.
21:53:19 * kallisti might learn Ruby one of these days.
21:54:30 -!- derrik has quit (Quit: gone).
21:55:35 <kallisti> but... perl is so comfy as my scripting language. feels nice.
22:05:26 -!- Patashu has joined.
22:08:10 -!- derdon has joined.
22:15:56 <kallisti> fizzie: why would I want to use autoloader?
22:18:07 -!- Darth_Cliche has joined.
22:21:04 -!- Darth_Cliche has changed nick to Klisz.
22:21:47 -!- DCliche has quit (Ping timeout: 268 seconds).
22:23:10 -!- Jafet has joined.
22:46:00 -!- MDude has quit (Read error: Connection reset by peer).
22:47:08 -!- Nisstyre has quit (Read error: Connection reset by peer).
22:52:17 -!- MDude has joined.
22:53:00 -!- MSleep has joined.
22:53:36 -!- MSleep has quit (Read error: Connection reset by peer).
22:53:59 -!- MSleep has joined.
22:57:23 -!- MDude has quit (Ping timeout: 276 seconds).
22:58:37 <kallisti> aha. so that's why I kept having problems when I didn't qualify all of my imported subroutines.
22:58:49 <kallisti> I put my package declaration /after/ my imports.
22:59:12 <kallisti> so the names were going into the main specify, and then I switched over to my package namespace, which didn't have those names.
22:59:46 <kallisti> s/specify/namespace (?#....?)/
23:01:37 <kallisti> fizzie: http://perldoc.perl.org/perlmod.html#BEGIN%2c-UNITCHECK%2c-CHECK%2c-INIT-and-END
23:01:45 <kallisti> this is my favorite example program in all the docs.
23:01:58 <kallisti> "The begincheck program makes it all clear, eventually"
23:02:59 <zzo38> I know how DOS batch files work; it is %var% for environment variables and %1 for parameter 1 and so on.
23:03:46 <zzo38> Do you know if there is any such things as continuation semiring?
23:04:05 <kallisti> wow "Note that END code blocks are not executed at the end of a string eval(): if any END code blocks are created in a string eval(), they will be executed just as any other END code block of that package in LIFO order just before the interpreter is being exited."
23:07:02 <kallisti> I wonder if anyone actually uses UNITCHECK, CHECK, or INIT
23:07:59 <kallisti> I guess UNITCHECK could be useful.
23:08:17 -!- MSleep has quit (Quit: later chat).
23:11:26 <kallisti> " Because the old-fashioned syntax is still supported for backwards compatibility, if you try to use a string like "This is $owner's house" , you'll be accessing $owner::s ; that is, the $s variable in package owner , which is probably not what you meant. "
23:11:33 <kallisti> wow, that's a nice little gotcha
23:11:54 -!- Nisstyre has joined.
23:12:17 <kallisti> !perl use LWP'Simple 'get'; print get("http://www.google.com/");
23:12:18 <EgoBot> Can't locate LWP/Simple.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.10.1 /usr/local/share/perl/5.10.1 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 /usr/local/lib/site_perl .) at /tmp/input.6122 line 1.
23:12:31 <kallisti> heh.
23:12:36 * kallisti is going to use ' instead of :: now :P
23:15:00 <kallisti> If you have a package called m, s, or y, then you can't use the qualified form of an identifier because it would be instead interpreted as a pattern match, a substitution, or a transliteration.
23:15:04 <kallisti> bahahahaha
23:15:17 * kallisti names his Perl web app framework m
23:18:15 <kallisti> it doesn't define an import method
23:18:33 <kallisti> so you have no way of accessing anything.
23:20:58 <kallisti> well you could use %m:: and access the symbol table
23:25:11 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
23:28:13 <zzo38> Can you make this kind of commutative applicative: a *> z = z <* a
23:28:31 <zzo38> And what is a communist functor/applicative/monad?
23:29:23 <kallisti> zzo38: functor/applicative/monads that believe in a class-less Haskell. (I have no idea)
23:29:48 -!- Nisstyre has quit (Ping timeout: 240 seconds).
23:31:51 -!- Nisstyre has joined.
23:32:15 -!- calamari has quit (Quit: Leaving).
23:34:40 <kallisti> > [1,2,3] *> [4,5,6]
23:34:41 <lambdabot> [4,5,6,4,5,6,4,5,6]
23:35:03 <kallisti> > [4,5,6] <* [1,2,3]
23:35:03 <lambdabot> [4,4,4,5,5,5,6,6,6]
23:35:16 -!- Nisstyre has quit (Max SendQ exceeded).
23:36:49 -!- Nisstyre has joined.
23:37:27 <kallisti> zzo38: you'd want flip (liftA2 const) = liftA2 (const id)
23:37:28 <zzo38> kallisti: It doesn't apply to list, it is not commutative
23:40:01 * Phantom_Hoover → sleep
23:40:02 -!- Phantom_Hoover has quit (Quit: Leaving).
23:40:59 <kallisti> zzo38: what do you want to be commutative again?
23:41:32 <zzo38> kallisti: I mean, some applicatives are commutative
23:41:54 <kallisti> yes
23:42:26 <kallisti> zzo38: it sounded like you were asking if such a thing existed.
23:42:45 <zzo38> By writing like f <$> x <*> y = flip f <$> y <*> x
23:43:13 <zzo38> Apparently commutative monad is the same but with join.
23:43:13 <oerjan> :t (*>)
23:43:14 <lambdabot> forall (f :: * -> *) a b. (Applicative f) => f a -> f b -> f b
23:43:19 <oerjan> :t (<*)
23:43:19 <lambdabot> forall (f :: * -> *) a b. (Applicative f) => f a -> f b -> f a
23:44:03 <oerjan> zzo38: Maybe and Reader are commutative, iirc
23:44:17 <kallisti> maybe is, yes.
23:44:24 <zzo38> I know Maybe is commutative
23:44:39 <kallisti> then what was your question?
23:44:51 <kallisti> << zzo38> Can you make this kind of commutative applicative: a *> z = z <* a
23:45:10 <oerjan> any applicative commutative in the usual sense should fulfil that
23:45:23 <zzo38> My question is to do a *> z = z <* a rather than f <$> x <*> y = flip f <$> y <*> x are there a difference?
23:45:29 <kallisti> no
23:45:38 <kallisti> well
23:45:42 <oerjan> erm there _might_ be
23:45:55 <kallisti> for *>, f = const id
23:46:02 <zzo38> And is there a different between commutative applicative and commutative monad? Commutative applicative makes more sense to me
23:46:03 <kallisti> for <*, f = const
23:46:34 <kallisti> :t flip const
23:46:35 <lambdabot> forall b a. a -> b -> b
23:46:37 <kallisti> :t flip (const id)
23:46:38 <lambdabot> forall a b. a -> b -> a
23:46:45 <oerjan> zzo38: i think i showed the other day that they are the same thing, you just apply an extra join to get the monad version
23:47:07 <oerjan> or an extra return to get the applicative one
23:47:23 <zzo38> oerjan: Yes, I think elliott wrote the code for the commutative monads and it seem to me, it is the same thing but with join.
23:47:44 <oerjan> do x <- mx; y <- my; f x y = join $ liftM2 f x y
23:48:37 <oerjan> er
23:48:37 <zzo38> oerjan: Yes, that was the code they showed to me and I realized it is same as your code
23:48:44 <oerjan> * do x <- mx; y <- my; f x y = join $ liftM2 f mx my
23:48:53 <zzo38> Yes that is better
23:49:20 <kallisti> oerjan: is there an applicative that isn't a monad?
23:49:34 <oerjan> liftM2 f mx my = do x <- mx; y <- my; (\x y -> return (f x y)) x y
23:50:27 <oerjan> kallisti: a free applicative defined with a GADT, for example
23:50:37 <kallisti> "free"?
23:51:24 <oerjan> data FreeA where Pure :: a -> FreeA a; (:<*>) :: (FreeA (a -> b)) -> FreeA a -> FreeA b
23:51:28 <oerjan> i think
23:51:32 <kallisti> oh that kind of free.
23:51:48 * kallisti didn't know that had a name.
23:52:28 <oerjan> um i'm not sure if that's quite right, but something like that; anyhow the point is to construct something which obviously allows _just_ the Applicative operations
23:53:17 <oerjan> that thing above is probably too simple
23:54:34 <oerjan> it keeps getting discussed how to make an Applicative which isn't a Monad and i keep forgetting the examples
23:55:37 <kallisti> is co-applicative a thing?
23:56:11 <oerjan> heh
23:56:22 <oerjan> i don't know
23:56:37 <kallisti> impure :: FreeA a -> a
23:57:59 <kallisti> s/FreeA/g/
23:58:45 <kallisti> but what would (>*<) be?
23:59:12 -!- copumpkin has joined.
←2011-12-12 2011-12-13 2011-12-14→ ↑2011 ↑all