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