←2010-06-09 2010-06-10 2010-06-11→ ↑2010 ↑all
00:00:23 <oerjan> originally lisp was intended to have a syntax (M-expressions) but everyone found working directly with the AST format (S-expressions) more useful instead
00:01:06 <oerjan> the main downside is the sometimes confusing heap of parentheses
00:01:23 -!- relet has quit (Quit: Leaving.).
00:03:06 -!- coppro has joined.
00:06:07 <leBMD> Have you ever noticed that most esoteric languages are interpreted and never actually compiled?
00:06:47 <leBMD> I guess it's because no one wants to turn >#ajv% into assembly, since that would just be a nightmare.
00:08:46 <oerjan> there are people here who _have_ tried compiling befunge, though
00:09:08 <oerjan> it was _designed_ to be hard to compile
00:11:01 <leBMD> You do have a point.
00:11:38 <oerjan> brainfuck on the other hand, was the opposite, but i guess that's why you said "most" :)
00:11:46 <leBMD> If I had enough knowledge in ASM, I'd try to make a lolcode compiler.
00:11:48 <leBMD> yeah
00:12:20 <oerjan> compiling via C is also a popular option
00:13:46 <leBMD> true
00:13:52 <oerjan> for that matter there's nothing preventing compiling into a higher-level language; one of the few "compilers" i've made (i put it in quotes because it did _very_ little work) compiled unlambda to ocaml
00:14:01 <leBMD> I made a lolcode library once, but it wasn't the same as making a compiler program.
00:14:43 <leBMD> I suppose. I just always think low-level when I hear "compile".
00:14:47 <oerjan> (few _might_ be == 1 btw, i've certainly never compiled anything advanced)
00:15:25 <oerjan> leBMD: are you new here? i don't recognise your nick
00:15:42 <leBMD> I've been on about once. Other than that, yeah I'm new here.
00:16:04 <leBMD> I mainly just lurk the wiki and every once in a while see if my piet forum has any members.
00:16:23 <oerjan> in that case, welcome to #esoteric, where we guarantee you'll lose your sanity -- oh wait that's the IWC forum motto
00:16:42 <oerjan> (irregular webcomic)
00:17:00 <oerjan> (where i lurk)
00:17:17 <leBMD> lol
00:17:52 <oerjan> oh piet? you're not taneb from that forum by any chance? (he currently has a piet program avatar)
00:18:36 <leBMD> nope
00:18:39 <leBMD> I'm Batmanfiestdestiny
00:18:51 <oerjan> huh
00:19:10 <oerjan> (i meant the IWC forum btw, i'm not on the piet forum)
00:19:13 <leBMD> are there multiple piet forums?
00:19:15 <leBMD> oh, lol
00:19:47 <leBMD> piet got VERY popular when a card of it was made for Perplex City, so it's gotten a bit more mainstream.
00:20:21 <oerjan> however, IWC is made by the inventor of Piet, in case you didn't know
00:20:47 <leBMD> oh, I had no idea
00:21:08 <oerjan> (i've not seen any esolang discussion on the iwc forum though)
00:21:48 -!- iamcal has quit (Ping timeout: 240 seconds).
00:21:56 <oerjan> he's just passed on to other endeavors.
00:22:11 <leBMD> esolangs to the rest of the world are kind of like dead kittens: some people find them interesting, but most people try to ignore them.
00:22:19 <leBMD> and I understand that.
00:22:20 <cheater99> alrite
00:22:20 -!- cal153 has joined.
00:22:33 <oerjan> i'd try to ignore people who found dead kittens interesting, personally
00:22:42 <leBMD> lol
00:23:12 <cheater99> oerjan, ok, makes sense
00:24:15 <oerjan> cheater99: i am a _little_ unsure which of my comments you are referring to, here :D
00:24:27 <oerjan> (you may of course answer "all of them")
00:25:36 <cheater99> you know what confuses me
00:25:51 <cheater99> why did befunge use <v^> instead of hjkl
00:26:09 <cheater99> oerjan: some of them
00:26:13 <cheater99> BUT NOT ALL.
00:26:14 <oerjan> cheater99: um visual intuitiveness?
00:26:16 <leBMD> because <v^> looks more arrow-ey, I think.
00:26:24 <cheater99> hjkl is totally intuitive
00:26:41 <oerjan> cheater99: i see we have managed to make you insane already
00:26:44 <leBMD> h != go left, in my mind.
00:27:42 <cheater99> that's because you use notepad.exe to edit your code
00:28:01 <cheater99> and play only games inferior to ADVENT
00:28:12 <cheater99> er, nethack
00:28:14 <cheater99> !
00:28:19 -!- zzo38 has joined.
00:28:28 <oerjan> leBMD: btw Mark Chu-Carroll of the Good Math, Bad Math blog had a blog series about esolangs a few years ago
00:28:51 <leBMD> well that's cool
00:28:53 <cheater99> but the only thing better than ADVENT is nethack, and there's nothing above, and anything else is worse than ADVENT, so that's fine
00:28:55 <zzo38> I know there is a Japanese company that will make customized mahjong tiles. I don't know if there is of cards?
00:28:57 <leBMD> mmm,nethack is a fun game
00:29:06 <cheater99> good math bad math?
00:29:14 <oerjan> cheater99: i thought we had already established i use vim. i confess to frequently using the arrow keys though.
00:29:21 <cheater99> me google sit
00:29:24 <cheater99> googles it
00:29:35 <cheater99> oerjan, that's not using vim! that's pretending to use it :p
00:31:51 <leBMD> COMPLETELY RANDOM NOTE: I hate it when a site gets one good thing in it, and then they ignore all the other good parts and turn the one famous thing into a sort of gimmick.'
00:33:18 <cheater99> why
00:33:53 <oerjan> cheater99: actually i sometimes _do_ use hjkl, because of a bug in windows gvim that makes arrow keys not work in the selection modes
00:34:26 <leBMD> because, in my opinion, when something like a blog gets one good story or game and they turn it into a site gimmick, it kind of ruins the rest of the site for me when I'm trying to see the other stuff.
00:34:52 <oerjan> however when i'm in insertion mode arrow keys feel more natural than whatever contortion i need to move around otherwise
00:34:54 -!- kar8nga has quit (Remote host closed the connection).
00:40:09 <oerjan> hm i also use space rather than l sometimes, like when replacing a particular number of characters with c<n><space>
00:42:05 -!- MizardX has quit (Ping timeout: 276 seconds).
00:47:21 <zzo38> See this message: http://forums.thedailywtf.com/forums/p/17274/224223.aspx#224223
00:47:50 <zzo38> The lights on my keyboard are broken, how do I fix it?
00:50:01 <oerjan> cheater99: btw i don't know if you know haskell or ml (sml/ocaml), but their abstract data types are like the perfect match for implementing ASTs
00:50:36 <leBMD> well, I gotta go
00:50:40 <leBMD> seeya!
00:51:05 -!- leBMD has quit (Quit: why date people when you can sit in your basement reading H.P. Lovecraft stories?).
00:52:19 <oerjan> data BrainfuckCMD = Increment | Decrement | Output | Input | Left | Right | Loop [BrainfuckCMD]
00:52:38 <oerjan> (shush everyone who says ASTs are overkill for Brainfuck)
00:54:35 <cheater99> oerjan, that's what i heard.
00:55:47 -!- jabb has quit (Quit: Page closed).
01:01:13 <Sgeo_> oerjan, I used something a bit more complicated. Then again, it's also probably a little bit bad for lazy BF executionb
01:01:16 <Sgeo_> *execution
01:01:49 <oerjan> Sgeo_: well if you want to optimize stuff you probably want a more complicated one
01:02:03 <oerjan> so you can rewrite it
01:19:52 -!- zzo38 has quit (Remote host closed the connection).
01:22:21 -!- cal153 has quit (Ping timeout: 264 seconds).
01:45:12 -!- augur has joined.
02:05:21 -!- cal153 has joined.
02:22:43 -!- Oranjer has joined.
02:41:51 -!- lament has joined.
03:02:29 -!- cheater99 has quit (Ping timeout: 276 seconds).
03:04:03 <uorygl> Olen, olet, on.
03:04:36 <uorygl> Koira nostaa kiven.
03:06:26 <uorygl> Syödä... drat, that's one of those verbs ending in one vowel.
03:06:34 * uorygl looks up the conjugation again.
03:07:08 <uorygl> Syön, syöt, syö. Okay.
03:07:34 <uorygl> Syön koiran.
03:07:41 <uorygl> Eating dogs is not a very nice thing to do.
03:08:31 <uorygl> Let's see, the negation verb is en, et, ei, and it takes syö, whatever form that is.
03:08:36 <lament> why not?
03:08:40 <uorygl> En syö koiran.
03:08:48 <uorygl> I like dogs.
03:08:52 <lament> maybe you just don't know how to cook dogs properly
03:09:09 <lament> i like dogs too
03:09:15 <lament> they're good in a stew
03:09:46 <uorygl> Let's see. "To like" is pitää, and it takes the elative case... what case is that?
03:10:06 <uorygl> A locative case meaning "out of".
03:10:23 <uorygl> That doesn't make any sense, but okay.
03:10:53 <uorygl> So, pitän koirasta. I think.
03:11:09 <uorygl> Okay, it's actually pidän for some reason.
03:11:28 <uorygl> Koirasta is correct, though. Yay!
03:16:08 -!- cheater99 has joined.
03:22:06 -!- cheater99 has quit (Ping timeout: 258 seconds).
03:22:39 <oerjan> uorygl: http://en.wikipedia.org/wiki/Consonant_gradation#Finnish
03:24:34 <uorygl> Whoa.
03:25:01 -!- cheater99 has joined.
03:25:07 <oerjan> (why it is pidän iirc)
03:25:22 <uorygl> Mmkay, I think I understand the gist of that.
03:28:15 <uorygl> My mom's playing with our new Spöka. She's hugging it and saying "bork bork bork!"
03:28:23 -!- coppro has quit (Read error: Connection reset by peer).
03:43:08 -!- Gregor has joined.
03:43:18 <Gregor> LANGUAGE IDEA:
03:43:42 <Gregor> A language that insures type "safety" and progress through a technique called "recycling"
03:43:51 <oerjan> uorygl: the historical changes section of that article complicates matters even further >:D
03:44:03 <Gregor> By which any typing error is rectified by querying the garbage error and replacing the offending object with a dead one of the correct type.
03:44:16 <oerjan> Gregor: eek
03:44:18 <Gregor> *garbage collector
03:45:09 <uorygl> Naturally, this language should have no other features.
03:46:28 <Gregor> Whaaa? No, you could just take Java, remove all type annotations, and do this :P
03:46:44 <uorygl> Well, yes, you *could*.
03:47:11 <Gregor> X-P
03:49:04 <oerjan> hm how would this interact with cyclic structures
03:49:25 <oerjan> or even without actually
03:49:43 <oerjan> if object x of class X contains a reference to object y of class Y
03:49:51 <Gregor> Doesn't matter. Everything's reference based, so you just have to be able to revive the dead stuff.
03:50:18 <oerjan> now say both die, then x is revived
03:50:25 <oerjan> Gregor: reference _what_ based?
03:50:43 <Gregor> OK, you would need something to guarantee that no object is actually collected while it has references from half-dead objects.
03:50:53 <Gregor> But since the garbage collector sees all these anyway, that's trivial.
03:51:17 <oerjan> you couldn't really collect anything - it might be needed later
03:51:39 <Gregor> And THAT'S the greatest problem with this language design, eh? :P
03:51:47 <oerjan> the thing is _after_ x is revived, y is now live
03:52:00 <Gregor> Yeah, you have to transitively revive.
03:52:26 <oerjan> hm i guess that may not be that hard
03:52:48 <Gregor> If every object contains a bit for its liveness state, that's utterly trivial.
03:53:07 <Gregor> Just trace the objects and stop whenever you get to a living object, make sure you mark it living (and move it or whatever's necessary) before recursing.
03:55:12 <Gregor> I also concluded that it would be unbelievably awesome to write a paper giving the formal operational semantics of operational semantics :P
03:55:25 <oerjan> O_o
03:56:06 <Gregor> And try to prove things like transitive progress (if the language being represented in operational semantics progresses, then the operational semantics progress :P )
03:57:46 <Gregor> I figure that would be greek enough to be a shoe-in to POPL X-P
04:00:03 -!- zzo38 has joined.
04:01:26 <Gregor> *shoo-in
04:01:54 <Gregor> The problem with "shoe-in" vs. "shoo-in" is that both make perfect sense both as phrases and in the context :P
04:02:08 <zzo38> How I (and the DM) is idea about D&D game, is, some of the following:
04:02:21 <zzo38> * "Impossible" is the correct level of difficulty.
04:02:26 -!- coppro has joined.
04:03:13 <zzo38> * I can find ways of solving the game with preferably not anyone being dead (that especially includes all NPCs).
04:03:38 <zzo38> * Nothing ever happens quite as the DM expects.
04:04:14 <zzo38> What do you think?
04:28:21 -!- sshc has quit (Ping timeout: 264 seconds).
04:31:27 -!- pikhq has joined.
04:31:37 <pikhq> I should stop not being on IRC.
04:32:37 <zzo38> There is a log file too, in case you need it
04:32:45 <zzo38> But why should you stop not being on IRC?
04:32:51 <zzo38> Surely you can't be IRC always?
04:33:10 <pikhq> I NEVER SLEEP EVER EVER EVER
04:33:53 <pikhq> AND I LACK A LIFE
04:33:54 <pikhq> :P
04:40:49 -!- augur has quit (Ping timeout: 240 seconds).
04:44:31 -!- zzo38 has quit (Remote host closed the connection).
04:55:02 -!- augur has joined.
05:00:29 -!- augur has quit (Ping timeout: 240 seconds).
05:03:47 -!- pikhq has quit (Read error: Connection reset by peer).
05:04:34 -!- zzo38 has joined.
05:20:01 -!- sshc has joined.
05:33:32 -!- jabb has joined.
05:33:35 <jabb> hey all
06:03:29 -!- Oranjer has left (?).
06:19:16 -!- CakeProphet has quit (Ping timeout: 260 seconds).
06:38:38 -!- Mathnerd314 has quit (Ping timeout: 240 seconds).
06:41:30 -!- oerjan has quit (Quit: Good night).
06:47:40 -!- sebbu has quit (Ping timeout: 245 seconds).
06:48:15 -!- sebbu has joined.
07:01:27 -!- ZosMagistus has joined.
07:02:44 -!- FireFly has joined.
07:03:26 -!- ZosMagistus has left (?).
07:04:42 -!- augur has joined.
07:08:40 -!- tombom has joined.
07:09:33 -!- coppro has quit (Ping timeout: 260 seconds).
07:19:52 -!- zzo38 has quit (Remote host closed the connection).
07:30:56 -!- lament has quit (Ping timeout: 276 seconds).
07:32:15 -!- augur has quit (Remote host closed the connection).
07:32:28 -!- augur has joined.
07:45:04 -!- Vegabondmx has quit (Quit: Vegabondmx).
07:48:11 -!- Vegabondmx has joined.
07:51:59 -!- tombom has quit (Quit: Leaving).
07:59:59 -!- clog has quit (ended).
08:00:00 -!- clog has joined.
08:35:34 -!- Vegabondmx has quit (Quit: Vegabondmx).
08:36:03 -!- kar8nga has joined.
08:51:35 -!- Rugxulo has joined.
08:57:34 <Rugxulo> "The COBOL 2002 standard includes support for object-oriented programming and other modern language features." HA! (you can't keep OOP out of any language these days, can you??)
09:07:19 <Rugxulo> "COBOL has many reserved words (over 400), called keywords. The original COBOL specification supported self-modifying code via the infamous "ALTER X TO PROCEED TO Y" statement. This capability has since been removed."
09:07:26 <Rugxulo> awwwww
09:09:51 * Sgeo_ should slep now
09:11:08 <Rugxulo> u mislep'd dat
09:11:29 * Rugxulo sleps Sgeo_ with a lerge troot
09:11:38 -!- ais523 has joined.
09:12:04 <Sgeo_> moer roof that I need slep
09:12:10 -!- ais523 has quit (Read error: Connection reset by peer).
09:12:16 <Sgeo_> :(
09:12:21 -!- ais523 has joined.
09:13:06 <Rugxulo> cheater99: according to Wikipedia, OpenCobol translates to C
09:13:06 <Sgeo_> ;0
09:13:28 <Sgeo_> im tired does it show/
09:14:18 <Rugxulo> cheater99: parser and scanner in Bison and Flex, too
09:20:48 <Rugxulo> "This makes it incompatible with the GNU General Public License (GPL) because restrictions exist regarding the use of the term PHP."
09:21:02 <Rugxulo> uh, the term "Linux" is trademarked, does that mean Linux isn't compatible??? :-/
09:21:39 <ais523> Rugxulo: it depends on the trademark licence, IIRC
09:22:03 <ais523> but even then, there could only be a problem if the product was designed in such a way that it couldn't be changed to remove the trademarks
09:22:15 <Ilari> ALTER and segmentation made nice combo in making weird code...
09:22:21 <ais523> think about the whole Firefox/Iceweasel thing, for instance
09:22:49 <ais523> in order to make a non-Mozilla-approved derivative of Firefox, you need to change all the trademarks
09:27:45 <Rugxulo> ah, so it's just GPL incompatible but still "free" (weird)
09:27:58 <Rugxulo> not that I care or use it, just vaguely curious
09:31:23 -!- augur has quit (Remote host closed the connection).
09:31:35 -!- augur has joined.
09:36:27 <Rugxulo> "In December 2008, the Supreme Court of the Australian Capital Territory ruled that Facebook is a valid protocol to serve court notices to defendants."
09:36:35 <Rugxulo> crazy ... I guess you learn something new every day ;-)
09:43:50 * Sgeo_ needs to sleep now
09:44:18 * Sgeo_ has often got without Internet access for some time...
09:45:08 <Rugxulo> g'nite
09:55:50 -!- MizardX has joined.
09:58:51 -!- atrapado has joined.
10:04:29 -!- BeholdMyGlory has joined.
10:10:36 -!- kar8nga has quit (Remote host closed the connection).
10:23:34 -!- clog has joined.
10:23:34 -!- clog has joined.
10:45:38 -!- MizardX has quit (Ping timeout: 240 seconds).
11:15:23 -!- CakeProphet has joined.
11:17:11 -!- Rugxulo has left (?).
11:53:27 -!- kar8nga has joined.
12:18:05 <AnMaster> ais523, hm do you know if latex has any command like \clearpage that only does the "force all floats before this point to end up somewhere before here" but not the "insert page break"-bit?
12:18:22 <ais523> I don't know
12:18:25 <AnMaster> ah
12:26:50 <fizzie> "If it is undesirable to have a pagebreak you can use the afterpage package and the following command:
12:26:51 <fizzie> \afterpage{\clearpage}
12:26:51 <fizzie> This will wait until the current page is finished and then flush all outstanding floats."
12:26:54 <fizzie> (Needed that once.)
12:27:19 <AnMaster> hm
12:27:19 <fizzie> It's not exactly what you want, but a bit like it.
12:27:39 <AnMaster> fizzie, yeah probably gives the same effect.
12:29:08 <fizzie> It might still put some floats after the page the command is in, though, so it's not quite "all pending floats must appear before this point". But they won't go very far away.
12:29:56 <AnMaster> no it doesn't what I intended
12:29:58 <AnMaster> hm
12:30:14 <fizzie> (The quoted text was from http://people.cs.uu.nl/piet/floats/node1.html which has some other float-placement tips too.)
12:30:31 <AnMaster> okay: I need the floats from one section to not appear in the middle of the next section. Have lots of floats, mostly scope images...
12:30:54 <AnMaster> without having a awkward half-empty page there
12:31:04 <AnMaster> which is what I got with plain \clearpage
12:31:08 <AnMaster> well, more than half-empty
12:31:18 <AnMaster> 98% empty or so
12:32:04 <AnMaster> but with the after page thing instead all the floats ended up just after the header for the next section
12:32:53 <fizzie> Sure, it'll fill the current page first before flushing the floats. I doubt there exists exactly what you want. Unless someone's done a package for it, of course.
12:33:03 <AnMaster> hah
12:33:16 <AnMaster> haven't found any, but not sure what on earth to search for
12:33:20 <fizzie> Anyway, twiddling those float-positioning parameters manually might help for a single document, but it's a bit hit-and-miss.
12:34:40 <AnMaster> fizzie, you mean miss-and-miss? I think the rotated floats might screw things up even more (some of them are timing diagrams from simulation of VHDL stuff... very wide..., needed to be rotated to not be shrunk into unreadability)
12:36:08 <fizzie> You can of course place all your floats manually if you can't seem to get LaTeX placement working.
12:36:36 <fizzie> Googling found a LaTeX 3 project document for a new float-placement algorithm that sounds like it'd support what you want, but that's not so helpful.
12:38:19 <AnMaster> heh
12:38:55 <AnMaster> fizzie, is latex 3 stalled or what is going on there?
12:39:28 <fizzie> No clue, really.
12:39:37 <CakeProphet> :o
12:39:40 <CakeProphet> my topic is still up
12:40:08 <fizzie> They classify LaTeX3 as "a long-term research project", which of course means it can't be "stalled"; it's just "long-term".
12:40:09 <AnMaster> fizzie, hm that's suspicious, that "really" there.
12:40:10 <AnMaster> ;P
12:40:39 <AnMaster> fizzie, hm do they seem to use 5 digit years in the schedules or not?
12:40:49 <AnMaster> if not everything is okay
12:42:17 <AnMaster> fizzie, any idea how to prevent having 3 pages of floats in the middle of a code listing in latex?
12:43:04 <AnMaster> it is rather awkward with { on one page and then 3 pages of figures before the code of that block shows up
12:43:54 <fizzie> The SVN repository for LaTeX3 experimental bits and pieces has last change two days ago, so it doesn't seem completely dead anyway.
12:45:08 <fizzie> Don't know about that. There's a \suppressfloats command, but it's just "don't put floats at top or bottom of current page", nothing that'd prevent it from putting separate float-pages wherever it wants.
12:45:28 <AnMaster> hm
12:47:54 <fizzie> You could move the floats earlier, so that they'd hopefully end up before the code. Or put them after the code listing. Or just not provide "p" in the placement specifiers, but then you won't get any only-floats pages at all.
13:12:28 <CakeProphet> I am lonely spaceship captain.
13:31:43 -!- ais523 has quit (Remote host closed the connection).
13:51:23 -!- kar8nga has quit (Remote host closed the connection).
14:03:37 -!- MizardX has joined.
14:11:30 -!- oktolol has joined.
14:21:22 -!- ais523 has joined.
14:55:21 -!- cpressey has joined.
15:41:21 -!- oerjan has joined.
15:41:46 -!- relet has joined.
15:45:45 <AnMaster> fizzie, hm? how would the p thing interact with rotated floats?
15:45:58 <AnMaster> moving them about did reduce the problem however
15:48:07 <oerjan> you shouldn't rotate a float, then it'll just sink
15:48:14 <AnMaster> XD
15:49:07 <AnMaster> oerjan, wait that can't be right
15:49:23 <AnMaster> oerjan, floats are point shaped aren't they? As indicated by the full name
15:49:49 * CakeProphet is designing a bitchin' roleplay-oriented MUD server
15:49:51 <AnMaster> so rotating them won't even make any sense, but nor will they sink
15:50:01 <CakeProphet> ...not esoteric, but awesome nonetheless
15:50:14 <oerjan> well maybe if you get them too close to each other, those points might be sharp
15:50:27 <AnMaster> oerjan, I guess you have a point there
15:51:07 <oerjan> AND I'M NOT AFRAID TO USE IT
15:52:04 <oerjan> CakeProphet: why would you want bitching in your MUD anyway...
15:52:15 <AnMaster> oerjan, hm, "<oerjan> AND I'M NOT AFRAID TO USE IT" looks rather nice in 9 points.
15:52:40 <oerjan> eek
15:52:42 <AnMaster> (okay, now I'm truly out of ideas for how to continue this)
15:52:56 <oerjan> good, good
15:53:00 <AnMaster> heh
15:53:01 <CakeProphet> oerjan: because it's bitchin'
15:53:04 <CakeProphet> ...so, question
15:53:07 <CakeProphet> what is a good C++ IDE?
15:53:31 <AnMaster> .... C++? You got to be joking
15:53:34 <CakeProphet> the more useful features and/or less clutter, the better.
15:53:48 * CakeProphet has never programmed in C++, to be honest. Until now.
15:54:13 <AnMaster> ais523, there? Any idea how much of a problem local packages will be during upgrade from jaunty to newer ubuntu?
15:54:18 <AnMaster> I plan to do that tomorrow
15:54:28 <CakeProphet> looking for tutorials as well. I'm sure there's plenty, but if there's a particularly good one let me know
15:54:31 <ais523> AnMaster: no idea really
15:54:47 <ais523> although I know I once had to repair a distro upgrade by hand because there was something screwy in /usr/local
15:55:19 <AnMaster> ais523, well in this case it is a local rebuild of some packages to select other options.
15:55:24 -!- Gregor has quit (Quit: Leaving).
15:55:37 <ais523> so long as the package isn't installed non-local and local at the same time, it should be fine
15:55:38 <AnMaster> ais523, and then there is the virtualbox package, which is the non-OSI one
15:55:49 <AnMaster> and thus is from their upstream
15:55:54 <ais523> although admittedly my only installed local packages (AFAIR) are INTERCAL compilers, which I wouldn't expect to be a typical case
15:55:55 <AnMaster> ais523, also what about PPAs?
15:56:00 <ais523> PPAs should be fine, IIRC
15:56:04 <AnMaster> ah good
15:56:05 <ais523> because the package manager understands them
15:56:29 <CakeProphet> ...it would be pretty cool if there was a Chrome/Firefox extension that attempted to predict which directory you're going to place a bookmark
15:56:32 <AnMaster> ais523, well okay, as long as it knows how to switch the "bleeding edge bzr" PPA to the relevant version
15:57:00 <ais523> PPAs specify which versions are OK for dependencies
15:57:11 <ais523> the PPA will just be uninstalled if it can't handle the versions you're installing
15:57:15 <ais523> and the distro upgrader warns you about that
15:57:16 <AnMaster> hm
15:57:39 <AnMaster> CakeProphet, how would it predict this?
15:58:09 <AnMaster> ais523, hm then what about changed config files? I turned off a number of services that were not visible in the GUI tool for services.
15:58:30 <ais523> it prompts you about those if it wants to change them itself as well as you changing them
15:58:35 <AnMaster> mostly stuff I only use sometimes, like postgresql, only use it when developing database stuff
15:58:35 <ais523> whether to use the old or the new version
15:59:01 <CakeProphet> AnMaster: previous placement and the title/content of the page
15:59:08 <AnMaster> ais523, it consists in this case of changed symlinks in the rc[0-6].d
15:59:29 <ais523> that isn't a config file...
15:59:36 <AnMaster> ais523, well it is in /etc/
15:59:44 <ais523> hmm, I wouldn't guarantee that that would work properly
15:59:49 <CakeProphet> for exampe... I just bookmarked a C++ tutorial in my "CS" directory... seems like you could devise a reasonable sophisticated algorithm to make those assumptions and automatically select CS as the directory on the save bookmark dialog.
15:59:53 <AnMaster> ais523, I was more thinking about the upstart stuff
16:00:02 <AnMaster> ais523, presumably it will have to be converted to that somehow
16:00:28 <CakeProphet> and then sort directory options by weighted relevance.
16:00:38 <CakeProphet> so you can pick them quickly without having to hunt through them.
16:05:12 <CakeProphet> ...C++ class declaration syntax is pretty nice compared to Java.
16:05:43 <oerjan> goddammit google what is it with your progressively more annoying frontpage design...
16:05:49 <oerjan> *you and your
16:06:50 <CakeProphet> oerjan: I discovered that you can turn it back to "normal" in your account options.
16:06:54 -!- jabb has quit (Quit: leaving).
16:06:58 <CakeProphet> though... I actually like having a pretty picture.
16:07:05 <AnMaster> <oerjan> goddammit google what is it with your progressively more annoying frontpage design... <-- it got even worse?
16:07:08 <CakeProphet> What I mainly dislike are the new buttons and the fade-in thing.
16:07:09 <oerjan> CakeProphet: i don't have an account and i don't want it.
16:07:36 <oerjan> AnMaster: there's a fading-in background image now...
16:07:44 <AnMaster> CakeProphet, where in the account settings?
16:08:30 <AnMaster> huh I just mistyped http://gooogle.com as https://[...]
16:08:34 <AnMaster> and I got "Google SSL Beta"
16:08:36 <CakeProphet> uh....... -checks-
16:08:38 <AnMaster> wtf :)
16:09:05 <AnMaster> I seriously can't see how they could possible handle the load
16:09:06 <oerjan> AnMaster: yes i saw an announcement for that ssl thing somewhere (i.e. probably reddit)
16:09:41 <CakeProphet> AnMaster: oh... apparently I liked... there's only the remove background image button
16:09:53 <AnMaster> background image?
16:10:09 <AnMaster> I haven't seen any bg image
16:10:17 <AnMaster> CakeProphet, also is this search settings or account settings?
16:10:32 <oerjan> AnMaster: google does changes gradually so not all users get them at the same time.
16:10:33 <CakeProphet> AnMaster: I'm apparently senile and no such option exists.
16:10:34 <CakeProphet> ...
16:10:51 <AnMaster> oerjan, hm I see
16:12:46 <oerjan> anyway i'm changing to advanced search as my homepage for now (again, like when they had that pacman thing)
16:13:46 <CakeProphet> there's also sites advertising that they have free google wallpapers.
16:13:50 <AnMaster> oerjan, I use about:blank for the "homepage"
16:15:20 <CakeProphet> The Next Web suggests going to the URL http://www.google.com/ncr (the "ncr" stands for "no country redirect") to restore the old-school Google search page, but the trick didn't work for us.
16:15:24 <CakeProphet> from some glob.
16:15:25 <CakeProphet> ... *blog
16:15:31 <CakeProphet> interesting typo.
16:15:54 <CakeProphet> doesn't seem to work though.
16:16:06 <oerjan> AnMaster: alas in IE the about pages (both :tab and :blank) have the annoying property that they disappear from the history when you open another page in the same tab
16:16:34 <Deewiant> about:blank does that in FF as well
16:16:46 <CakeProphet> I actually like the one that's a bunch of cherries. It's the one I have set now.
16:16:56 <oerjan> which means it's useless as a base for a tab you want to keep as a default open one
16:17:48 <oerjan> oh well google themselves has started messing up my history as well
16:18:08 <CakeProphet> ...though all the white blocks intersecting the picture looks really bad. They should have made the top bar transparent with some kind of fancy dynamic font color that contrasts well.
16:18:19 <CakeProphet> ...possibly too fancy.
16:18:32 <oerjan> (if i open a google suggested link in the same tab, the original google page disappears from the history list)
16:18:57 <CakeProphet> really? That's weird.
16:19:19 <oerjan> however it doesn't _really_ disappear
16:19:48 <CakeProphet> so... I think I have pretty much learned the basics of C++. didn't take long.
16:19:49 <oerjan> it only gets hidden, and if i go to the bottom page in history google reappears afterwards
16:20:07 <CakeProphet> the only thing that I was not familiar with was some of the non-C syntax and friend classes.
16:20:42 <CakeProphet> does C++ standard library have things like Java's ArrayList? hash tables?
16:21:03 <CakeProphet> mainly just want hash tables.
16:21:19 <CakeProphet> and maybe a linked list... so I don't have to hand code yet another one.
16:21:19 <Deewiant> C++0x has std::unordered_map
16:21:35 <Deewiant> std::map is like a TreeMap
16:21:39 <CakeProphet> is C++0x some kind of fancy new C++ I haven't heard about?
16:21:42 <Deewiant> ArrayList <-> std::vector
16:21:48 <Deewiant> Linked list <-> std::list
16:22:00 <Deewiant> C++0x is the upcoming standard
16:22:04 <CakeProphet> and these are all non-0x except for unordered_map
16:22:08 <Deewiant> Yep
16:22:33 <Deewiant> GCC and MSVC have std::hash_map but it's not standard
16:22:46 <CakeProphet> vector just automatically resizes like a Python list right?
16:22:51 <Deewiant> Aye
16:23:02 * CakeProphet wasn't sure how the algorithm worked.
16:23:42 -!- sshc has quit (Ping timeout: 265 seconds).
16:26:33 <CakeProphet> hmmm... interesting, so are instances in C++ constructed immediately when declared?
16:26:42 <Deewiant> On the stack, yes
16:27:00 <Deewiant> Classes are value types
16:27:11 <CakeProphet> oh okay.
16:27:29 <CakeProphet> so you'll still be passing around pointers if you want to get reference type semantics in C++
16:27:49 <Deewiant> Or references, but yeah
16:28:30 -!- zzo38 has joined.
16:28:35 <CakeProphet> ...I'm so used to garbage collection that I completely forgot that C++ doesn't do it.
16:29:21 <Deewiant> :-P
16:33:54 <zzo38> Do you think "impossible" is the correct level of difficulty in D&D game? Do you agree with the other things I put abou D&D game yesterday? (Read the log if you are unsure)
16:34:31 * CakeProphet is a WoD fan.
16:34:34 <CakeProphet> so.
16:34:50 <CakeProphet> My answer is "screw D&D"
16:35:18 <zzo38> What is WoD?
16:36:09 <Deewiant> World of Darkness
16:36:13 <Deewiant> (Presumably)
16:36:30 <CakeProphet> yes.
16:37:03 <CakeProphet> Operators new and delete are exclusive of C++. They are not available in the C language. But using pure C language and its library, dynamic memory can also be used through the functions malloc, calloc, realloc and free, which are also available in C++ including the <cstdlib> header file (see cstdlib for more info).
16:37:16 <CakeProphet> ....that sounds like a clusterfuck if you use C code in your C++ code.
16:38:19 <Deewiant> A bit
16:38:40 <zzo38> Maybe someone who knows D&D can answer my questions then (it is D&D 3.5 edition)
16:40:10 -!- lament has joined.
16:40:54 <cpressey> What ho, zzo38!
16:42:02 <cpressey> From what little I recall from my earlier days, all D&D campaigns have the potential to be impossible if the dungeonmaster is a jerk.
16:42:59 <zzo38> cpressey: Maybe, but I think "impossible" is the correct level of difficulty for a game.
16:43:09 <cpressey> I guess that applies to role-playing generally...
16:43:14 <zzo38> I also think it is good I can try to win even without someone else to be dead
16:43:16 <CakeProphet> huh... it's weird that you can put non-class parameters in templates.
16:43:27 <cpressey> Well, if the game is not impossible, then you eventually "win". Then you stop playing. What fun is that?
16:43:32 <cpressey> So yes, in that sense, I agree.
16:43:56 <CakeProphet> oh... you mean in general?
16:44:23 <CakeProphet> the impossibility is completely up to the DM... I thought you were talking about some kind of difficulty system, due to my ignorance of DnD rules.
16:44:29 <zzo38> Well, it is nearly impossible but that mean we find the new way of winning anyways, but still it might not be complete because you have to continue even though one part is success.....
16:44:50 <zzo38> CakeProphet: I am not talking about any kind of difficulty system
16:44:57 <CakeProphet> but there's a difference in impossible and perpetual.
16:45:10 <CakeProphet> impossible implies that the gameplay itself is challenging
16:45:22 <CakeProphet> you can have a very non-challenging game that lasts forever.
16:46:38 <lament> you are stuck in a little room with no doors or windows.
16:46:45 <cpressey> I think "impossible" needs to be qualified. "impossible to win"? "impossible to end"?
16:47:01 <cpressey> Or is the DM just impossible to get along with?
16:47:19 <zzo38> Meaning, the DM attempts to make anything impossible to win, but that we can find completely different unexpected way
16:47:25 <ais523> the game generally has no defined win condition, and thus it's impossible to win on that basis
16:47:38 <zzo38> But it still has to be reasonable. For example, no planet falling on you for no reason
16:48:14 <CakeProphet> psh... since when do you even try to "win" roleplaying games in the first place.
16:48:26 <zzo38> ais523: The win condition is not well defined, but I consider to win if we have completed the goal (possibly in a different way than the ordinary way), even if my character is then dead as soon as the goal is accomplished.
16:48:29 <ais523> computer RPGs, you try to iwn all the time
16:48:31 <ais523> *win
16:48:38 <cpressey> OK, forget "win". "Impossible to survive"?
16:48:54 <zzo38> cpressey: Something like that.
16:49:23 -!- oerjan has quit (Quit: Later).
16:49:47 <zzo38> But what is your opinion on the other messages, such as, that I try to win even without making anyone else dead when I can avoid it (which is nearly all time)
16:50:13 <ais523> sometimes you can be "winning" but the game's no fun anyway
16:50:24 <CakeProphet> ais523: RPGs are not roleplaying games... they lie to you.
16:50:28 <ais523> e.g. a diplomancer is fun to play once in a while, but you wouldn't want to keep it up indefinitely
16:50:47 <cpressey> zzo38: If you're lucky enough to have a DM who will listen to reason, then nothing's strictly impossible. There's at least a chance you can come up with some (reasonable) solution to whatever's (reasonably) presented.
16:50:50 <CakeProphet> ...okay, C++ question.
16:51:14 <ais523> cpressey: I went and DMed the Tomb of Horrors (3rd edition port) once
16:51:20 <CakeProphet> the relationship between include and namespaces is kind of fuzzy to me. Does "using namespace" implicitly "import" a file or do you have to add an include /and/ a using namespace.
16:51:26 <ais523> I intentionally told the players to try to break the game, and tried to DM the rules literally
16:51:41 <cpressey> As for not killing any one/thing else -- that kind of constraint might make things more difficult, but still, not impossible
16:51:47 <ais523> it was pretty fun, although not the sort of thing you'd want to do more than once or twice
16:52:02 <ais523> CakeProphet: "using namespace" simply means you don't have to state the namespace
16:52:19 <ais523> e.g. "using namespace std" means you can refer to std::string as just string
16:52:34 <Deewiant> You can have multiple namespaces per file, they're completely separate things
16:52:39 <ais523> in that sense, it has nothing to do with includes at all, although includes often import loads of symbols into the same namespace
16:53:02 <zzo38> cpressey: Yes, I know, it is not impossible. But it is difficult and I like to play this way! (I even play good-alignment character)
16:53:19 <AnMaster> <oerjan> AnMaster: alas in IE the about pages (both :tab and :blank) have the annoying property that they disappear from the history when you open another page in the same tab <-- why are you using IE?!
16:53:24 <AnMaster> hm he left
16:53:29 <cpressey> zzo38: Nothing wrong with that :)
16:53:41 <CakeProphet> ais523: ah okay. So namespace std is used across multiple files, that you still have to include. Got it.
16:54:01 <ais523> CakeProphet: yep, and you can even put stuff into namespace std yourself, it's just probably a bad idea
16:54:09 <CakeProphet> ha.
16:54:30 -!- lament has quit (Ping timeout: 272 seconds).
16:54:40 <CakeProphet> I assume it's good practice and all to encapsulate all your code in namespaces right?
16:54:56 <AnMaster> I think the CPU temp is going insane. it is jumping fast between 31 C and 47 C. In a matter of 1-2 seconds
16:55:06 <ais523> pretty much, in order to avoid name clashes
16:55:10 <AnMaster> back and forth, sure the system is under load, but constant load...
16:56:02 <AnMaster> hm for some weird reason it seems the load is jumping between the cpu cores. I guess that explains the temperature at least
16:56:06 <zzo38> cpressey: Yes there is nothing wrong with it, it is just differently than other people.
16:56:16 <CakeProphet> I like the way C# does namespaces and file importing all at once.
16:56:30 <zzo38> But my character is ettercap even, I even play monster character
16:56:35 <CakeProphet> the using statement imports a namespace... which can be multiple files.
16:56:38 <zzo38> And there is a otyugh NPC in our team as well
16:56:40 <ais523> CakeProphet: loads of languages work like that, it makes me a bit suspicious though
16:56:42 <zzo38> But my brother's character is human
16:56:49 <CakeProphet> ais523: ha. why's that?
16:56:49 <zzo38> All other NPCs in our team also human
16:56:53 <ais523> I don't like filename dependencies in languages
16:57:02 <cpressey> ais523: Hear, hear
16:57:18 <ais523> (especially fun with Java, where it's case-sensitive; extra fun if DOS is involved somewhere)
16:57:29 <CakeProphet> ais523: I actually haven't seen too many languages that use namespaces. At least languages of the conventional variety. It seems most use the Java/Python style module/package setup.
16:57:48 <cpressey> zzo38: I don't think I've ever played a non-human in D&D -- not even an elf. But it's been a looooong time since I've played.
16:58:02 <ais523> CakeProphet: packages are namespaces, pretty much
16:58:19 <ais523> after all, they follow much the same ruels
16:58:20 <ais523> *rules
16:58:34 <ais523> except that there are defined search paths for packages, and not for namespaces, which adds a filename dependency
16:58:36 <zzo38> cpressey: Ah, OK. Some people have never done so. But some people play elf character. Others (including myself) will play monster characters
16:58:36 <CakeProphet> ais523: well yeah... but they're filesystem dependent I believe. I don't believe C#'s namespace system is filename dependent at all.
16:58:38 <cpressey> ais523: Case-sensitive in Python too.
16:58:48 <ais523> cpressey: and Perl I think
16:59:05 <CakeProphet> yeah Python is case-sensitive on imports
16:59:10 <Deewiant> What language isn't?
16:59:17 <CakeProphet> ...dunno.
16:59:31 <AnMaster> <ais523> CakeProphet: loads of languages work like that, it makes me a bit suspicious though <-- what about VHDL, I always thought "why?" every time
16:59:32 <cpressey> ais523: Every time I set up a new sandbox at work, I have to delete one of the import lines from one of the packages, because I'm running it off a case-insensitive FS, and it pulls in the wrong file.
16:59:34 <CakeProphet> well, there are languages that inform case conventions
16:59:36 <CakeProphet> like Ruby.
16:59:42 <AnMaster> it has a rather... strange system for that stuff
16:59:44 <CakeProphet> and uh.... I think Go does that too.
16:59:49 <zzo38> BASIC is not case-sensitive.
16:59:55 <ais523> cpressey: ouch
17:00:01 <ais523> zzo38: depends on the version, BBC BASIC is
17:00:12 <ais523> you could use lowercase variable names there in order to avoid clashes with keywords
17:00:13 <AnMaster> ais523, library ieee; use ieee.foo.bar.all; but why the library line?...
17:00:15 <CakeProphet> er... *enforce not inform
17:00:33 <ais523> AnMaster: probably mimicing ADA, that's the explanation for most of VHDL's weirdnesses
17:00:37 <ais523> as to why ADA works like that, who knows?
17:00:45 <AnMaster> heh
17:00:58 <CakeProphet> having a two word declaration for using namespace is kind of odd in C++ I think.
17:01:01 <CakeProphet> why not just using?
17:01:12 <Deewiant> using by itself already has a meaning.
17:01:17 <CakeProphet> ah.
17:01:18 <Deewiant> using std::string;
17:01:25 <AnMaster> Deewiant, and what does that do?
17:01:34 <CakeProphet> ah okay, probably like importing one name from a module in Python
17:01:37 <AnMaster> imports just that part of std?
17:01:41 <cpressey> And for dynamic languages like Python and Perl, why do I need to put in the require/import line at all? I should be able to just call the functions I want, and if they're there, it should import the module they're from.
17:01:45 <Deewiant> Yes.
17:01:51 <cpressey> Actually I think there's a Perl hack that does something like that.
17:01:54 <CakeProphet> not really "importing" so much as allowing you to not append std::
17:02:05 <CakeProphet> to that one name.
17:02:15 <AnMaster> Deewiant, okay, but C++ already has language constructs that do different things depending on the type of the stuff in it. So why not just do: using std; and using std::string;
17:02:19 <AnMaster> :P
17:02:30 <CakeProphet> ha. THERE
17:02:36 <CakeProphet> I WIN.
17:02:37 <CakeProphet> ...
17:02:38 <Deewiant> It's disambiguation
17:02:52 <Deewiant> I'm not sure if you're allowed to have a namespace and a symbol of the same name though
17:02:59 <AnMaster> Deewiant, http://yosefk.com/c++fqa/web-vs-c++.html#misfeature-2 <-- I rest my case
17:03:33 <CakeProphet> more like schmischamschmischuation
17:03:36 <CakeProphet> ...
17:03:43 <Deewiant> That's different because only one of those can be valid at a time
17:03:53 <Deewiant> Or, it may be different; like said, I don't know what's the case here
17:04:13 <AnMaster> Deewiant, ah so you could have a class std; as well as namespace std, both visible at the time of the using statement?
17:04:29 <Deewiant> That too I suppose
17:04:39 <Deewiant> I was thinking of both a variable std::foo and a namespace std::foo
17:04:43 <AnMaster> ah
17:04:44 <CakeProphet> using std::hiv; // :P
17:05:06 <AnMaster> CakeProphet, that's imported by default in C++
17:05:08 <CakeProphet> that is what std is for right?
17:05:24 <CakeProphet> AnMaster: ah okay... good to know.
17:05:51 <CakeProphet> hmmm... so should I use C++ as my language of choice? Basically I'm looking for a language I haven't already learned to do my MUD server project in.
17:06:12 <ais523> CakeProphet: there are few reasons to use C++ nowadays
17:06:14 <AnMaster> CakeProphet, no, never use C++ as "language of choice"
17:06:21 <ais523> computer game development is the main one, because all the libraries for it are in C++
17:06:23 <CakeProphet> I was thinking about Ruby or Perl, but those (especially Perl) might be better for a smaller project like an IRC bot that I want to write.
17:06:28 <ais523> for anything else, there's normally some more appropriate language
17:06:34 <AnMaster> CakeProphet, C++ can only be "language forced upon you under threat of a gun"
17:06:34 -!- zzo38 has quit (Quit: My D&D character have 8 eyes).
17:06:51 <AnMaster> ais523, SDL works fine from C afaik?
17:07:09 <CakeProphet> hmmm... so what's another good statically typed, compiled, OO-based language that isn't Java or C#?
17:07:14 <ais523> AnMaster: it does, but if you think most commercial game development is done in C, you're probably stuck in a Linux mindset
17:07:15 <CakeProphet> (or C++, obviously)
17:07:16 <Deewiant> D!
17:07:23 <ais523> mostly it's done in DirectX for Windows only, in C++
17:07:32 <ais523> or in OpenGL for a console, also in C++
17:07:39 <AnMaster> ais523, I never thought about what most commercial games are done in. Probably inner platform if anything
17:07:44 <CakeProphet> Xbox used C# and XNA.
17:07:47 <CakeProphet> *uses
17:08:17 <AnMaster> ais523, does xbox use directx or opengl?
17:08:18 <CakeProphet> though you can write games in C++ as well.
17:08:19 <ais523> CakeProphet: yep, it's the exception; both Wii and PS3 use C++ and (slightly customized I think) OpenGL
17:08:28 <ais523> AnMaster: it uses DirectX, which should be relatively obvious given the circumstances
17:09:00 <AnMaster> ais523, since xbox does not run windows and is a console "<ais523> mostly it's done in DirectX for Windows only, in C++ <ais523> or in OpenGL for a console, also in C++" would have implied opengl
17:09:06 <AnMaster> which I found unlikely
17:09:18 <ais523> yep, I was mentally lumping Xbox with Windows
17:09:26 <AnMaster> right
17:09:26 <ais523> as they're both Microsoft and based on very similar technology
17:09:34 <CakeProphet> I /could/ use C#... because it's actually not a bad language at all. but I pretty much already know it and want to learn something new.
17:09:45 <AnMaster> ais523, also you forgot one platform: mobile phone 3D games
17:09:49 <AnMaster> I suspect java there
17:09:57 <AnMaster> well, apart from iphone
17:09:58 <CakeProphet> depends
17:10:00 <CakeProphet> yeah
17:10:05 <ais523> AnMaster: J2ME, isn't it?
17:10:07 <CakeProphet> Palm uses javascript.. Android is Java
17:10:15 <ais523> and iphone would use Objective-C
17:10:15 <CakeProphet> dunno about Blackberry... Java I think.
17:10:16 <AnMaster> ais523, isn't that a subset of java?
17:10:25 <AnMaster> so I would think my statement was correct
17:10:27 <ais523> AnMaster: probably, with a few extra libraries or something, I haven't looked into it
17:10:30 <ais523> Java-based, certainly
17:10:30 <CakeProphet> ais523: ..why on earth would anything use Objective-C though?
17:10:40 <ais523> CakeProphet: because Objective-C is what all things Apple use
17:10:48 <CakeProphet> ....the question still remains though.
17:11:00 <AnMaster> ais523, ah I didn't mean "subset of desktop java" I meant "subset of the set of all java implementations and variants"
17:11:01 <cpressey> <ais523> CakeProphet: there are few reasons to use C++ nowadays
17:11:04 <ais523> and because C++ is a really screwed-up language
17:11:14 <cpressey> The biggest one is probably working at a giant dotcom.
17:11:30 <ais523> cpressey: I'd imagine they wouldn't all use C++, it would depend on what they were doing specifically
17:11:35 <CakeProphet> what's screwed up about C++? So far it seems pretty mangable.
17:11:45 <CakeProphet> but I haven't actually programmed with it yet.
17:12:12 <cpressey> ais523: No, but it has been predominantly C++ at the ones I've worked at.
17:12:20 <ais523> CakeProphet: http://www.yosefk.com/c++fqa/?r=t
17:12:23 <ais523> cpressey: hmm, interesting
17:12:42 <CakeProphet> so yeah... language suggestions?
17:12:48 <CakeProphet> nothing too weird.
17:12:52 <CakeProphet> well... maybe.
17:12:56 <AnMaster> CakeProphet, afaik you need to use objc on iphone, there is no alternatives to it there
17:12:59 <ais523> one of my day jobs is teaching Java; in my other, I get my own choice of lang, and have used both Perl and Haskell (for rather different things)
17:13:03 <CakeProphet> AnMaster: correct.
17:13:20 <AnMaster> CakeProphet, I think that answered "<CakeProphet> ais523: ..why on earth would anything use Objective-C though?"
17:13:22 <CakeProphet> I don't think I'm comfortable enough with Haskell's concepts yet to make a full MUD server.
17:13:25 <AnMaster> because there is no option
17:13:31 <AnMaster> if you want to develop for iphone
17:13:44 <AnMaster> CakeProphet, anyway, objc is still better than C++. so that is another reason
17:13:48 <CakeProphet> AnMaster: Well.. I meant in the first place, why would Apple use Objective-C. In that case I don't mean developers that are forced to use a language.
17:13:54 <ais523> I'm not convinced Haskell is an ideal lang for a MUD server anyway
17:14:06 <Deewiant> Scala, mayhap?
17:14:07 <cpressey> CakeProphet: As much as they both annoy me sometimes, have you considered Ruby or Python?
17:14:10 <CakeProphet> ais523: doesn't seem like it would be.
17:14:19 <AnMaster> CakeProphet, erlang maybe?
17:14:24 <CakeProphet> cpressey: learned Python first. I'm really kind of tired of it now.
17:14:28 <AnMaster> good for highly concurrent stuff
17:14:32 <CakeProphet> I find static type systems actually help me design better.
17:14:47 <CakeProphet> whereas in dynamic languages it's far too easy to overkill
17:14:47 <cpressey> Hm, I'll second Erlang as a good choice. I tried to write a mini-MUD in it once...
17:14:58 <CakeProphet> ...hmmm, Erlang. Didn't think about that.
17:15:05 <CakeProphet> easy to pick up?
17:15:11 <ais523> a tip from me: you can't hang around with computer scientists for a whole year without concluding that ML and its variants are the answer to every programming problem of this type
17:15:16 <AnMaster> CakeProphet, used to functional languages? then yes probably
17:15:17 <Deewiant> CakeProphet: Dynamically typed :-P
17:15:20 <ais523> that doesn't mean that that conclusion is correct, though
17:15:29 <AnMaster> Deewiant, it does have something like an _optional_ very strong type system.
17:15:32 <AnMaster> erlang that is
17:15:39 <CakeProphet> cpressey: I'm considering Ruby just to learn it... but probably not going to use Python for this.
17:15:40 <AnMaster> through the use of dialyzer
17:15:40 <ais523> but at least ML is less insane than Haskell from the point of view of someone who's used to imperative programing
17:15:50 <CakeProphet> Deewiant: er... yeah, that's what I meant.
17:16:04 <Deewiant> CakeProphet: I meant, Erlang is.
17:16:37 <CakeProphet> AnMaster: I've learned Haskell up to understanding monads, but haven't done anything practical. does that qualify as "used to" functional languages?
17:16:46 <CakeProphet> Deewiant: oooh okay.
17:16:54 <CakeProphet> well... that's fine.
17:17:01 <AnMaster> CakeProphet, but as I said. It nowdays have a separate tool that performs both strict type checks from type declarations, and can infer types for untyped functions rather well. Not as well as haskell I think but still not too shabby.
17:17:07 <ais523> CakeProphet: pretty much, you have to "get" functional programming to be able to write programs that aren't incredibly convoluted with that level of knowledge
17:17:14 <CakeProphet> concurrency might be fun... would you recommend using threads if I choose Erlang?
17:17:16 <AnMaster> CakeProphet, erlang does not use monads though
17:17:35 <ais523> AnMaster: IMO, that's a bad thing; I've often found myself wanting monads in Perl
17:17:44 <ais523> once you get the concept, it's a pretty useful one
17:18:00 <CakeProphet> AnMaster: ah okay... so optionally type checked but still dynamic? I think I could enjoy the mix.
17:18:20 <CakeProphet> I wish Python had currying.
17:18:21 <AnMaster> it is not strictly functional like haskell is in that sense. But side effects are rather strictly controlled to a few things, IO, special storage tables (useful for db table backends kind of stuff, as well as funge space) and a few other things
17:18:33 <CakeProphet> implicit currying that is... I can make my own function wrappers for it.
17:18:56 <CakeProphet> AnMaster: That actually sounds pretty nice
17:19:10 <CakeProphet> Is there state outside of that?
17:19:16 <CakeProphet> or... mutable state rather.
17:19:45 <cpressey> Heh
17:19:45 <AnMaster> CakeProphet, the optional type checking is not done in the compiler, you invoke a separate tool. But it does a very throughout job. And also checks other stuff, like not handling some possible return values (that check isn't on by default iirc)
17:19:59 <cpressey> I can never quite explain Erlang's state model.
17:20:00 <AnMaster> very nice static analyser though
17:20:02 <CakeProphet> AnMaster: That's fine. I'd probably use it to just to help me design.
17:20:09 <CakeProphet> and debug.
17:20:19 <cpressey> You have functions which are pure, except that they send messages to each other, so they're not pure.
17:20:23 <AnMaster> CakeProphet, ah erlang has a built in debugger as well, works rather well
17:20:44 <CakeProphet> how does the hotswapping work?
17:20:48 <AnMaster> cpressey, plus there is ETS/DETS tables
17:20:50 <CakeProphet> that would actually very useful for a MUD server.
17:20:53 <CakeProphet> +be
17:21:09 <cpressey> So it's not pure, but it's a heck of lot less messy than imperative programming (in which I include Scheme with its set! and such) when done right
17:21:29 <CakeProphet> hmmm, okay so variables are write-once
17:21:32 <cpressey> AnMaster: I think of ETS tables as something you are exchanging a message with. Conceptually. Even though it might not be implemented that way
17:21:38 <CakeProphet> and then state changes happen via messages.
17:21:59 <CakeProphet> I don't particularly care about strict purity... as long as the semantic model makes sense I can use it.
17:22:01 <AnMaster> CakeProphet, in erlang? well, by calling the new module instead and if required translating the state. erlang can keep two versions of a module in memory at once. In general you use the standard library behaviour callback modules, which means it handles most of that, and you just implement the logic of that process
17:22:08 <AnMaster> like a callback module handling messages and such
17:22:29 <AnMaster> of course you can make your own if you need it, but it is rare. Only needed it once, and that was in a concurrent befunge implementation
17:22:34 <AnMaster> (rather special case!)
17:22:35 <CakeProphet> hmmm... not sure I follow. I'll just have to read up on it.
17:23:00 <ais523> this reminds me, I was planning to extend the INTERCAL networking specification to include a password
17:23:07 <ais523> because I think it's the easiest way to implement lambdas
17:23:12 <cpressey> CakeProphet: I only care about it insofar as it leads to nice code. IMO Erlang's approach is pretty good for that. (Although the language does have some other warts -- they tend to be minor)
17:23:14 <CakeProphet> but it would be nice to push code changes without having to do any kind of "copyover"
17:23:16 <AnMaster> CakeProphet, also you have service supervision and such, again implemented easily by callback modules
17:23:21 <ais523> (INTERCAL has a tendency to do this sort of thing to you...)
17:23:33 -!- sshc has joined.
17:23:53 <CakeProphet> but there's no reason not to use concurrency in Erlang pretty much?
17:23:53 <AnMaster> CakeProphet, well sure, that should be easy enough, upgrading the erlang vm itself would need restarting it (or doing migration between distributed nodes and then updating one at a time!)
17:23:54 <cpressey> CakeProphet: The only reason I don't code in Erlang more these days is because, like you with Python, I'm a bit sick of it.
17:24:18 <AnMaster> cpressey,what bits?
17:24:27 <AnMaster> (that you are sick of in erlang I mean)
17:24:54 <CakeProphet> recommend a good tutorial or can I pretty much google a good one?
17:25:32 <CakeProphet> also how do compound data structures work. Any kind of OO?
17:25:35 <Deewiant> http://learnyousomeerlang.com/
17:25:40 <AnMaster> CakeProphet, anyway, with the callback module you implement stuff like "handle_message" or "function_to_upgrade_state_on_hot_code_swap" (only if required, far from all upgrades would need to change the data format of the state of the process I bet!)
17:25:52 <AnMaster> the state being passed as a parameter (to keep it pure)
17:25:55 <CakeProphet> ah okay... so an optional callback system.
17:26:02 <cpressey> AnMaster: Mainly the bloat. I wouldn't call it "lightweight" by any measure.
17:26:52 <CakeProphet> Python is still my language of choice for small scripts... but I just get tired of using it for larger projects.
17:26:56 <AnMaster> cpressey, well true. It is rather complete though. which is rather nice when you think something like "hm I really want a module that implements a directed graph using ETS as backend"
17:27:00 <AnMaster> (erlang has that)
17:27:06 <AnMaster> CakeProphet, I know a rather nice ebook... hm
17:27:14 <AnMaster> a bit dated now perhaps
17:27:16 <CakeProphet> is it "getting started with erlang?"
17:27:25 <CakeProphet> that showed up as first hit.
17:27:44 <AnMaster> CakeProphet, something like "programming for a concurrent world" in the title iirc
17:27:47 <cpressey> AnMaster: Granted. My current tastes would prefer something which is to Erlang like Scheme is to Common Lisp, though.
17:27:59 <CakeProphet> hmmm... so in Erlang
17:28:12 <AnMaster> CakeProphet, but somewhat dated, it doesn't have anything on the strict type checking stuff
17:28:13 <CakeProphet> would be insane to give each socket a thread for read/write?
17:28:16 <AnMaster> since it was written before that
17:28:22 <AnMaster> CakeProphet, in erlang? no
17:28:25 <AnMaster> it would be idiomatic
17:28:30 <CakeProphet> ...oh, well good.
17:28:35 <AnMaster> CakeProphet, very lightweight erlang threads
17:29:06 <cpressey> Idiomatic? Requisite, almost :)
17:29:09 <CakeProphet> I've heard Erlang is good for concurrent design. Can you still get unexpected issues from message passing?
17:29:11 <AnMaster> they are userspace threads which the erlang VM schedules. erlang itself can use multiple cores of course
17:29:34 <AnMaster> cpressey, I think it may be possible to do async sockets. I looked into that some months ago, forgot why
17:29:57 <AnMaster> (async as in async and handling more than one in a single thread)
17:30:00 <AnMaster> I concluded it possible at least.
17:30:01 <cpressey> CakeProphet: You can always get unexpected issues from any concurrent design. But Erlang... gets in your way less.
17:30:09 <CakeProphet> my usual strategy is to just keep it all in one thread and do a loop... for a MUD server this is sufficient. But a fully concurrent design would be quite nice.
17:30:11 <AnMaster> yes that is an advantage
17:30:20 <AnMaster> CakeProphet, erlang is not shared memory concurrent, it is message passing
17:30:34 <cpressey> Messages are easier to handle than freakin' mutexes, which is often the best the competition has to offer.
17:30:36 <CakeProphet> -nod- I've known this.
17:30:43 <AnMaster> (technically there may be shared memory for large objects passing between threads, but that is copy-on-write and so on)
17:30:45 <CakeProphet> hmmm... so like
17:31:00 <cpressey> Whenever I write concurrent code in Java, I end up rebuilding a message-passing infrastructure anyway.
17:31:31 <CakeProphet> say your player is editing a room or item or something... how would locking work so that other player threads doing the same thing (a rare occurance in a MUD) won't interact with intermediate state.
17:31:34 <AnMaster> iirc beam (the erlang vm) uses shared refcounted memory for binaries (an erlang data type) larger than some threshold.
17:31:56 <AnMaster> CakeProphet, why does it need locking?
17:32:04 <AnMaster> CakeProphet, that would prevent cooperative editing!
17:32:10 <CakeProphet> well.
17:32:13 <CakeProphet> consider things like a get
17:32:16 <cpressey> CakeProphet: By "editing" a room, do you mean, changing one attribute?
17:32:22 <CakeProphet> which moves the item around in space, essentially... from the room to the player
17:32:37 <CakeProphet> there's a possibility that multiple threads might try to do that operation at the same time or something.
17:32:41 <CakeProphet> like... it's never going to happen
17:32:43 <CakeProphet> but if it does.
17:32:58 <cpressey> CakeProphet: Each action is a message, and you process the messages sequentially.
17:32:58 <AnMaster> CakeProphet, you just send editing messages from the user thread to the room thread. Probably including "expected current state" would be a good idea. Then it would work a bit like a compare-and-swap
17:33:04 <cpressey> So, no conflicts occur.
17:33:07 <AnMaster> no locking needed there, right?
17:33:25 <CakeProphet> ah okay.
17:33:25 <CakeProphet> so
17:33:31 <AnMaster> CakeProphet, no idea if that works for this case
17:33:38 <AnMaster> but it is how I would do it probably.
17:33:38 <CakeProphet> sequential messages would ensure atomicity of operations.
17:34:04 <cpressey> Or, if you MUST think about locking, think of the message-passing infrastructure doing it for you (locking the mailbox as a low-level operation you don't have to think about because you're working on a higher level.)
17:34:09 <CakeProphet> as long as an operation doesn't consist of multiple messages.
17:34:13 <AnMaster> CakeProphet, well, you could have players edit different parts of the room at the same time I assume
17:34:16 <cpressey> CakeProphet: Exactly.
17:34:24 <AnMaster> just as long as they don't pick up the same object at once
17:34:37 <cpressey> It becomes an exercise in message design, kind of.
17:34:41 <CakeProphet> yeah.
17:34:46 <AnMaster> CakeProphet, for picking up object, why not make the room return an error if the object is no longer there?
17:34:50 <AnMaster> again, no race condition
17:35:15 <cpressey> For picking up an object, I would want to send a message to the object, not the room :)
17:35:16 <CakeProphet> well... that would happen anyways in this case. With message passing the get command won't be an issue
17:35:23 <AnMaster> cpressey, okay good point
17:35:27 <CakeProphet> things like long-term editing and stuff will need to be thought out though.
17:35:42 <AnMaster> after all, rooms and players and objects should all be the same at that level of abstraction
17:35:55 <CakeProphet> cpressey: well... you'll be asking the room to give you the object in question
17:36:09 <cpressey> But then you get to the point where you're modelling EVERYTHING -- maybe 1000's of objects -- as a process. Erlang's processes are lightweight enough to do that, though. Generally.
17:36:12 <CakeProphet> and then send the object whatever request you need, I suppose.
17:36:20 <AnMaster> yep
17:36:32 <AnMaster> cpressey, 100000 might be a slight issue though, not sure
17:36:35 <CakeProphet> so is that a good idea? I don't know if individual objects need their own threads.
17:36:48 <CakeProphet> but I guess it would be fine... most of the time they'll just be idling anyways. I assume Erlang has a good scheduler.
17:37:02 -!- tombom has joined.
17:37:28 <AnMaster> CakeProphet, depends. Do they need to do stuff like change every now and then? It would make implementing something like food rotting after a while simple
17:37:29 <cpressey> CakeProphet: Is it a good idea? Well -- conceptually I think it is -- and if anything has a scheduler that can handle it, Erlang does.
17:37:44 <CakeProphet> for an editing system I will probably implement a lock of some kind, to prevent interference with the object while it's being edited in whatever way.
17:38:02 <CakeProphet> AnMaster: hmmm... you've got a point
17:38:04 <CakeProphet> but
17:38:08 <cpressey> It would be nice to actually solve that "everything looks like a process, even static things" problem. Erlang comes very close.
17:38:18 <CakeProphet> the codebase itself is going to be targeted towards roleplaying games... like WoD and DnD
17:38:24 <CakeProphet> so no explicit coding of events, generally.
17:38:42 <CakeProphet> it's more or less just an environment to communicate and roll dice in
17:38:44 <AnMaster> CakeProphet, btw, erlang by default limits number of threads to 32768, but you can rise it to 268435456 with a command line switch. That is on 32-bit. As far as I understand the limit is even higher on 64-bit systems
17:39:00 <CakeProphet> that should be plenty
17:39:20 <CakeProphet> Erlang actually sounds perfect for this kind of system.
17:39:43 <AnMaster> CakeProphet, but the docs point out that it might be hard to reach 268435456 on a single 32-bit system due to memory limits inherent in 32-bit systems
17:39:45 <CakeProphet> but yeah... did anyone ever mention how compound data types work?
17:39:54 <AnMaster> CakeProphet, because 268435456 processes = 16 bytes per thread
17:40:01 <AnMaster> and that is a bit unrealistic
17:40:29 <CakeProphet> ah.
17:40:40 <CakeProphet> I don't think the number of threads will be an issue.
17:40:42 <AnMaster> CakeProphet, that is using the full 4 GB available on a 32-bit system. In practise the VM needs some memory and so does the OS and so on
17:41:10 <AnMaster> CakeProphet, as for compound data types, erlang has records. which is similar to C structs I guess
17:41:21 <CakeProphet> named fields?
17:41:27 <AnMaster> well yes that is given
17:41:33 <AnMaster> it has cons style lists with a rather nice notation
17:41:35 <CakeProphet> -shrug- could be Haskell-style.
17:41:40 <AnMaster> then there is tuples
17:41:43 <cpressey> Erlang record syntax/semantics I find a bit ugly. But you'll live :)
17:41:46 <CakeProphet> hmmm... any of this mutable?
17:41:52 <AnMaster> CakeProphet, I plan to learn haskell, how does it do it?
17:41:55 <AnMaster> if not named fields?
17:42:05 <AnMaster> CakeProphet, sure, but not in place ;P
17:42:05 <cpressey> CakeProphet: Nope, not mutable.
17:42:06 <CakeProphet> positional/optionally-named-accessor-functions.
17:42:25 <CakeProphet> hmmm... non-mutable writing is inefficient. :P
17:42:31 <AnMaster> CakeProphet, if you want mutable there is ETS tables. which provides rather fast storage of terms in a {key,value} style
17:42:42 <CakeProphet> AnMaster: that might be exactly what I want.
17:42:43 <AnMaster> cpressey, efunge uses that for fungespace btw
17:42:44 <cpressey> CakeProphet: Non-mutable writing can become mutable under the hood :)
17:42:54 <AnMaster> and yeah what cpressey said
17:42:58 <CakeProphet> cpressey: automatically or with design consideration?
17:43:01 <AnMaster> CakeProphet, the compiler optimises some stuff
17:43:05 <cpressey> CakeProphet: ALSO - non-mutable writing is much more cache-friendly
17:43:14 <AnMaster> automatically, you don't really have much to say about it
17:43:32 <CakeProphet> AnMaster: With Haskell you declare data types like this.
17:43:36 <AnMaster> CakeProphet, and in general you don't need mutable state I found. befunge is kind of special case again, self modifying language and so on
17:43:56 <CakeProphet> !haskell data TypeName = ConstructorName Int String Int Int
17:43:59 <AnMaster> and it was befunge98
17:44:01 <AnMaster> not 93
17:44:25 <CakeProphet> cpressey: would I be implementing the cache or is this a compiler thing?
17:44:37 <AnMaster> CakeProphet, btw about thread count, I think that is per node, and you could have more if you connected another node (possibly on another computer, possibly on the same computer)
17:45:11 <CakeProphet> AnMaster: and then, using the example I just typed up, you would construct a value of type TypeName using the ConstructorName function.
17:45:20 <AnMaster> and... the number of nodes is pretty much unlimited. Well there is the "OS limits number of sockets" and so on.
17:45:26 <AnMaster> but apart from that, pretty much unlimited
17:45:51 <CakeProphet> AnMaster: it's sort of like named, type-safe, tuples... sort of.
17:46:01 <cpressey> CakeProphet: You shouldn't have to think about it unless you are pushing the envelope.
17:46:06 <AnMaster> CakeProphet, how would you access the third int in it? and what if you want to extend it and add other fields (setting the new ones to default values so all old code doesn't have to be updated
17:46:08 <AnMaster> )
17:46:21 <cpressey> (That's sort of my general philosophy about what makes a good language/abstraction, btw)
17:46:36 <AnMaster> cpressey, very true
17:46:42 <CakeProphet> CakeProphet: If you have a TypeName called x. You would pattern match over x.
17:46:44 <AnMaster> I very much doubt a MUD will push the envelope
17:46:53 <CakeProphet> let (ConstructorName x y z) = x
17:47:03 <CakeProphet> er
17:47:04 <CakeProphet> well
17:47:04 <AnMaster> CakeProphet, ah, erlang is based on pattern matching
17:47:05 <CakeProphet> name clash
17:47:06 <CakeProphet> but
17:47:11 <AnMaster> somewhat different syntax of course
17:47:21 <AnMaster> and probably somewhat varying capabilities
17:47:35 <CakeProphet> AnMaster: also if you can give each field an accesor function
17:47:43 <cpressey> {constructor_name, X, Y, Z} = Ecks, ...
17:47:46 <AnMaster> CakeProphet, okay that sounds awkward
17:47:55 <CakeProphet> data Example = Example {X::Int, y::Int}
17:47:57 <cpressey> OK, that's a tuple, not a record, but whatever
17:48:06 <AnMaster> cpressey, yeah
17:48:09 <CakeProphet> here I gave the constructor and type the same name... this is psuedo-idiomatic depending on the type in question.
17:48:21 <AnMaster> CakeProphet, that :: thing looks similar to the optional type checking thing for erlang
17:48:28 <AnMaster> it would be :: integer() instead
17:48:37 <CakeProphet> :: is type constraints in Haskell
17:48:41 <AnMaster> or pos_integer() or such
17:48:46 <CakeProphet> f :: Int -> Int -> Int
17:48:49 <CakeProphet> f x y = x+y
17:48:53 <cpressey> Hm, I don't usually name fields in my alg data types in Haskell
17:48:58 <cpressey> Maybe I should
17:49:24 <cpressey> But data Example = Example Integer Integer looks so much cleaner
17:49:27 <CakeProphet> cpressey: it's good in some situations... if I wrote a MUd server I would definitely use it as the number of fields could grow quite a bit unless I use a hash table design of some kind.
17:49:35 <cpressey> CakeProphet: Yeah.
17:50:06 <AnMaster> CakeProphet, btw this is a text MUD right?
17:50:19 <CakeProphet> AnMaster: so yeah, the accessors x and y are one-argument functions that automatically grab their respective fields from a value of type whatever.
17:50:23 <CakeProphet> AnMaster: yes.
17:50:30 <AnMaster> mmh
17:50:35 <CakeProphet> is there any other kind? I mean, I've seen some graphical ones but they're bad.
17:50:40 <CakeProphet> so I don't count those.
17:50:41 <AnMaster> well I don't know
17:50:53 <AnMaster> I don't even know the diff between a MUD and an MMORPG really
17:51:21 <CakeProphet> not a lot of hack and slash though... mostly focusing on a clean architecture for allowing approved players to host their own games as DMs (Storytellers in WoD speak)
17:51:33 <AnMaster> CakeProphet, WoD?
17:51:37 <CakeProphet> in their own custom-built environments
17:51:42 <CakeProphet> World of Darkness... it's a tabletop system.
17:51:47 <CakeProphet> that I particularly enjoy.
17:51:55 <AnMaster> CakeProphet, so like, virtual reality in text?
17:51:57 <AnMaster> ;P
17:51:59 <CakeProphet> yes.
17:52:13 <AnMaster> CakeProphet, you could call it thirdlife?
17:52:15 * cpressey picks up the blood-stained sword.
17:52:18 <AnMaster> or perhaps "getalife"?
17:52:49 <CakeProphet> with more emphasis on narrative than having coded-in environments. Usually you'll just have a room with a description and no objects inside of it... the players would just interact with non-existent things as they write out what they're doing. Kind of like collaborative fiction.
17:52:57 <cpressey> MUD is like IRC with resource controls on the imaginary objects.
17:52:59 <CakeProphet> AnMaster: ha
17:53:08 <ais523> CakeProphet: I've known people to do that in Feng Shui, but not in WoD
17:53:16 <ais523> on the other hand, WoD games do have a lot of interaction
17:53:27 <AnMaster> CakeProphet, you mean they are too lazy to create the objects?
17:53:33 <ais523> in our groups, there's little need for the games to actually have a plot; every week is spent clearing up the mess the players created the week before
17:53:41 <ais523> often working at cross-purposes
17:53:43 <CakeProphet> AnMaster: not too lazy... just being imaginative affords more possibilities
17:53:51 <CakeProphet> you don't have to have coded in effects for things like cars, guns, elevators, etcf
17:53:55 <CakeProphet> you just write out what they do
17:54:07 <CakeProphet> and, in the case of things like guns and cars, roll dice to see how successful you are with them.
17:54:12 <AnMaster> CakeProphet, can't you just create those on the fly?
17:54:20 <cpressey> CakeProphet: At some point I fail to see how this is much different from IRC :)
17:54:25 <AnMaster> the logic I mean
17:54:29 <CakeProphet> you could.
17:54:32 <CakeProphet> just not necessary.
17:55:38 <CakeProphet> cpressey: it's not too different really. You could easily make a dice roller bot and host games on IRC. But the MUD server is more dedicated to this kind of thing. Characters have score sheets and information that needs keeping track of... which you could do with a bot but it would be more cumbersome
17:55:45 <ais523> cpressey: MUDs do end up working rather like IRC, normally they track more state though
17:55:48 <CakeProphet> there's a community I know that does this kind of stuff... so I have an audience of sorts.
17:56:02 <ais523> does EgoBot (or was it HackEgo?) still have its MUD?
17:57:14 <CakeProphet> does Erlang have any kind of interface-like feature?
17:57:30 <CakeProphet> since it's dynamically typed I assume you can do polymorphism through duck typing.
17:57:44 <CakeProphet> but a statically enumerated list of operations would be nice.
17:57:58 <AnMaster> CakeProphet, not sure what you mean there
17:58:03 <cpressey> CakeProphet: Guh, Sort of. Modules can expose a common interface.
17:58:16 <CakeProphet> ah... like hide names and export names and such?
17:58:30 <CakeProphet> or... no?
17:58:48 <AnMaster> CakeProphet, hm? erlang has funs, which can be like lambdas or like function pointers.
17:59:10 <AnMaster> it is easy to just decide which module to call on fly. I assume that is what you mean
17:59:13 <cpressey> CakeProphet: Well, a module name is just a symbol. Instead of foo:fun(123), you can say Module:fun(123).
17:59:22 <AnMaster> yes and there is that too
17:59:51 <AnMaster> CakeProphet, oh btw, in erlang variables begin with either _ or upper case letter.
17:59:54 <AnMaster> should clarify what cpressey said
17:59:55 <cpressey> And/or you can use pattern matching to dispatch to different functions, depending on what args your function is called with (closest match to "duck typing")
18:00:12 <cpressey> Right. Uppercase means variable. Like Prolog.
18:00:27 <CakeProphet> hmmm... I guess my OO thoughts just don't apply to Erlang then...
18:00:30 <AnMaster> CakeProphet, and atoms (think 'foo in lisp kind of) begin with lower case. though you can make anything an atom by quoting if you want to
18:00:51 <AnMaster> CakeProphet, erlang normally use processes for that
18:00:59 <cpressey> CakeProphet: OO thoughts have to be twisted slightly to apply, yes. But it can mostly be done.
18:01:12 <CakeProphet> so it's massive Actor model? :P
18:01:14 <AnMaster> CakeProphet, then you could just call the process, and have different modules implementing the same messages
18:01:24 <AnMaster> CakeProphet, I don't know the actor model. Can't answer
18:01:40 <CakeProphet> message passing concurrent objects... in essence.
18:01:43 <cpressey> It's close to the Actor model, or sort of an idealized Actor model, from what I know about it.
18:01:44 -!- atrapado has quit (Quit: Saliendo).
18:01:51 <AnMaster> CakeProphet, that would work rather well in erlang
18:01:55 <CakeProphet> hmmmm.... so
18:02:16 <CakeProphet> what if I /don't/ want to use a process, but still want to use similar principles of OO design.
18:02:48 <CakeProphet> like, I might not want a process for every MUD object... for example... but maybe for each occupied room.
18:03:14 <AnMaster> CakeProphet, and of course, once the day comes for needing to scale up to a cluster to hos this thing erlang is ready and almost no code needs any change ;) (just a bit in the code that handles starting of your program, to change what starts where)
18:03:16 <cpressey> CakeProphet: It can be done. But then, I consider it possible to write OO code in C, so maybe I'm the wrong person to ask.
18:03:33 <CakeProphet> ...OO can be done in C, definitely
18:03:48 <CakeProphet> you have structs... you have functions (and function pointers). Done.
18:03:51 <AnMaster> cpressey, doesn't the linux kernel do something OO-like in C for the vfs layer?
18:04:11 <AnMaster> having a struct with pointers like xfs_methods or ext3_methods or whatever
18:04:17 <CakeProphet> The Python interpret actually does " inheritance" in C with casting hacks.
18:04:21 <cpressey> CakeProphet: I think the main diff you'd see is that inheritance would occur between *functions*, not objects.
18:04:41 <CakeProphet> cpressey: hmmm... functions can inherit?
18:04:54 <AnMaster> CakeProphet, I used the python C api... I have no idea how it actually works. Seems to be black magic with macros and pointers
18:04:59 <cpressey> CakeProphet: Well, you have to build it. Delegate is a better word.
18:05:02 <CakeProphet> AnMaster: it is.
18:05:09 <CakeProphet> aaah okay.
18:05:27 <AnMaster> CakeProphet, had to fix some bugs in a program that used python as an embedded scripting language. Got to know that API rather well
18:05:31 <CakeProphet> cpressey: so you rely on first-class functions to implement a lot of overriden/polymorphic design.
18:05:47 <cpressey> get(sword) -> something; get(AnythingElse) -> parent_get(AnythingElse).
18:05:51 <cpressey> is sort of what i'm getting at
18:06:06 <CakeProphet> hmmmm... I gotcha
18:06:10 <cpressey> pattern matching, using the default case to go to default behavior
18:06:21 <AnMaster> CakeProphet, btw, in the last version erlang gained experimental support for having modules implemented in C or such. However in erlang terms "experimental" means "stable as a rock but we just might change the API in case we need it still"
18:07:19 <CakeProphet> do exceptions work like every other exception system?
18:07:21 <AnMaster> erlang is rather special in that way, a great focus on stability.
18:07:30 <AnMaster> CakeProphet, define how every other system work
18:07:35 <CakeProphet> hmmm... oh, is it like Python with coroutines? In Python you can throw exceptions inside coroutines.
18:07:41 <AnMaster> but I suspect the answer might be "close, but not exactly"
18:07:47 <CakeProphet> AnMaster: Java, Python, C++... everything else. throw and catch
18:07:49 <AnMaster> CakeProphet, what is like coroutines?
18:08:04 <CakeProphet> well...
18:08:13 <cpressey> CakeProphet: Um - no coroutines in Erlang. Processes make them unnecessary, more or less.
18:08:14 <AnMaster> the processes? I guess so if you want it
18:08:18 <CakeProphet> if you have a coroutine x in python
18:08:26 <CakeProphet> you can do: x.throw(SomeException)
18:08:38 <CakeProphet> and the code inside the coroutine has an opportunity to catch it or fail out.
18:08:55 <CakeProphet> so what I was asking
18:08:58 <AnMaster> CakeProphet, you could send an exception message to another thread I guess... sounds rather nasty though
18:09:01 <CakeProphet> is if you can do that in Erlang with processes.
18:09:09 <cpressey> Well, Erlang has exceptions.
18:09:25 <cpressey> It also has a mechanism where processes can be notified if other processes die.
18:09:30 <CakeProphet> ah okay.
18:09:45 <CakeProphet> that's quite a handy mechanism.
18:10:00 <cpressey> And I think they're related in that, an uncaught exception makes a process die.
18:10:16 <CakeProphet> can an exception make the whole program die?
18:10:32 <cpressey> Only if there's only one process :)
18:10:35 <CakeProphet> or do you design that to occur by having all processes die when one does... if it's that kind of error.
18:10:36 <AnMaster> CakeProphet, erlang has throw, and try <expression> of <pattern matching of normal result, not covered by the exception catchin and optional> catch <pattern matching on exceptions>
18:10:47 <AnMaster> well, that was not completely syntactically correct
18:10:50 <AnMaster> but you get the idea
18:10:52 <cpressey> There can be catastrophic failures of the runtime, but those aren't supposed to happen :)
18:10:53 <CakeProphet> right.
18:11:05 <AnMaster> you can lave out the whole "of <pattern matching goes here>" bit of course
18:11:33 <CakeProphet> ...I'll probably just answer all of my questions in the process of reading.
18:11:36 <AnMaster> cpressey, could you send an unconditional kill message to the init process of erlang... I wonder...
18:11:41 * AnMaster goes to try
18:11:49 <cpressey> I think there's a way to say "This process dies if any of its children die". So you can set it up so that an exception will take down the entire program.
18:11:55 <AnMaster> cpressey, yes there is
18:12:10 <ais523> just set a handler for SIGCHLD
18:12:19 <AnMaster> ais523, E_USER_SPACE_THREADS
18:12:30 <AnMaster> ais523, (in erlang)
18:12:41 <AnMaster> so ti doesn't quite apply here
18:13:15 <cpressey> CakeProphet: Also note, there is a philosophy associated with Erlang called "Let it crash": Basically, don't write error-handling code, because it's horrible to get right and maintain. Instead, set up a supervisor which restarts your process whenever it crashes.
18:13:35 <CakeProphet> cpressey: ah okay. There's a similar design philosophy in Python
18:13:54 <AnMaster> wow
18:14:01 <AnMaster> erlang is still running with the init process killed
18:14:06 <AnMaster> hm
18:14:12 <AnMaster> 8> q().
18:14:12 <AnMaster> ** exception error: bad argument
18:14:12 <AnMaster> in function init:stop/0
18:14:16 <AnMaster> but the usual quitting doesn't work
18:14:21 * AnMaster uses the other way
18:14:25 <CakeProphet> so it seems Erlang is pretty hard to fully kill.
18:14:35 <AnMaster> CakeProphet, well, double ctrl-c does it every time
18:14:39 <CakeProphet> ha.
18:14:51 <AnMaster> CakeProphet, first time you get this prompt:
18:14:53 <AnMaster> BREAK: (a)bort (c)ontinue (p)roc info (i)nfo (l)oaded
18:14:53 <AnMaster> (v)ersion (k)ill (D)b-tables (d)istribution
18:14:59 <AnMaster> then ctrl-c again just kills it
18:15:14 <AnMaster> I think k there is for "kill process"
18:15:25 <CakeProphet> That's a rather nice system design though. If you have parts of a program that can continue running while something else is not working correctly... you can have it continue to run without a catastrophic system-wide crash, and then hotswap a bugfix in for the part that isn't work
18:15:28 <AnMaster> hm
18:15:30 <CakeProphet> ing
18:15:36 <AnMaster> I never used that before
18:15:45 * AnMaster tries to figure out the prompt he got from that
18:16:09 <AnMaster> oh, process selection which shows backtrace of process and so on
18:16:12 <AnMaster> makes sense
18:17:08 <AnMaster> CakeProphet, I never seen the init process die though (except today by killing it)
18:17:37 <CakeProphet> the arity declaration thing is kind of odd.
18:17:41 <cpressey> CakeProphet: Indeed, that was one of design goals -- it was developed for telephony equipment like switches, where it's important for as much of it to keep going as it can
18:17:45 <AnMaster> CakeProphet, and erlang has built in support for stuff like making supervisor threads that restart child processes if they die and so on
18:17:49 <CakeProphet> what does init do?
18:18:28 <AnMaster> CakeProphet, iirc it starts up other system processes and the REPL (or whatever program you make it run if you do that) and also handles the orderly shutdown of things
18:18:57 <AnMaster> which includes telling IO server processes to flush buffers and close files and so on
18:19:05 <CakeProphet> hmmm.. this tutorial is using c(modulename) to compile code... is c an erlang function or a shell command?
18:19:18 <AnMaster> (yeah should mention that, normally in erlang IO is really sending messages tn another process)
18:19:29 <AnMaster> CakeProphet, c() is a shorthand in the repl for compile:something()
18:19:52 <AnMaster> CakeProphet, there is help(). in the REPL to list the shorthands it defines
18:19:55 <CakeProphet> what is :?
18:20:10 <AnMaster> CakeProphet, : as in compile:something ?
18:20:14 <CakeProphet> yes.
18:20:16 <AnMaster> modulename:function
18:20:24 <CakeProphet> ah okay.
18:20:27 -!- kar8nga has joined.
18:20:29 <CakeProphet> I kind of guessed but wasn't sure.
18:20:44 <CakeProphet> ....hmmm, so compile is a module?
18:20:49 <CakeProphet> that has compile functions?
18:21:00 <AnMaster> CakeProphet, err maybe compiler
18:21:07 <AnMaster> don't remember name of module that compiler is in
18:21:12 <AnMaster> bbiab, food is ready
18:23:38 <CakeProphet> how are atoms represented?
18:23:51 <CakeProphet> low-level
18:24:10 <cpressey> CakeProphet: I think they're interned. So, like, an opaque 32-bit value/
18:24:18 <cpressey> Or maybe 64-bit
18:24:35 <cpressey> They're turned into textual strings when shared between nodes though
18:24:43 <cpressey> Oi - haven't even got into the distributed programming support
18:25:10 <cpressey> Multiple Erlang nodes on different machines can send each other messages across the network.
18:25:14 <cpressey> But don't worry about that now.
18:25:22 <CakeProphet> yeah I think that was explained
18:25:25 <CakeProphet> sounds pretty sweet.
18:25:29 <CakeProphet> not that I'll ever need it.
18:26:15 <cpressey> It is, but the built-in support isn't fit for every purpose (I find) -- sometimes it's still nicer to roll your own. Luckily that's not that hard, if you ever need to.
18:31:48 <CakeProphet> hmmm... is " the special character character?
18:31:52 <CakeProphet> like \ in C strings?
18:32:08 <CakeProphet> oh... ~
18:32:14 * CakeProphet is far away from his monitor
18:35:29 <CakeProphet> hmmm... function overloading and pattern matching. interesting.
18:35:49 <CakeProphet> that makes tail recursive iterators less ugly looking, I think.
18:39:44 -!- Phantom_Hoover has joined.
18:40:09 <CakeProphet> ....Erlang's statement delimiters are kind of crazy.
18:40:13 <CakeProphet> . , ;
18:41:17 <AnMaster> back
18:41:29 <AnMaster> CakeProphet, agreed. No one is perfect ;)
18:41:55 <Phantom_Hoover> What were you talking about?
18:41:58 <AnMaster> CakeProphet, but you get used to it. Same as you get used to python's or C style for blcoks
18:42:14 <CakeProphet> I'm not sure I understand ,
18:42:23 <CakeProphet> so far I've only seend it after end in an if block
18:42:24 <AnMaster> <cpressey> They're turned into textual strings when shared between nodes though <-- not any longer afaik
18:42:36 <AnMaster> cpressey, there is some sort of atom cache nowdays iirc
18:42:38 <CakeProphet> *seen
18:42:48 <AnMaster> so it is sent as a number after the first time
18:43:49 <Phantom_Hoover> Weird, WP is messed up.
18:43:52 <Phantom_Hoover> On IE and FFX.
18:43:54 <AnMaster> <CakeProphet> like \ in C strings? <-- you mean escaping in strings?,
18:44:05 <AnMaster> CakeProphet, well ~ is like % in printf() or such
18:44:20 <Phantom_Hoover> Wait, are we talking about CL now?
18:44:26 <AnMaster> CakeProphet, while for escaping inside strings you want \
18:44:38 <AnMaster> CakeProphet, for chars you use $
18:44:44 <AnMaster> as in $a
18:44:52 <AnMaster> will give you an integer 97
18:44:58 <CakeProphet> I sw code that used ~n
18:45:07 <CakeProphet> for newline, I think.
18:45:20 <AnMaster> CakeProphet, console IO?
18:45:24 <Phantom_Hoover> Oh, not CL then.
18:45:39 <AnMaster> CakeProphet, iirc the difference is that on windows it does CRLF, but \n always does LF only
18:46:09 <AnMaster> CakeProphet, don't quote me on that one though
18:46:10 <CakeProphet> ...why on earth does the traceback show you the code in AST
18:46:54 <AnMaster> CakeProphet, erlang has nice pattern matching on binary blobs btw. Saw some erlang code that matches an MPEG header or such in one line of erlang code. It has various strange sized bit width fields iirc
18:46:59 <AnMaster> no problems for erlang
18:47:03 <AnMaster> CakeProphet, hm?
18:47:07 <AnMaster> what are you talking about
18:47:16 <CakeProphet> fif clause,[ftut9,test if,2g,ferl eval,exprs,4g,fshell,eval loop,2g]g
18:47:17 <CakeProphet> ** exited: fif clause,[ftut9,test if,2g,
18:47:26 <CakeProphet> ....meh PDF copypaste is bad.
18:47:29 <AnMaster> that doesn't look like valid erlang though
18:47:32 <Sgeo_> Oh, ~n is used by io:printf
18:47:35 <Sgeo_> iirc
18:47:43 <AnMaster> io:format you mean
18:47:48 <Sgeo_> And is literally a ~n that is interpreted by .. yes
18:47:56 <AnMaster> and io_lib:format (the latter is like sprintf)
18:48:04 <Sgeo_> It's not physically a newline char
18:48:07 <CakeProphet> {if_clause, [{tut9,test_if,2},{erl_eval,exprs,4},{shell,eval_loop,2}]}
18:48:10 <CakeProphet> ....what am I looking at.
18:48:11 <AnMaster> Sgeo_, indeed
18:48:28 <AnMaster> CakeProphet, you know, in the REPL erlang gives much nicer formatted backtraces
18:48:47 <CakeProphet> is the shell not the REPL?
18:48:49 <AnMaster> CakeProphet, but I think you somehow got an if clause where no of the patterns matched, then a backtrace
18:48:55 <AnMaster> CakeProphet, the shell is the REPL yes.
18:48:59 <CakeProphet> it was from a tutorial
18:49:00 <CakeProphet> not my code.
18:49:02 -!- MizardX- has joined.
18:49:05 <AnMaster> CakeProphet, old tutorial?
18:49:10 <CakeProphet> yes, that's what's happening. I was just confused about the format.
18:49:14 <CakeProphet> AnMaster: possibly.
18:49:36 <AnMaster> CakeProphet, the shell pretty prints that sort of stuff iirc
18:50:01 <CakeProphet> are the numbers line numbers?
18:50:07 <AnMaster> CakeProphet, no, arity numbers
18:50:11 <CakeProphet> ah.
18:50:32 <AnMaster> CakeProphet, in erlang foo/2 and foo/3 are different functions. the first one could be foo(A,B) and the later foo(A,B,C)
18:50:36 <CakeProphet> right.
18:50:39 <AnMaster> and they are for all purposes different functions
18:50:40 <CakeProphet> I've read that much so far.
18:51:01 <Phantom_Hoover> (loop (print (eval (read))))
18:51:10 <CakeProphet> so, I haven't learned funs yet, but I assume when you want to use a fun you would specify the arity of the function?
18:51:10 <Phantom_Hoover> BEST. REPL. EVER.
18:51:24 <Phantom_Hoover> Must dash.
18:51:25 <AnMaster> Phantom_Hoover, no exception handling, no line editing?
18:51:33 <AnMaster> CakeProphet, you can get line numbers out of backtraces, but iirc you need to compile with debug info then
18:51:45 <Phantom_Hoover> AnMaster, but the ELEGANCE!
18:52:00 <AnMaster> Phantom_Hoover, useless for practical purposes though ;P
18:52:26 <AnMaster> CakeProphet, don't remember how with the c() command or such since I tend to use emake, which is basically a nice build system for erlang code, very erlang specific but doesn't suck as such
18:53:03 -!- MizardX has quit (Ping timeout: 276 seconds).
18:53:06 <CakeProphet> emake. I'll remember to check it out.
18:53:07 <AnMaster> though it has the downside of not being designed with multi-core systems in mind. should be easy to fix in theory
18:53:13 <AnMaster> CakeProphet, it is erl -make
18:53:17 <AnMaster> comes with the system
18:53:20 <CakeProphet> sweet
18:53:28 -!- MizardX- has changed nick to MizardX.
18:53:29 <AnMaster> CakeProphet, I use a short Makefile to provide a clean target
18:53:30 <CakeProphet> so does Erlang compile to native code?
18:53:43 <AnMaster> CakeProphet, not by default, it is possible though
18:54:11 <CakeProphet> might not be necessary. I'll look into my hosting options and see if I can get erlang on the server I'll be using.
18:54:11 <AnMaster> CakeProphet, check when you start the erlang REPL, the first line. Does it contain [hipe] in it?
18:54:25 <AnMaster> if so, then your build supports compiling to native
18:54:30 <CakeProphet> yeah
18:54:33 <CakeProphet> Erlang R13B03 (erts-5.7.4) [source] [rq:1] [async-threads:0] [hipe] [kernel-poll:false]
18:54:33 <AnMaster> still runs under the VM though
18:54:56 <CakeProphet> ah... it essentially compiled a stand-alone VM
18:54:57 <AnMaster> CakeProphet, anyway in practise I never found that it mattered much on my system. But iirc for Deewiant it made a huge speed difference in efunge
18:54:59 <CakeProphet> *compiles
18:55:06 <AnMaster> forgot how much he said
18:55:22 <AnMaster> something like 70% or so iirc. For me the reduction is usually around 20% for it
18:55:31 <AnMaster> and efunge is CPU bound mostly
18:55:32 <AnMaster> so makes sense
18:55:39 <AnMaster> well, CPU and memory
18:55:48 <AnMaster> <CakeProphet> ah... it essentially compiled a stand-alone VM <-- no
18:56:02 <AnMaster> CakeProphet, it compiles a module with native code that can be loaded in the normal VM
18:56:03 <AnMaster> :P
18:56:15 <AnMaster> that is what HIPE does
18:56:51 -!- Phantom_Hoover has quit (Ping timeout: 265 seconds).
18:57:11 <AnMaster> CakeProphet, in any case, I doubt that sort of performance will be a blocker for you unless you do something stupid in your design (which is possible if you aren't used to erlang, I sure did stupid things in the beginning!)
18:57:55 <CakeProphet> anyone know of any free hosting that allows SSH and FTP?
18:59:42 <CakeProphet> ...top-level domain too. Would be amazing.
18:59:44 <AnMaster> CakeProphet, btw there is one small issue currently with atoms. It is being worked on afaik. And that is that when you use an atom, it is assigned an integer, but currently the atom table in erlang is not garbage collected. this is probably a remaining part of the prolog inspiration and legacy you could say. they used to have that issue too. But from what I heard it is being worked on. Next version ma
18:59:45 <AnMaster> ybe.
19:00:12 <AnMaster> the number you can have is 1048576. Just don't go around creating atoms for stuff like every line the user say and you should be fine
19:00:41 <CakeProphet> hmmm... okay
19:00:54 <AnMaster> CakeProphet, I know shell servers that allow irc bouncers and has web space but does not in general allow other servers by users
19:00:59 <AnMaster> very nice freebsd shell
19:01:00 <CakeProphet> I would define atoms statically anyways.
19:01:10 <AnMaster> have one, sadly some issues with the server the last few days
19:01:34 -!- ais523_ has joined.
19:01:45 <AnMaster> CakeProphet, right, that is very unlikely to make you run out of atoms.
19:01:46 * CakeProphet is looking for free hosting for said MUD server.
19:01:50 <AnMaster> ah hm
19:02:02 -!- ais523 has quit (Disconnected by services).
19:02:03 <AnMaster> CakeProphet, no clue. VPS are rather cheap nowdays though
19:02:05 -!- ais523_ has changed nick to ais523.
19:02:07 <CakeProphet> I can get a paid host if necessary. In the distant future, when I have income.
19:02:08 <AnMaster> and I'm sure that would be enough
19:02:20 <AnMaster> heh
19:02:46 <CakeProphet> how cheap? Know any numbers?
19:03:09 <AnMaster> CakeProphet, well $5 or such isn't an uncommon number iirc
19:03:25 <AnMaster> brb, need to clean glasses
19:05:09 <AnMaster> CakeProphet, one way would be to find someone else who has a server or such. Some friend at the local LUG perhaps?
19:06:12 <CakeProphet> ...local LUG?
19:06:14 <CakeProphet> ...
19:06:23 <CakeProphet> I'm in a somewhat rural/suburban area.
19:06:43 <AnMaster> ah...
19:06:59 <AnMaster> CakeProphet, well, are you at university?
19:07:08 <AnMaster> or after or before that?
19:07:10 <CakeProphet> temporarily not. but yes, student.
19:07:20 <AnMaster> CakeProphet, you mean temp as in summer holidays?
19:07:24 <CakeProphet> yes.
19:07:33 <AnMaster> CakeProphet, well doesn't universities tend to generate computer clubs?
19:07:47 <CakeProphet> I'll look into it. Dunno if any of them would have hosting though.
19:07:53 <AnMaster> surely you could interest someone somewhere there
19:08:18 <AnMaster> CakeProphet, the computer club itself might have it?
19:08:23 <AnMaster> it isn't uncommon
19:08:25 <CakeProphet> I might have a friend who would let me host some stuff. He'd likely bitch about how server resources aren't cheap... but a MUD server would hardly have an impact.
19:09:31 <CakeProphet> hmmm... with the VPS idea, I actually know a host that's dedicated to MUD hosting that would likely be cheaper than that per year.
19:09:33 <AnMaster> CakeProphet, erlang probably isn't the type of program that calls free() all the time, rather it is the type of program that tries to keep free pages around for reuse (though I have seen it return memory to the OS, but I think it only does that when it has a large enough chunk of memory)
19:09:49 <AnMaster> CakeProphet, per year? I meant per month
19:09:54 <CakeProphet> right.
19:10:25 <AnMaster> CakeProphet, or you could poke a hole in your router if your ISP doesn't get all sour about that
19:10:38 <AnMaster> bbl, going to take some photos, now that the light is just right!
19:10:40 <CakeProphet> poke a hole?
19:10:47 <AnMaster> port forwarding
19:11:27 <CakeProphet> ah.
19:14:14 <CakeProphet> I'm going to go fry some bologna
19:14:17 <CakeProphet> because it's fucking delicious.
19:16:13 -!- kar8nga has quit (Remote host closed the connection).
19:16:35 <CakeProphet> I have actually discovered that fried bologna is apparently a regional thing
19:17:01 <CakeProphet> I live in the southern U.S., and I know people online from southwest and midwest U.S. that have never heard of such a thing.
19:25:01 <AnMaster> I never heard of it, but wtf is a bologna?
19:25:07 <AnMaster> (Europe so...)
19:27:56 <cpressey> lunch meat.
19:28:48 -!- SevenInchBread has joined.
19:28:50 <cpressey> Generally, a highly-processed lunch meat.
19:29:21 <cpressey> Kind of like hot dog meat but in larger round slices.
19:29:38 -!- CakeProphet has quit (Ping timeout: 258 seconds).
19:37:07 <cpressey> You know, I used the word "meat" in the last three lines, but there are many who would argue otherwise.
19:40:00 <SevenInchBread> and yes... hot dog "meat" in larger slices
19:40:05 -!- SevenInchBread has changed nick to CakeProphet.
19:40:30 <CakeProphet> you can get it unsliced and slice it yourself to get nice thick pieces too.
19:43:12 <CakeProphet> I have made a monsterous creation
19:43:49 <CakeProphet> a sandwich with a fried egg, fried bacon, with three slices of bologna forming layers between the other two.
19:46:19 <CakeProphet> The fried bologna sandwich has been elevated to a regional specialty in the Midwest and Appalachia. It is the sandwich served at lunch counters of small family run markets that surround the Great Smoky Mountains.[1] They are sometimes sold at concession stands in stadiums, like those of the Cincinnati Reds and Buffalo Sabres.[2]
19:46:24 <CakeProphet> ah... so I am a product of my environment.
19:46:30 <CakeProphet> Didn't know that.
19:57:28 -!- tombom_ has joined.
19:57:29 -!- tombom has quit (Ping timeout: 252 seconds).
20:19:45 <AnMaster> argh, when shooting a panorama, make sure that the sun doesn't disappear behind a could for one or two shots in the middle
20:19:50 <CakeProphet> question about Erlang.
20:20:01 <CakeProphet> what is the default case?
20:20:01 <AnMaster> I suspect this will be unstitchable...
20:20:06 <AnMaster> CakeProphet, case as in?
20:20:12 <CakeProphet> case statement.
20:20:21 <AnMaster> CakeProphet, _ -> maybe?
20:20:26 <AnMaster> is that what you mean
20:20:29 <CakeProphet> makes sense.
20:20:30 <CakeProphet> yes.
20:20:35 <AnMaster> CakeProphet, _ is "match anything" after all
20:20:40 <AnMaster> for if it would be true ->
20:20:50 <CakeProphet> hmmm... will a variable name match anything?
20:21:01 <CakeProphet> ...I assume so.
20:21:07 <AnMaster> CakeProphet, if it isn't bound to anything yet. If it is bound to something it will match that
20:21:12 <AnMaster> remember, single assignment
20:23:22 -!- ais523 has quit (Remote host closed the connection).
20:23:39 <CakeProphet> so wait.
20:23:57 <CakeProphet> a bound variable in a case statement matches its value?
20:29:14 <AnMaster> CakeProphet, yes
20:29:22 <AnMaster> CakeProphet, it does that anywhere of course
20:29:29 <AnMaster> I mean, in any match on either side
20:29:35 <AnMaster> like:
20:29:38 <AnMaster> Foo=a
20:29:47 <AnMaster> {Foo,Bar} = {a,b}
20:29:54 <AnMaster> then that Foo will match the a
20:29:56 <AnMaster> had it been:
20:30:01 <AnMaster> {Foo,Bar} = {b,c}
20:30:07 <AnMaster> you would have got a bad match exception
20:30:09 <AnMaster> well not in a case
20:30:12 <cpressey> Which can be both awesome and horrific
20:30:16 <AnMaster> then it moves on to the next case
20:30:27 <AnMaster> cpressey, pretty useful. Never found it horrific
20:31:08 <cpressey> Sometimes I want it to be clearer whether B will be bound in this statement or if it's already been bound. They're syntactically the same.
20:31:52 <cpressey> It would be nice if there was some marker like *B to say, "B does not yet have a value. We're giving it one here"
20:31:57 <cpressey> But, that's just me.
20:32:05 <cpressey> Write short functions and you won't run into it much :)
20:32:06 <AnMaster> cpressey, you mean shadowing?
20:32:14 <cpressey> No, not shadowing
20:32:20 <AnMaster> hm
20:32:36 <cpressey> B = 3 has two meanings, depending on whether B is already bound or not
20:32:44 <AnMaster> cpressey, anyway it is good practise to write short functions or at least short short per entry point
20:33:19 <cpressey> Maybe I should write out my vision for Schemerlang :)
20:33:26 <AnMaster> I mean, the main interpreter thing in efunge is quite long, it goes like process_instruction($| , ...) ... ; process_instruction($-, ...) ... ;
20:33:27 <AnMaster> and so on
20:33:35 <AnMaster> but each entry point is quite short
20:33:49 <AnMaster> I don't think efunge has many functions longer than, say, 10 lines
20:34:02 <AnMaster> perhaps main/1 (called with -run)
20:34:06 <cpressey> That's because efunge isn't a business application :D
20:34:23 <cpressey> Oh god, page after page after page... not Erlang though
20:34:33 <CakeProphet> hmmm... this tutorial uses a function called process_flag
20:34:33 <CakeProphet> but
20:34:38 <CakeProphet> I can't find it in erl -man
20:34:45 <AnMaster> cpressey, well I guess the auto generated code for returning an array defining what instructions a fingerprint implements is fairly long
20:34:56 <AnMaster> CakeProphet, erl -man does module names
20:34:58 <AnMaster> hm
20:35:00 -!- augur has quit (Read error: Connection reset by peer).
20:35:10 <AnMaster> CakeProphet, I suspect it is in the module erlang
20:35:23 <AnMaster> CakeProphet, it includes a few auto imported functions
20:35:32 <cpressey> ... but I would need a better name than "SchemErlang" ...
20:35:32 <AnMaster> stuff that would be annoying to not auto-import
20:35:35 <CakeProphet> No manual entry for erlang
20:35:46 <AnMaster> CakeProphet, sure the docs are installed?
20:35:57 <AnMaster> CakeProphet, it is a separate download iirc
20:36:03 <AnMaster> and many distros do it as separate package
20:36:05 <CakeProphet> ah... might check then.
20:36:27 <AnMaster> CakeProphet, all functions in the erlang module are implemented in the runtime btw.
20:36:44 <CakeProphet> erlang-typer is probably the type system you were talking about.
20:36:48 <AnMaster> CakeProphet, either for reasons like "can't be done elsewhere" or "a lot faster" or such
20:37:06 <AnMaster> CakeProphet, that is a tool to auto generate type specs
20:37:14 <AnMaster> from untyped or partly typed code
20:37:24 <AnMaster> CakeProphet, the thing you want is called dialyzer
20:37:28 <AnMaster> well you would want typer too
20:37:34 <AnMaster> but dialyzer primarily
20:38:05 <AnMaster> some are auto-imported functions from erlang include abs(Number), length(List)
20:38:06 <AnMaster> and so on
20:38:08 <CakeProphet> erlang-pman "erlang process manager"? useful?
20:38:15 * CakeProphet is going down a list of packages.
20:38:26 <AnMaster> CakeProphet, well could be, but why the hell is that a separate package
20:38:31 <AnMaster> it is called from inside erlang
20:38:38 <AnMaster> it doesn't even make any sense to make it separate
20:38:49 <AnMaster> it is just a TK thing for seeing erlang processes
20:38:52 <CakeProphet> already have it then.
20:38:55 <AnMaster> pman:start().
20:39:06 <AnMaster> CakeProphet, well I blame distro for crappy packaging if it is a separate package
20:39:25 <AnMaster> CakeProphet, what is this? debian or some shit?
20:40:27 <CakeProphet> ....so many erlang packages.
20:40:32 <CakeProphet> they all look potentially useful.
20:40:42 <AnMaster> CakeProphet, what distro?
20:40:48 <CakeProphet> Ubuntu
20:41:06 -!- chuck_ has changed nick to chuck.
20:41:15 <AnMaster> CakeProphet, huh? must be recent ubuntu, iirc on jaunty it is like: erlang-base, erlang-x11-stuff, erlang-docs
20:41:17 <AnMaster> or such
20:41:25 <AnMaster> possibly one or two more packages
20:41:33 <CakeProphet> ah found it
20:41:35 <CakeProphet> erlang-manpages
20:42:01 <AnMaster> CakeProphet, I would suggest you install most of the other except if any of them conflict. I seem to remember ubuntu had erlang-hipe and erlang-nohipe
20:42:10 <AnMaster> where you should of course pick the HIPE version
20:42:17 <CakeProphet> shell says I have HIPE.
20:42:43 <CakeProphet> going to get debugger and maybe runtime tools
20:42:44 <AnMaster> CakeProphet, well yes, but if you try to install a no-hipe version and get a package manager conflict I meant
20:42:50 <CakeProphet> concurrency profiler might be good too
20:42:54 <AnMaster> CakeProphet, wait, runtime tools?
20:42:56 <AnMaster> wth would that be
20:42:59 <CakeProphet> ...no clue.
20:43:24 <AnMaster> CakeProphet, never found the concurrency profiler that useful. Rather in that case the code coverage tool
20:43:27 <AnMaster> that is very very nice
20:43:31 <AnMaster> get the web UI for it too
20:43:44 <CakeProphet> code coverage?
20:43:45 <AnMaster> I presume this insane distro had split that into a separate package
20:44:05 <AnMaster> CakeProphet, yes you know, like gcov, shows which lines were executed during a run
20:44:11 <Sgeo_> What's worse? A less than stellar programmer, or a manager who's going to make the less than stellar programmer's vacation permanent because he's completely blind to what said programmer did
20:44:14 <AnMaster> useful for making complete test suits and for finding dead code
20:44:33 <AnMaster> Sgeo_, and you being the former?
20:44:37 <Sgeo_> No
20:44:41 <AnMaster> ah hm
20:44:46 <AnMaster> Sgeo_, you are the latter?
20:45:03 <Sgeo_> Me being the programmer thankful that there is a framework made by the former, even if it's not really that perfect
20:45:28 <AnMaster> Sgeo_, wait what do you mean?
20:45:38 <AnMaster> the former there would refer to the "A less than stellar programmer"
20:45:40 <AnMaster> and you said no
20:45:41 <CakeProphet> erlang-observer?
20:45:43 <AnMaster> then you say yes?
20:46:00 <Sgeo_> I'm a third party, thankful to the work that the less than stellar programmer did
20:46:10 <AnMaster> CakeProphet, I heard of it. Don't remember what it does. It maaay be related to tracing of processes. Check documentation.
20:47:14 <cheater99> hello sweeties
20:47:17 <cheater99> is alize back yet
20:47:21 <cheater99> i'm missing her
20:47:32 <Sgeo_> It's Thursday, and alise is a guy
20:47:57 <cheater99> you have generated two answers which have nothing to do with the question uttered
20:48:02 * CakeProphet was not positive of alise's gender.
20:48:11 <cheater99> i should hire you as a source of randomness
20:48:30 <cheater99> i will feed you with thermal entropy
20:48:37 <cheater99> do we have a deal or what?
20:48:45 <Sgeo_> Blue!
20:48:54 <CakeProphet> sweet... I now have all these Erlang tools and packages that are somewhere on my filesystem. Where? dunno.
20:49:16 <cheater99> wait
20:49:16 <AnMaster> cheater99, wrong. "It's Thursday" is very relevant to alise
20:49:20 <cheater99> you're getting into erlang?
20:49:30 <AnMaster> CakeProphet, /usr/lib/erlang/lib/ I guess
20:49:45 <AnMaster> CakeProphet, well typer and dialyzer should be in /usr/bin
20:49:52 <AnMaster> but yeah some of them are called from the erlang REPL
20:50:52 <AnMaster> CakeProphet, btw let me pastebin a short escript program that finds duplicate files in a rather efficient manner. (as in, it checks for same size first and only then compares the stuff in the files).
20:51:00 <AnMaster> CakeProphet, oh and escript is erlang script
20:51:13 <CakeProphet> ....script?
20:51:18 <AnMaster> CakeProphet, yes as in #!/usr/bin/escript
20:51:29 <CakeProphet> ah...
20:51:39 <AnMaster> CakeProphet, normal erlang applications requires a wrapper script to start things
20:51:45 <CakeProphet> erl is specifically the shell. Do you normally keep a shell open for erlang programs?
20:52:12 <AnMaster> CakeProphet, calling something like: erl -noshell -run mainmodule functionname command line parameters here
20:52:44 <CakeProphet> is this script written in Erlang?
20:52:52 <AnMaster> CakeProphet, escript is erlang script so yes
20:53:11 * CakeProphet is slightly confused... but thinks he understands.
20:53:12 <AnMaster> CakeProphet, also "normal" erlang is optimised for long running applications. escript for short running ones. "normal" erlang has a rather long startup and exit time
20:53:20 <AnMaster> while escript has short such
20:53:54 <AnMaster> CakeProphet, and escript doesn't need to be compiled
20:54:01 <AnMaster> CakeProphet, it can be still
20:54:06 <AnMaster> http://sprunge.us/AQgR
20:54:08 <AnMaster> there
20:54:28 <AnMaster> in fact I made that one compiled
20:54:29 <CakeProphet> I find it ridiculous that there are erlang programs that have been running for years nonstop.
20:54:36 <AnMaster> CakeProphet, why is that?
20:54:48 <AnMaster> CakeProphet, you can't shut down a telecom switch just to upgrade it
20:54:58 <AnMaster> CakeProphet, most extreme I heard about so far was 10 years
20:55:03 <CakeProphet> by "ridiculous" I mean remarkable.
20:55:05 <AnMaster> with hot hardware standby
20:55:18 <AnMaster> so it did seamless failover when the main hardware failed
20:55:25 <AnMaster> not dropping anything
20:55:35 <CakeProphet> hmmm... can Erlang serialize processes?
20:55:44 <AnMaster> CakeProphet, define what you mean with that
20:56:01 <CakeProphet> to swap it over to another node/machine
20:56:19 <AnMaster> CakeProphet, hm I think it probably kept a hot standby by running a copy of everything
20:56:39 <AnMaster> CakeProphet, but actually I'm not sure about that, you could send the data over
20:56:59 <AnMaster> CakeProphet, the thing is the actual process is likely to depend on stuff like architecture of system
20:57:08 <CakeProphet> ah okay.
20:57:09 <AnMaster> you couldn't move a process from SPARC to x86_64 like that
20:57:26 <AnMaster> while you could easily link them as nodes
20:57:27 <cpressey> I think there have been debates in the erlang community about this. The general sentiment was, iirc, why do you need failover?
20:57:33 <CakeProphet> I know Stackless Python uses message-passing lightweight threads that can be serialized and transferred across network to be run on other machines.
20:57:39 <AnMaster> cpressey, wait, what?
20:58:10 <cpressey> AnMaster: Why do you need to serialize a process?
20:58:16 <AnMaster> CakeProphet, how does that work when moving from a 32-bit big endian machine to a 64-bit little endian system?
20:58:29 <cpressey> Implying: if you think hard about it, you don't
20:58:30 <CakeProphet> Python isn't native. doesn't matter.
20:58:37 <AnMaster> cpressey, no I meant "why do you need failover?"
20:58:40 <CakeProphet> or at least, I don't think so.
20:59:03 <AnMaster> cpressey, needing a hot standby in telecom if hardware fails is pretty obvious
20:59:14 <AnMaster> cpressey, stuff like CPU does break, ram does go bad
20:59:15 <AnMaster> and so on
20:59:24 <cpressey> "failover" in the sense of "serialize a process and move it to another node"
20:59:27 <AnMaster> CakeProphet, good point
20:59:38 <AnMaster> cpressey, well true, you can't make a hot standby work that way
20:59:42 <AnMaster> hm
21:00:09 <AnMaster> cpressey, how does rpc:call() work then?
21:00:15 <CakeProphet> well... you might want serialization for other reasons.
21:00:20 <cpressey> Processes crash all the time, what is the point of saving one and restoring it elsewhere? Just start a new one :)
21:00:30 <AnMaster> CakeProphet, likely to be problematic if you upgrade the runtime
21:00:31 <CakeProphet> consider a cluster that runs redundant copies of a process in the event that a server fails.
21:00:43 <AnMaster> CakeProphet, yep I'm considering it
21:00:50 <cpressey> CakeProphet: Well, think of it as serializing the process's important data, rather than the process itself.
21:00:59 <AnMaster> <cpressey> Processes crash all the time, what is the point of saving one and restoring it elsewhere? Just start a new one :) <-- I hope that was a joke
21:00:59 <cpressey> That use case makes sense.
21:01:06 <CakeProphet> cpressey: yeah that would work.
21:01:16 <cpressey> AnMaster: Not really.
21:01:27 <CakeProphet> I think it's just a matter of design, really.
21:01:34 <CakeProphet> you can implement designs that don't require process serialization.
21:01:50 <CakeProphet> but still achieve an equivalent or better result.
21:02:32 <AnMaster> cpressey, you mean people use the erlang supervision stuff for that? Rather than as a way to handle things gracefully (and log the error) if things goes very wrong
21:02:38 <AnMaster> and then fix the bug as soon as possible
21:03:08 <cpressey> AnMaster: er, no, I didn't mean to imply anything about how people use the supervision stuff.
21:03:16 <AnMaster> cpressey, then what did you mean?
21:03:42 <cpressey> If "let it crash" is your philosophy, why are processes so precious they have to be retained?
21:03:50 <cpressey> They don't.
21:03:59 <cpressey> It's state, not processes, that you need to care about.
21:04:05 <AnMaster> cpressey, why would it be my philosophy though?
21:04:20 <AnMaster> cpressey, also that is a pita if the process has file IO or socket IO open
21:04:28 <AnMaster> doesn't it get closed with the process by default?
21:04:31 <cpressey> AnMaster: Because the Erlang folks are holding a gun to your head, of course :/
21:05:00 <CakeProphet> so is link() how you do supervisor stuff?
21:05:20 <AnMaster> cpressey, my philosophy is "don't let it crash, but if it does then handle it gracefully and log an error, then as soon as possible track down and fix the bug"
21:06:17 <AnMaster> CakeProphet, well, link() is bidirectional, also there is a race condition there, what if process dies between spawn() and link()? that is why you use spawn_link()
21:06:32 <cpressey> AnMaster: That's great. I was explaining the Erlang-community-at-large's position.
21:06:34 <AnMaster> CakeProphet, again bidirectional, for one directional there is some monitor stuff
21:06:42 <AnMaster> cpressey, hm never noticed that in #erlang
21:06:46 <AnMaster> but okay
21:07:03 <cpressey> AnMaster: do you follow erlang-questions@ ?
21:07:13 <AnMaster> cpressey, I strongly dislike mailing lists
21:07:18 <AnMaster> cpressey, I use IRC and usenet
21:07:20 <CakeProphet> does link() do anything else other than error handling semantics?
21:07:27 <cpressey> I would be surprised to hear that the core Erlang gurus hang out on IRC
21:07:49 <AnMaster> CakeProphet, how do you mean? well there is the "die if linked process dies, unless you set the relevant process flag"
21:08:01 <AnMaster> but that maybe was what you meant
21:08:02 <cpressey> CakeProphet: I think it's closer to death-handling (error or not) semantics.
21:08:12 <CakeProphet> yeah that's what I meant.
21:08:16 * CakeProphet is still reading.
21:08:29 <AnMaster> CakeProphet, anyway spawn_monitor() is getting used a lot more these days due to the lack of bidirectional semantics
21:08:30 <cpressey> I remember being confused between link and throw/catch for that reason
21:08:39 <AnMaster> WOW pretty sunset
21:08:42 <AnMaster> bbl *gets camera*
21:09:37 <CakeProphet> I assume monitor is pretty much the same as link but one way then? Which way?
21:10:02 <cpressey> I think monitor's the one that's bidirectional.
21:10:43 <AnMaster> cpressey, wrong
21:10:50 <AnMaster> monitor is the unidirectional one
21:11:04 <CakeProphet> yeah monitor is unidirectional
21:11:06 <AnMaster> CakeProphet, spawn_monitor() : you monitor the child
21:11:14 <AnMaster> and get a message if it dies
21:11:16 <CakeProphet> makes sense.
21:11:30 <cpressey> I stand corrected.
21:11:31 <AnMaster> CakeProphet, the other would be fairly useless
21:11:48 <AnMaster> CakeProphet, spawn_link() is 1) older 2) still very useful for supervision trees
21:12:00 <AnMaster> if the superviser crashes the children should probably exit too
21:12:48 <CakeProphet> so is superviser just a name for a process that is monitoring a child? Or is there special stuff.
21:13:02 <AnMaster> I'll let cpressey explain this one
21:13:12 <cpressey> I don't remember.
21:13:28 <cpressey> I think there is special stuff for it at least in OTP, but I don't do OTP.
21:13:44 <cpressey> More educational to roll your own :)
21:14:12 <cpressey> Wait, is it even called OTP? What's all that boilerplate they provide for processes, that you don't need, called?
21:14:20 <CakeProphet> ...and what is OTP?
21:15:07 <cpressey> No, not OTP. That just stands for Open Telecom Platform.
21:15:38 -!- bsmntbombdood has quit (Ping timeout: 265 seconds).
21:15:48 <CakeProphet> hmmm... erase() "returns the process dictionary and deletes it"
21:15:57 <CakeProphet> sounds bad to me.
21:16:11 <CakeProphet> oh... is that like register()'s dictionary?
21:16:24 <CakeProphet> -like
21:16:36 <cpressey> ahhh gen_server is what i was thinking of.
21:16:39 <cpressey> anyway
21:16:59 <cpressey> Don't use the process dictionary!
21:17:06 <cpressey> (Requisite admonishment.)
21:17:20 <CakeProphet> ...why not?
21:17:53 <cpressey> Because it's destructive update, leads to less clean code than writing functional, single-assignment code, etc, etc.
21:17:59 <cpressey> Use it if you like.
21:18:54 <cpressey> But ETS tables are probably better for any keeping around mutable state of any importance.
21:21:16 <AnMaster> cpressey, you don't use gen_server?
21:21:32 <CakeProphet> oh so process dictionary is different from using regster()
21:21:35 <AnMaster> and yes it is otp
21:21:37 <cpressey> AnMaster: No.
21:21:58 <AnMaster> CakeProphet, yes iirc register() allows you to name a process so you don't need to know the PID to call it
21:22:04 <CakeProphet> I thought you meant don't use register()... which seems like a good thing to me.
21:22:07 <AnMaster> also makes things easier to follow in crash dumps ;P
21:23:04 <AnMaster> CakeProphet, anyway, process dict is an "modify in place" storage area that should not be used in general
21:23:37 <AnMaster> only legal reason I can think of is the random module. which uses it to store the current prng state
21:23:50 <AnMaster> which is not global but per process
21:25:38 <CakeProphet> hibernate() is a cool function.
21:26:52 <CakeProphet> I'd use hibernate on objects/rooms that players are not current in.
21:26:57 <CakeProphet> *currently
21:27:02 -!- Phantom_Hoover has joined.
21:27:07 <CakeProphet> after a wait period.
21:27:23 <Phantom_Hoover> ???
21:28:14 <CakeProphet> ...talking about using hivernate() to save memory in an Erlang MUD client
21:28:35 <cpressey> CakeProphet: That's a new one to me, although ISTR a conversation about adding something like that it the language.
21:29:27 <CakeProphet> yeah, it basically reduces most of its performance/memory impact until it receives a new message.
21:29:44 <CakeProphet> and then calls a function that you pass to hibernate() when you call it.
21:29:55 <CakeProphet> because it destroys the call stack when you hibernate
21:30:03 * Phantom_Hoover wonders why the functional languages he knows of don't use the standard f(x, y, z) notation for functions
21:30:15 <CakeProphet> faster to type I assume.
21:30:21 <CakeProphet> lots of functions being used.
21:31:26 <CakeProphet> actually I'll probably just kill room processes after they're left vacant.
21:31:27 * oktolol wonders why mathematics doesn't use the more sensible f x y z notation
21:31:37 -!- oktolol has changed nick to oklopol.
21:32:03 <Deewiant> Or x y z f
21:32:06 <CakeProphet> actually...
21:32:11 <CakeProphet> smalltalk syntax is the best
21:32:39 <CakeProphet> f: x where: y and: z
21:32:45 <CakeProphet> ...I think.
21:32:48 <CakeProphet> it's been a while.
21:35:22 <Phantom_Hoover> Pointlessly verbose.
21:35:24 <oklopol> what's after and:
21:35:32 <oklopol> then:
21:35:34 <oklopol> also:
21:35:42 <CakeProphet> ....
21:35:44 <CakeProphet> nothing?
21:35:47 <CakeProphet> z?
21:36:02 <oklopol> what if you need more than 3 args
21:36:07 <CakeProphet> oh.
21:36:16 <CakeProphet> where/and aren't static names
21:36:21 <CakeProphet> they're method dependent
21:36:30 <oklopol> f: x where: y and: z but also: w and ofc: q
21:36:33 <CakeProphet> so when you define a method you specify the names
21:36:34 <Phantom_Hoover> Again, pointlessly verbose.
21:36:40 <CakeProphet> f:where:and:
21:36:45 <CakeProphet> I think is the syntax
21:37:06 <CakeProphet> I could see it being useful for particularly numerously argumented functions.
21:37:11 <oklopol> Phantom_Hoover: isn't math notation all about being verbose?
21:37:13 <CakeProphet> like named keywords in Python.
21:37:29 <CakeProphet> I think math notation was supposed to be concise...?
21:37:33 <CakeProphet> *is
21:37:37 <CakeProphet> well.. was, I guess.
21:37:50 <CakeProphet> since it does get out of hand.
21:38:02 <oklopol> often math notation seems to be concise at the expense of readability, judging by the fact most proofs are just english text
21:38:29 <oklopol> (another reason might be there isn't really standard notation for many things but just an english name)
21:38:53 <cpressey> Mathematicians would sooner pick a letter from another *alphabet* than make up a multi-character variable name...
21:39:02 <oklopol> :)
21:39:10 <cpressey> 'Cept category theorists.
21:39:17 <oklopol> and complexity theorists
21:39:22 <cpressey> But even they keep it to three, dawg.
21:39:33 <Phantom_Hoover> But using multi-character variable names is confusing.
21:39:55 <CakeProphet> Rel
21:39:58 <Phantom_Hoover> Unless you don't have multiplication or don't represent it as xy.
21:40:01 <oklopol> only if your objects use multiplication, Top isn't confusing in any way
21:40:15 <oklopol> because you don't have a T that likes to be multiplied
21:41:04 <CakeProphet> should I ever fiddle with process priority in erlang?
21:42:24 <cpressey> CakeProphet: Unlikely to need to.
21:44:00 <CakeProphet> save_calls is a nifty flag.
21:54:55 -!- CakeProphet has quit (Ping timeout: 258 seconds).
21:55:36 * Phantom_Hoover wonders if he can make his computer boot from an ISO image
22:01:12 <cheater99> i want alizar to win
22:01:14 <cheater99> OMGOMGOMGOMG
22:02:14 <cheater99> (i'm talking about germany's next top model)
22:09:22 -!- cheater99 has quit (Ping timeout: 248 seconds).
22:14:06 <AnMaster> <cpressey> Mathematicians would sooner pick a letter from another *alphabet* than make up a multi-character variable name... <-- yes but what about "log", "sin", "cos" and so on?
22:14:18 <AnMaster> of course those are function names
22:14:20 <AnMaster> but
22:14:29 <AnMaster> f(x) g(x) seems common for non-standard functions
22:14:38 <AnMaster> which again shows this terseness
22:16:03 <AnMaster> <CakeProphet> save_calls is a nifty flag. <-- ?
22:16:35 <AnMaster> * Phantom_Hoover wonders if he can make his computer boot from an ISO image <-- yes, just burn it to a CD
22:16:37 <AnMaster> ;P
22:16:45 <Phantom_Hoover> Don't have a CD.
22:17:04 <AnMaster> Phantom_Hoover, probably NAND memory with an USB interface will work too
22:17:21 <AnMaster> that is, memory stick
22:17:25 <AnMaster> of some sort
22:17:58 <Phantom_Hoover> Don't have one of them either.
22:18:21 <AnMaster> Phantom_Hoover, have more than one computer?
22:18:24 <AnMaster> if so: PXE
22:18:31 <AnMaster> that is, network boot
22:19:03 <AnMaster> Phantom_Hoover, also, _everyone_ has a usb stick these days.
22:19:08 <cpressey> Phantom_Hoover: Depending on why you need to boot from it... have you considered installing Bochs or VMWare?
22:19:18 <AnMaster> cpressey, or virtualbox
22:19:23 <AnMaster> vmware is pretty much crap nowdays
22:19:32 <AnMaster> and also expensive for the non-crap version
22:19:36 <AnMaster> while virtualbox is very nice
22:19:42 <AnMaster> bochs is slow
22:19:46 <Phantom_Hoover> For the installation of an OS from an ISO.
22:19:51 <AnMaster> I would suggest qemu rather than bochs
22:19:59 <AnMaster> cpressey, so yeah strange suggestions
22:20:00 <cpressey> AnMaster: I'm working on VMWare at work -- I may try virtualbox, if you think it's better
22:20:01 <Phantom_Hoover> Or just booting a live CD.
22:20:22 <AnMaster> cpressey, I think virtualbox is better than the free vmware server thingy at least
22:20:27 <AnMaster> cpressey, don't know about vmware workstation
22:20:28 <cpressey> AnMaster: Weird? My first inclination was to suggest DOSBox. ;)
22:20:39 <AnMaster> cpressey, okay that is bloody strange
22:22:45 <cpressey> Phantom_Hoover: You may be up the creek. Consider going out and purchasing a couple of blank CDs/DVDs... assuming you have some way to burn to them.
22:23:15 -!- cheater99 has joined.
22:24:06 <AnMaster> Phantom_Hoover, or some usb memory assuming you can boot from that
22:24:24 <AnMaster> a lot of linux installers can run from usb memory pins
22:25:10 -!- Gregor has joined.
22:28:39 -!- cheater99 has quit (Ping timeout: 258 seconds).
22:28:55 <Phantom_Hoover> Pins?
22:43:17 -!- cheater99 has joined.
22:45:41 -!- CakeProphet has joined.
22:45:47 -!- CakeProphet has quit (Changing host).
22:45:48 -!- CakeProphet has joined.
22:46:27 <CakeProphet> hmmm
22:47:40 -!- Phantom_Hoover has quit (Ping timeout: 245 seconds).
22:51:17 <CakeProphet> is there a name for the formal language that contains all other languages as a subset?
22:51:32 <CakeProphet> or do you have to define that per-alphabet?
22:51:41 <cpressey> CakeProphet: .......... OmniGlot?
22:52:16 <CakeProphet> I was just thinking about formal languages for some reason
22:52:18 <CakeProphet> like with IRC bots
22:52:49 <CakeProphet> if you have a language, like the language of IRC, that allows this sort of superlanguage within itself
22:53:04 <CakeProphet> then you can nest any number of equally complex languages within.
22:53:15 <cpressey> Well... modulo quoting rules, yes.
22:53:18 <CakeProphet> right.
22:53:30 <CakeProphet> on IRC that would be \n
22:53:50 <cpressey> So it's never really possible to embed Omniglot proper.
22:53:59 <cpressey> If you try, you become Omniglot.
22:54:14 <cpressey> Well, maybe with a prefix.
22:54:17 <cpressey> Hm.
22:54:53 <cpressey> Whhh
22:55:25 <CakeProphet> hmmm
22:55:36 <CakeProphet> I wonder, can you apply the concept of a Kleen star to automata?
22:55:43 <CakeProphet> *Kleene
22:56:40 <cpressey> Sure.
22:56:58 <CakeProphet> ...I do not know how though
22:57:15 <cpressey> Well,
22:57:17 <CakeProphet> it seems quite tailored to an automata that reports success or failure or string patterns.
22:57:36 -!- BeholdMyGlory has quit (Remote host closed the connection).
22:57:39 <cpressey> Oh, ok. I was assuming that as the definition for automaton.
22:59:22 <CakeProphet> I mean
22:59:53 <CakeProphet> could you construct an operation that takes an autoamton and produces a new one with similar semantics to the Kleene star?
23:00:14 <CakeProphet> or, in general, what kind of operations on automata can one make?
23:00:48 <cpressey> If the automaton accepts/rejects strings, sure. If not -- not sure.
23:01:26 <cpressey> If it's a transducer (takes input, produces output), then probably still yes.
23:02:08 -!- GreaseMonkey has joined.
23:05:06 -!- tombom_ has quit (Quit: Leaving).
23:12:36 -!- iamcal has joined.
23:14:20 -!- cal153 has quit (Ping timeout: 245 seconds).
23:19:41 <CakeProphet> hmmmm... wonder if you could make an automata in which present states are based on future states.
23:19:51 <CakeProphet> using some kind of fancy nondeterminism to actually implement that.
23:20:22 <cpressey> Again, I will be bold and say "Sure".
23:20:39 <cpressey> But, uh.
23:20:54 <GreaseMonkey> oh hey it's cpressey
23:20:55 <cpressey> It kind of cheapens the concept "state".
23:21:41 <GreaseMonkey> CakeProphet: it'd be a hell of a job making a compiler for it, i guess
23:22:01 <CakeProphet> well... essentially determinization occurs backwards... sort of
23:22:13 <CakeProphet> so you have these undetermined states that become determined upon future input.
23:22:20 <cpressey> 10: if (this program terminates) then terminate else goto 10
23:22:41 <CakeProphet> so, to implement, you're basically executing every possible path, and reduce as new states are received.
23:23:01 <cpressey> That one would seem to have two perfectly valid execution paths
23:23:38 <CakeProphet> hmmm... well it'd be like
23:24:02 <CakeProphet> state 2 is A if state 3 is B
23:25:23 <CakeProphet> and state 3 is B if your mom terminates.
23:25:50 <CakeProphet> ...I think you'd end up having to solve the halting problem somewhere in the transition function
23:26:25 <CakeProphet> though it might be optional... thus making the concept "more" possible.
23:26:34 <cpressey> Well, you'd need some way to at least *look for* solutions to it, yes -- fixed points. Which is quite possible, as long as you don't mind it not being perfect.
23:26:43 <GreaseMonkey> oh, right
23:26:52 <GreaseMonkey> future input, not future states... or is it?
23:27:04 <CakeProphet> ...future states.
23:27:18 <GreaseMonkey> ouch.
23:27:18 <CakeProphet> not /all/ states have to be determined by future states though
23:27:26 <CakeProphet> but
23:27:31 <CakeProphet> since some states are determined by future states
23:27:35 <CakeProphet> you have points of nondeterminism
23:27:41 <cpressey> Anyway, must be off. Later, folks.
23:27:49 -!- cpressey has left (?).
23:27:52 <GreaseMonkey> <cpressey> 10: if (this program terminates) then terminate else goto 10 <-- but what if you'd rather go to 10 instead? then it won't terminate.
23:27:54 <GreaseMonkey> cya...?
23:28:03 <CakeProphet> in which you must run the program for /every/ possible state up until the point in state that uniquely determines your past state
23:28:27 <CakeProphet> and that narrows the execution paths down to one (maybe more?)
23:30:39 <CakeProphet> so... I would go ahead and say that this computational model is impossible for programs with infinite possible states.
23:30:42 <CakeProphet> hmmm... well
23:30:45 <CakeProphet> maybe not.
23:31:10 <CakeProphet> a Turing machine stores an infinite number of FSMs
23:31:14 <CakeProphet> so
23:31:25 <CakeProphet> as long you're working with one or more FSMs you should be good.
23:31:28 <CakeProphet> +as
23:31:35 <CakeProphet> and not... infinite state machines or what have you.
23:31:52 <CakeProphet> because you cannot split execution into infinite paths.,
23:32:00 <CakeProphet> ...conceptually, but not practically.
23:34:26 -!- coppro has joined.
23:35:22 <CakeProphet> hmmm
23:35:31 <CakeProphet> I think to implement this
23:35:44 <CakeProphet> you'd need to have one of the possible states to be bottom
23:36:09 <oklopol> CakeProphet: nondeterminism essentially bases present states on future states, you just fail if you at some point go to a fail state instead of the future state you wanted to get to
23:36:32 <CakeProphet> as in you need something like "if state of automata X is S at time T, then halt, otherwise..."
23:36:48 <CakeProphet> oklopol: yeah... okay. What you're saying sounds equivalent to what I'm saying.
23:37:30 <CakeProphet> so then the question is... can you remove the halt restriction?
23:37:34 <CakeProphet> sanely?
23:38:45 <CakeProphet> hmmm
23:38:54 <oklopol> and nondeterministic turing machines are in fact stronger than deterministic ones, for instance you can solve the halting problem of a deterministic one, say "yes, it doesn't halt" and if it does halt then fail
23:39:00 <oklopol> hmm
23:39:29 <CakeProphet> x = 2; if (x is ever 3): x = 1 (in the present) else: x = 4
23:39:41 <CakeProphet> you would branch at that condition
23:39:44 <CakeProphet> and then in the future
23:39:45 <oklopol> i'm not sure that's a sensible model in general, but it is consistent, can't solve it's own halting problem for instance
23:39:56 <CakeProphet> when x becomes 3 in one of the possible executions
23:40:02 <CakeProphet> you halt
23:40:53 <CakeProphet> so... essentially the halting semantics are still there I guess...
23:41:00 <CakeProphet> but only in implementation
23:42:25 -!- Oranjer has joined.
23:42:36 <oklopol> no okay umm
23:42:53 <CakeProphet> something wrong?
23:43:20 <oklopol> of course a nondeterministic turing machine should halt if there's a computation path that says yes, which can be emulated with a tm
23:43:47 <oklopol> so what i'm thinking is not a nondeterministic tm exactly, i wonder what i'm thinking...
23:44:24 <CakeProphet> oh, the one that can solve halting problem for deterministic turing machines?
23:44:29 <oklopol> yes
23:44:42 -!- biber has joined.
23:44:44 <CakeProphet> yeah... not nondeterministic then, because that would mean you can simulate the algorithm that does that in a tm
23:45:16 <CakeProphet> hmmm... is it quantum maybe? I dunno
23:45:27 <coppro> quantum = nondeterministic
23:45:30 <CakeProphet> the only other types of tm I know are probabilistic and quantum
23:45:41 <CakeProphet> coppro: not quite equal
23:45:45 <CakeProphet> I'd say they're conceptually distinct.
23:45:47 <oklopol> no quantum is not nondeterministic
23:45:59 <oklopol> just like nondeterministic != exponential time
23:45:59 <coppro> oh
23:46:10 <coppro> oh
23:46:14 <coppro> ok I get it
23:46:26 * CakeProphet is greatly enjoying the concept of nondetermnism.
23:46:32 <CakeProphet> spelled properly.
23:46:36 <oklopol> well not "just like" except in the sense that both are often confused
23:47:28 <CakeProphet> so basically my future state condition language is nondeterministic?
23:48:21 <CakeProphet> if x will be 2 then x = 1 else x = 3
23:48:28 <CakeProphet> is conceptually the same as
23:48:32 <CakeProphet> x = 1 and 3
23:49:14 <CakeProphet> ...well no
23:49:22 <CakeProphet> I was going to add some more to that, but my idea didn't hold
23:49:28 -!- pikhq has joined.
23:49:46 <CakeProphet> x = 1 and 3 until x = 2
23:49:47 <CakeProphet> essentially
23:50:01 <oklopol> so basically in my model you can check a language whose complement is in RE, i guess that's... co-turing machines? :P
23:50:08 <CakeProphet> (English until, not Perl until :P )
23:50:16 <GreaseMonkey> x = 3 until x = 2 then x = 1
23:50:19 <oklopol> (because you say yes unless at some point the computation finds a problem with the input)
23:51:03 <oklopol> (so the complement -- problems with input -- can be recursively enumerated)
23:51:04 <CakeProphet> GreaseMonkey: well see... you have to do both 1 and 3
23:51:11 <CakeProphet> because either could result in x becoming 2 later
23:51:25 <GreaseMonkey> hmmkay
23:51:25 <CakeProphet> once x becomes 2... you can eliminate one
23:51:40 <CakeProphet> hmmmm...
23:51:51 <GreaseMonkey> x = (3 until x = 2 then 1)
23:52:27 <CakeProphet> that would implement a kind of backtracking
23:52:45 <GreaseMonkey> yes
23:52:53 <CakeProphet> though... hmmm
23:53:01 <CakeProphet> you have causality issues there.
23:53:05 <GreaseMonkey> "STABLE TIME LOOP ACHIEVED"
23:53:19 <oklopol> so okay
23:53:35 <oklopol> what i was originally thinking is a machine that can check any language in RE \cup co-RE
23:53:36 <CakeProphet> ...thinking about future states in a program makes my head hurt...
23:53:46 <GreaseMonkey> once you've hit x = 2 normally and backtracked, if you hit a halt before x = 2, then you have to backtrack AGAIN
23:54:00 <oklopol> because you can always guess YES/NO, and then run until you find proof that the string is in the language, or proof that it's not
23:54:25 <oklopol> this is not at all what nondeterministic turing machines do, i've just needed a model like this
23:54:40 <oklopol> now let's see what you've been talkign about
23:54:41 <oklopol> *talking
23:54:57 <CakeProphet> I have no clue what I'm talking about
23:55:04 <CakeProphet> but I think semantically it involves solving the halting problem
23:55:37 * CakeProphet finds a good operator for will equal
23:55:42 <CakeProphet> hmmm
23:55:59 <GreaseMonkey> @= ?
23:56:18 <CakeProphet> I like ?=
23:56:40 <CakeProphet> if x ?= C then A else B
23:56:54 <oklopol> i actually don't know anything about the probabilitic models of computation
23:57:07 <CakeProphet> x = A and B until x = c
23:57:12 <oklopol> although it's not very hard to guess how that's best formalized
23:57:42 <CakeProphet> see
23:57:53 <CakeProphet> I think I've figured it out
23:57:58 <CakeProphet> A can be determined completely
23:58:03 <CakeProphet> if x becomes C in the future
23:58:04 <CakeProphet> but B
23:58:13 <CakeProphet> cannot, because if x does not ever equal C
23:58:26 <CakeProphet> then it will never be determined whether or not x was B
23:58:31 <CakeProphet> until the program halts.
23:58:59 -!- oerjan has joined.
23:59:28 <GreaseMonkey> x = (x ?= 2 ? 1 : 3);
23:59:29 <GreaseMonkey> x = (x == 3 ? 2 : 4);
23:59:32 <CakeProphet> so being able to simulate those semantics with a tm would require solving of the halting problem.
23:59:35 <GreaseMonkey> KABOOM
23:59:37 <oklopol> oerjan: i say stupid things in the log, just warning you if you comment on them before reading my elaborations, i might swat you
←2010-06-09 2010-06-10 2010-06-11→ ↑2010 ↑all