--- Log opened Fri May 21 00:00:06 2010 |
00:00 | < Namegduf> | I mean, ideally, you'd have a framework core, then a client on top of that, and you could have your stuff hook in and just depend on the framework without the rest of the client, or at least not have any client concerns messing with your use of the framework it's based on |
00:00 | | Derakon [Derakon@Nightstar-1ffd02e6.ucsf.edu] has quit [[NS] Quit: Leaving] |
00:00 | < Namegduf> | But most are a client first and framework second, if you know what I mean, and not really split down the middle into separate components at all. |
00:00 | <@ToxicFrog> | celticminstrel: mine accepts both /msg and /privmsg. *shrug* |
00:01 | < celticminstrel> | Oh. Well, whatever. |
00:01 | <@ToxicFrog> | Namegduf: that's pretty much the point of xchat-text |
00:03 | < Namegduf> | ToxicFrog: But is it a frontend to an "xchat core" that also includes a lot of client functionality, or to just an IRC framework and nothing else? |
00:04 | < celticminstrel> | I'd say it contains client functionality. |
00:04 | < celticminstrel> | It's just not a very good client. |
00:04 | < Namegduf> | I'm not saying it isn't passable |
00:05 | < Namegduf> | I'm saying there's like 1001 bot frameworks out there and latching onto a client doesn't seem the best bet, architecturally. |
00:05 | < celticminstrel> | Is there a way for the script to execute itself and then exit? |
00:06 | < celticminstrel> | So that I don't have to manually shut down and restart it when I want to change something? |
00:06 | < celticminstrel> | (Or another solution for the same.) |
00:06 | <@ToxicFrog> | Namegduf: where do you draw the line between "client stuff" and "bot stuff"? |
00:07 | < Namegduf> | ToxicFrog: Anything (at all) related to the UI of a program, CLI or GUI. Anything relating to stripping or pretty printing of things for user display (although if provided as library functions I guess they're commonly needed enough to be useful) |
00:08 | < Namegduf> | "settings" is another fun one |
00:09 | < Namegduf> | At least where said settings are not really IRC connection parameters, but instead relate to functionality or formatting of a client as a whole. |
00:09 | < Namegduf> | Frameworks don't generally need internal persistent settings. |
00:10 | <@ToxicFrog> | Namegduf: stripping/prettyprinting are provided as library calls, and print stuff goes to stdout. All the UI stuff is gone; the xchat_gui_* functions are still available (so that plugins that depend on them will still load) but do nothing when called. |
00:10 | < Namegduf> | CLI stuff? |
00:11 | < Namegduf> | (gui_ functions existing but doing nothing is ugly as hell, they should be implemented as an extension ON a framework, not in the framework but with a dummy implementation, if done cleanly) |
00:11 | < Namegduf> | (But... not really fatal) |
00:12 | <@ToxicFrog> | the gui_ stuff is still there so that the ABI is identical between the text and full versions. |
00:12 | < Namegduf> | Why does a framework have a "gui version" |
00:12 | <@ToxicFrog> | ... |
00:13 | < Namegduf> | I think that pretty much hits it on the head. |
00:13 | < Namegduf> | It's architectually a client with textual and graphical versions which can sorta pass as a framework |
00:13 | < Namegduf> | Not a client built on an architecturally separate framewor |
00:13 | <@ToxicFrog> | Aaargh |
00:13 | <@ToxicFrog> | ABI compatibility is useful because it lets you use libraries such as the Scheme interpreter even in a headless bot |
00:14 | <@ToxicFrog> | When they would otherwise need to be recompiled from source or else fail with a linker error when you try to load them |
00:15 | <@ToxicFrog> | I'm not sure why you consider this a problem |
00:16 | <@ToxicFrog> | Also, what were you asking about WRT "CLI stuff" earlier? |
00:16 | <@ToxicFrog> | It reads commands from stdin, it writes output to stdout. |
00:17 | < Namegduf> | curses, formatting of user lists, anything really formatted for user consumption rather than machine processing. |
00:18 | <@ToxicFrog> | <ToxicFrog> It reads commands from stdin, it writes output to stdout. |
00:18 | <@ToxicFrog> | That's it. No curses. |
00:19 | < Tarinaky> | "Conjures the Great Duke of Hell, Allocer who speaks to a regiment of enemies, convincing them to devour the enchanted flesh of the fallen, driving them mad with rage and hunger. After the immediate feeding frenzy the surviving troops launch at the closest living thing, with no regard for friend or foe." << Does this match the Steampunk mecha in cool? :/ |
00:20 | <@ToxicFrog> | what |
00:21 | < Tarinaky> | Is that description of a spell as cool as gattling-gun carrying steampunk mecha? |
00:21 | < Namegduf> | Give said duke a guitar. |
00:21 | < Tarinaky> | Namegduf: That's Amdusias' schtick. |
00:22 | < celticminstrel> | ...what? Lists have pop() but not push()? |
00:31 | <@Vornicus> | append() |
00:39 | <@ToxicFrog> | Namegduf: anyways. It's cross-platform, it's cross-language, it's well documented and it actually does all the stuff I want in a framework. |
00:39 | < Namegduf> | "cross-language" is kinda unusual and interesting. |
00:40 | <@ToxicFrog> | Given that most IRC frameworks either don't do nearly enough ("we implemented parse_irc_message, that makes it a framework right?"), or have no documentation, or have serious portability issues, I think I can live with a few xchat_gui_* stubs in the API. |
00:40 | < Namegduf> | Aside that one, every simple Python/Perl IRC framework I've seen is portable. |
00:40 | <@ToxicFrog> | Especially since they're there so that I can load plugins originally developed for the xchat-as-graphical-IRC-client into the bot, some of which are actually useful. |
00:40 | < Namegduf> | POE::Component::IRC is pretty complete on all of those, actually |
00:41 | < Namegduf> | It's one of the reasons I find myself going back to Perl unwillingly. |
00:42 | < Namegduf> | POE::Component::IRC + Some other Perl modules modeling/handling the problem area + glue == IRC bot |
00:42 | < Namegduf> | *IRC bot doing something actually useful |
00:42 | <@ToxicFrog> | "cross-language", in this case, means "consistent, officially supported API for C, Perl, Python, and TCL; unofficial support for Ruby, Lua, Lisp, JavaScript, and probably a few others" |
00:42 | < Namegduf> | That is kinda neat. |
00:43 | <@ToxicFrog> | I've been toying with the idea of adding bash support. |
00:43 | <@ToxicFrog> | Just to see if it can be done. |
00:43 | < Namegduf> | Twisted. |
00:43 | <@ToxicFrog> | All of those except C, I note, originated as plugins for the graphical client. |
00:44 | <@ToxicFrog> | Most of them still are, some of them are now built into the core. |
00:44 | < Namegduf> | Well, I guess my issue is |
00:44 | | You're now known as TheWatcher[T-2] |
00:44 | < Namegduf> | Architecturally, it seems the "framework" is the same code as the graphical client compiled with different bits on and off |
00:45 | < Namegduf> | Instead of having a framework which all the plugins connect to, THEN the GUI connects to itself |
00:45 | < Namegduf> | I mean, I'm the first to complain when things are modularised too heavily, but... |
00:45 | < celticminstrel> | Vornicus: Yeah, I momentarily forgot about that. 9_9 |
00:45 | <@ToxicFrog> | AIUI, it's basically divided into two parts, "core" and "frontend" |
00:45 | < Namegduf> | It sounds quite useful, though. |
00:46 | <@ToxicFrog> | There's two implementations of frontend: one using GTK+, and one that basically aliases everything to printf() |
00:46 | <@ToxicFrog> | And does nothing else. |
00:46 | | You're now known as TheWatcher[zZzZ] |
00:46 | <@ToxicFrog> | xchat uses the former, xchat-text uses the latter. |
00:47 | <@ToxicFrog> | I freely admit that it's more kludgy than having the core implemented as a library which the GUI then links against; in particular, the use of fe_*. |
00:47 | < Namegduf> | Right. |
00:47 | < Namegduf> | It sounds useful, just... kinda kludgy and monolithic. |
00:48 | <@ToxicFrog> | However, it works. And I'd rather have a kludgy but well-documented and useful tool than an elegant one that for whatever reason (nonportable, no documentation, missing key features, written in Perl...) is not useful to me. |
00:48 | < Namegduf> | I'm surprised all the Python ones suck. |
00:48 | < celticminstrel> | ...okay. Overriding in Python... |
00:49 | <@ToxicFrog> | And while I would like to have a libxchatirc that doesn't have any leftover GUI cruft in it, writing actual bots (or other projects entirely) is more fun than writing that is. |
00:49 | < Namegduf> | I probably wouldn't be bothered too much by lack of framework in a decent language, but C would hurt |
00:49 | < celticminstrel> | superclass(self).func()? |
00:49 | <@ToxicFrog> | Well, IIRC we found three python ones while looking earlier; one is undocumented, one is missing rather important features like flow control, and one is xchat. |
00:50 | < Namegduf> | I wrote a Go "framework" in an afternoon once to learn the language. |
00:50 | < Namegduf> | (Other people did better, proper ones later) |
00:50 | <@ToxicFrog> | And yeah, you may have noticed that I don't write anything in C these days except extension/translation libraries for high level languages |
00:50 | < Namegduf> | C is very nice with the appropriate libraries present |
00:51 | <@ToxicFrog> | I think we have drastically different definitions of "very nice". |
00:51 | < celticminstrel> | Actually, both were undocumented. |
00:51 | <@ToxicFrog> | Closures or gtfo. |
00:51 | < Namegduf> | If you're just dealing with the stdlib and POSIX functionality and trying to build up from there |
00:51 | < Namegduf> | I don't find myself wanting closures in C; they feel weird because of what they do to variable extant |
00:52 | < Namegduf> | They're nice in higher level languages, though. |
00:52 | <@ToxicFrog> | I'm not talking about libraries; the language itself is deficient for my purposes and by the time you've bolted enough onto it to fix that you might as well have just written an interpreter for a HLL. |
00:52 | < Namegduf> | If you say so; it is a pretty poor language by modern standards in a lot of ways, for two categories of reason; |
00:53 | < Namegduf> | One is that it is only a step up from portable assembly, and the other is the bizarre and historically stupid decisions made that kludge it up |
00:53 | < Namegduf> | int* foo, bar: I'm looking at you |
00:54 | < Namegduf> | I find it quite tolerable, though, because almost everything is explicit and it's as a result very easy to reason with. |
00:54 | <@McMartin> | Semi-standardized ABI decisions that make tail call elimination basically impossible: Also something to glare at |
00:54 | <@McMartin> | Mmm. I'd quibble on that last bit without some extra constraints. |
00:54 | <@ToxicFrog> | Stuff I get really uncomfortable without: closures, lambdas, higher-order functions, block scope, macros, Haskell's type system, tail call optimization |
00:55 | <@McMartin> | Things like precise destructors (what I think TF is using 'block scope' to mean here) are traditionally very hard to get right in C. |
00:55 | <@ToxicFrog> | Of those, C has, um, block scope, really weaksauce macros, really ugly higher-order functions. |
00:55 | < Namegduf> | I hate macros. |
00:55 | < Namegduf> | Even in C. |
00:55 | <@ToxicFrog> | McMartin: I actually just mean block scope, as opposed to Python's function scope or BASIC's global scope. |
00:56 | <@ToxicFrog> | Precise destructors are nice but I don't miss them when I don't have them. |
00:56 | < Namegduf> | Metaprogramming is a very nice way to make your program become very annoying to read |
00:56 | <@ToxicFrog> | Metaprogramming is a very nice way to shape a DSL for whatever the task at hand is. |
00:56 | <@McMartin> | C doesn't have proper higher-order functions. It has function pointers, which are about half of what you need. |
00:56 | < celticminstrel> | ...okay, what does the = or @ at the start of a NAMES response mean? Channel mode or something? |
00:56 | < Namegduf> | Metaprogramming in a *separate language* means you're actually learning a second, small language into the deal, too. |
00:57 | <@McMartin> | Too many APIs I need have paired methods required for correctness for me to be able to deal happily without precise destructors/using clauses/other enforcement mechanisms. |
00:57 | < Namegduf> | THe big issue with macros is that in order to mentally parse the code, you must know what the macro does. |
00:57 | < Namegduf> | Some, like a weird "FOREACH" I once saw, are thus quite okay |
00:57 | <@ToxicFrog> | celticminstrel: check RFC1459, I don't remember offhand |
00:58 | < Namegduf> | You can pretty immediately see exactly what said macro is doing. |
00:58 | <@ToxicFrog> | Namegduf: ok, but this is just a variation on "nondescriptive names are bad", which is true whether you're using macros or not |
00:58 | < Namegduf> | As a way of implementing a DSL, I could see them, too |
00:58 | <@McMartin> | Yeah |
00:58 | < Namegduf> | My real issue is *per program macros* |
00:58 | <@McMartin> | I know of several cases where the "DSL" was just a perl script that did smarter "C extensions" for that program |
00:58 | <@ToxicFrog> | And bear in mind that by "macro" I don't mean cpp's anemic capabilities, but stuff like Scheme's direct AST translation |
00:58 | < Namegduf> | Macros defined as a shortcut within a specific program |
00:59 | < Namegduf> | I'm afraid I only know cpp's capabilities. |
00:59 | < Namegduf> | Of the two. |
00:59 | <@McMartin> | cpp is the worst of call by name and lexical hackjobbery |
00:59 | <@ToxicFrog> | Yeah, when I think "macro" I am thinking "the ability to modify the language definition itself at runtime" |
00:59 | < Namegduf> | My real complaint is people transforming the language within every specific program or within specific files to make things "prettier" or to define repeated sections instead of using a function call |
01:00 | <@McMartin> | Hm. That latter depends on code provenance |
01:00 | <@ToxicFrog> | One of the tutorial examples for Scheme's macro system changes it from using () to organize code to using Python-style indentation. |
01:00 | <@McMartin> | In C++, there's no excuse, because inline keywords exist |
01:00 | < Namegduf> | In C, there's also no excuse |
01:00 | < Namegduf> | Because if your compiler does not support inlining |
01:00 | <@ToxicFrog> | Two of the examples for Lua's are adding try/catch blocks and pattern matching. |
01:00 | <@ToxicFrog> | That's the kind of thing I'm talking about. |
01:00 | < Namegduf> | Then you really, really should just FIX THE COMPILER instead of hacking up your program |
01:00 | <@McMartin> | Not all devs have that luxury |
01:01 | < Namegduf> | Is the compiler closed source? |
01:01 | < Namegduf> | Note: I see this a lot outside of performance critical code. |
01:01 | <@McMartin> | If they're a library dev and want to be able to say "we work with acceptable performance with compilers X Y Z" they don't get to modify it even if it's open. |
01:01 | < Namegduf> | Hmm, I guess. |
01:02 | < Namegduf> | That case counts. |
01:02 | <@McMartin> | There are limits. |
01:02 | <@McMartin> | The autotools have a similar issue with Bourne Shell implementations of various ages, and that's well past my pain threshold |
01:02 | < Namegduf> | In terms of real macros/language redefinition, I'll say that it's okay so long as people don't treat it the way they treat macros. |
01:02 | < celticminstrel> | ...it's not in RFC1459... |
01:02 | <@McMartin> | Also, re: DSLs and syntax macros... |
01:02 | < celticminstrel> | Well, it's probably not important...? |
01:03 | < Namegduf> | If you treat every redefinition as "I am changing the language" then that's okay. If you proceed to go on and make it ungodly complex |
01:03 | <@McMartin> | If what you're really presenting is a DSL, but it's secretly a modified version of a pre-existing language using that language's own tools, more power to you |
01:03 | < Namegduf> | Right. |
01:03 | <@McMartin> | Patching that into some other program into that language is the sin, not making the DSL to begin with |
01:04 | <@ToxicFrog> | celticminstrel: it's probably some wacky server-specific extension that most clients ignore, then |
01:04 | <@McMartin> | Though if you do it right, DSLs as a partial implementation strategy are also fine, of course (hi, every game with interesting maps and/or NPCs ever) |
01:04 | < Namegduf> | It's channel modes. |
01:04 | < Namegduf> | @nick indicates they have the prefix @ and so forth. |
01:04 | <@ToxicFrog> | Namegduf: No, I think he means: |
01:05 | < Namegduf> | Okay |
01:05 | <@ToxicFrog> | >> :Deepthought.NY.US.Nightstar.Net 353 ToxicFrog = #code :gnolam Syloqs-AFH Alek PinkFreud @McMartin Namegduf TheWatcher[zZzZ] @jerith @Vornicus Rhamphoryncus SmithKurosaki Serah celticminstrel @Derakon[AFK] EvilDarkLord @Kazriko @ToxicFrog ~@Reiver Tarinaky Reiv[Graduate] Thaqui cpu |
01:05 | <@ToxicFrog> | What's the "="? |
01:06 | | * Namegduf looks for clarification |
01:07 | < gnolam> | Oi. What's this highlighting all about? |
01:08 | < Namegduf> | this->IsModeSet('s') ? '@' : this->IsModeSet('p') ? '*' : '=' |
01:08 | < Namegduf> | That is what it means |
01:08 | < celticminstrel> | ToxicFrog = #code :... |
01:08 | < celticminstrel> | So, @ means secret? |
01:08 | < Namegduf> | Yes. |
01:08 | < Namegduf> | And * private. |
01:08 | < Namegduf> | And = nothing. |
01:08 | < celticminstrel> | Thanks. |
01:08 | < Namegduf> | I don't know where that's standardised, if at all, so I'd be wary of counting on it |
01:08 | < Namegduf> | But that's the code in InspIRCd |
01:11 | < Namegduf> | Looks like Charybdis/ShadowIRCd do the same |
01:11 | < Namegduf> | Which probably implies that ircd-seven does, too. |
01:11 | < Namegduf> | I don't feel like looking at uglier IRCDs which I don't have at hand. |
01:12 | <@ToxicFrog> | It's not a formal standard, but it's probably a de facto standard by now. |
01:13 | < Namegduf> | Are you doing this from your connection, or from your bot's? |
01:14 | | Derakon[AFK] is now known as Derakon |
01:14 | < Namegduf> | Doesn't look like it's related to NAMESX, which was what I was thinking. |
01:15 | < Namegduf> | Aha! |
01:15 | < Namegduf> | RFC 2812 defines it |
01:15 | < Namegduf> | It's normally wrong, possibly very wrong, to treat 2812 as authoritative |
01:15 | < Namegduf> | It was from the time where IRCnet were basically wandering off and writing their own crap as RFC and everyone implementing it ignored them |
01:15 | | * celticminstrel fails to find an explanation of which characters are allowed in nicknames... |
01:15 | < Namegduf> | But some bits of their stuff are applied. |
01:16 | < Namegduf> | Explanations are not going to be forthcoming. |
01:16 | < Namegduf> | :P |
01:16 | < celticminstrel> | I know letters, digits, and underscores... |
01:16 | <@McMartin> | Dashes are OK |
01:16 | < Namegduf> | Oh, you mean a list. |
01:16 | <@McMartin> | Square brackets seem to be too |
01:16 | < Namegduf> | Not an explanation as to why. |
01:16 | < celticminstrel> | Also a bunch of special characters like ` [ ] | |
01:17 | < celticminstrel> | Namegduf: Do you happen to have such a list, or should I try changing my nick and see what happens? |
01:17 | < Namegduf> | celticminstrel: Hold on |
01:18 | <@ToxicFrog> | celticminstrel: look under "message format in pseudo-bnf" |
01:18 | < Namegduf> | if ((*i >= 'A') && (*i <= '}')) |
01:18 | < Namegduf> | Ah, wait. |
01:18 | <@ToxicFrog> | <nick> ::= <letter> { <letter> | <number> | <special> } |
01:18 | < Namegduf> | Comments! |
01:18 | < Namegduf> | /* "A"-"}" can occur anywhere in a nickname */ |
01:18 | <@ToxicFrog> | <special> ::= '-' | '[' | ']' | '\' | '`' | '^' | '{' | '}' |
01:18 | < Namegduf> | /* "0"-"9", "-" can occur anywhere BUT the first char of a nickname */ |
01:18 | < Namegduf> | There you go. |
01:19 | < celticminstrel> | ....hehe, two people looking it up. Thanks. |
01:19 | | * Namegduf has the source to hand, and grep |
01:20 | < Namegduf> | Took me a few to find IsNickHandler::Call, though |
01:20 | | * ToxicFrog has a copy of RFC1459 and a decent sense of how it's laid out |
01:22 | < Namegduf> | Hmm. |
01:22 | < Namegduf> | Is it normally possible in Linux to pass file handles between processes? |
01:22 | <@Vornicus> | No. |
01:22 | < Namegduf> | How does irssi handle upgrading on the fly? |
01:23 | <@Vornicus> | exec() |
01:23 | <@Vornicus> | essentially replace one program with another... with the original's memory in place. |
01:23 | < Namegduf> | And its handles? |
01:23 | <@McMartin> | exec means it's not "between processes" |
01:23 | < Namegduf> | Makes sense. |
01:23 | <@McMartin> | It's the same process, just overwritten |
01:24 | < Namegduf> | So you'd need to let the new copy of yourself find out what it had, basically. |
01:24 | <@Vornicus> | How the shit that manages to work, I don't know, but it's one of the deepest magics out there. |
01:25 | < Namegduf> | Interesting. |
01:25 | <@McMartin> | Hm, I don't have man pages on this system |
01:26 | <@McMartin> | I'm not sure if POSIX has an equivalent to Win32's DuplicateHandle(), which will let you create a version of a handle that some other process can use |
01:27 | <@McMartin> | It wouldn't surprise me either way, tbh; POSIX is a little less hardcore about everything being the same master handle type |
01:29 | <@Vornicus> | But for instance X-COM uses exec to hop between geoscape and battlescape modes. |
01:40 | | gnolam [lenin@Nightstar-38637aa0.priv.bahnhof.se] has quit [[NS] Quit: Z?] |
01:41 | < celticminstrel> | ...why does enumerate() not work as expected on dictionaries? |
01:41 | <@Vornicus> | What do you expect? |
01:42 | < celticminstrel> | I expected it to return a set of (key, value) pairs, but it returns a set of (index, key) pairs. |
01:42 | <@Vornicus> | The default dictionary iterator gives keys only |
01:42 | <@Derakon> | You want foo.iteritems() |
01:42 | <@Vornicus> | if you want to enumerate all items, use dict.iteritems() |
01:42 | <@Derakon> | \o/ |
01:42 | < celticminstrel> | Oh. |
01:42 | <@Vornicus> | CURSE YOUR FINGERS |
01:43 | < celticminstrel> | Well, I guess I got confused because I've been using PHP recently. |
01:43 | <@Derakon> | Poor lad~ |
01:43 | <@Vornicus> | If you /also/ want a numbering, enumerate(my_dict.iteritems() will give (index, (key, value)) |
01:43 | < celticminstrel> | Actually, I just wanted the keys. |
01:43 | <@Vornicus> | but the dictionary items will come out in no particular order. |
01:44 | < celticminstrel> | Order doesn't matter. |
01:44 | <@Vornicus> | Good, cuz you don't get any. |
01:45 | <@Derakon> | If you just want the keys, then do foo.keys() |
01:45 | <@Derakon> | And yeah, dicts are unordered. |
01:45 | <@Vornicus> | well, that gives a list of keys. |
01:45 | <@Vornicus> | If you intend on just iterating over them, use just for k in foo:, or for k in foo.iterkeys(): |
01:45 | <@Derakon> | Mm, point. |
01:46 | < celticminstrel> | Yeah, I just wanted 'for x in foo'. |
01:47 | <@Derakon> | Man, "for (x, y) in foo" could really confuse a Python newbie who didn't realize you were using tuples as keys... |
01:48 | | * Vornicus has done for a, (b, (c, d), e) in foo. Once. And then decided that was crazy. |
01:49 | <@Derakon> | ;_; |
01:49 | < celticminstrel> | Wait, tuples are hashable? |
01:49 | <@Vornicus> | Tuples are hashable. |
01:49 | <@Derakon> | Pretty much anything that isn't mutable is hashable. |
01:50 | <@Vornicus> | So, in the standard list: numbers (all types), strings, tuples, frozensets, booleans, and None. |
01:54 | <@Vornicus> | (yes you can use None as a key in a dictionary.) |
01:55 | <@Derakon> | ...does Python recognize the empty tuple as a valid object? |
01:55 | <@ToxicFrog> | Lists aren't hashable? |
01:55 | <@Vornicus> | Yes. |
01:55 | <@Derakon> | Lists are mutable. |
01:55 | <@Derakon> | Ergo, not hashable. |
01:55 | <@Vornicus> | Lists are not hashable; they are mutable, so using them as dictionary keys is an exercise in madness. |
01:56 | <@Derakon> | You can make custom mutable objects that are hashable and behave just like lists, though, if you feel like a little Lovecraft. |
01:56 | <@ToxicFrog> | I don't consider the conclusion to automatically follow from the premises; there appears to be an implicit additional premise that the hash of an aggregate object must be modulated by its components. |
01:56 | <@Vornicus> | That is correct. |
01:57 | <@Vornicus> | Or, more precisely: the hash must be equal for objects that compare equal. |
01:58 | <@Vornicus> | Since lists compare equal if their contents are equal, then a hash (which gets stored, remember!) must always come from those contents. But since lists are mutable, a hash on them will change -- and stored hashes of that list will go stale. |
01:59 | <@ToxicFrog> | Aah. |
01:59 | <@ToxicFrog> | I was unaware of the equality constraint. |
01:59 | < Rhamphoryncus> | So I've noticed that my computer (and my dad's) are receiving about 30 kB/s on the LAN. netstat lists *no* TCP or UDP connections on his. I'm not running downloads on mine. Any suggestions for diagnosing it? |
02:00 | <@Vornicus> | It's the point of a hash. |
02:01 | <@ToxicFrog> | Vornicus: no, I mean the "lists are == if their contents are ==" constraint |
02:01 | <@Vornicus> | ah |
02:04 | <@Vornicus> | Technically you /can/ make mutable objects which hash - but none of the mutable properties may contribute to either equality or the hash. |
02:05 | | * ToxicFrog nods |
02:08 | | * Rhamphoryncus wonders if CPS is a typo for BPS (bytes per second?) |
02:08 | <@ToxicFrog> | Characters per second. |
02:09 | < Rhamphoryncus> | ugh stupid promiscuous mode |
02:09 | < Rhamphoryncus> | thanks |
02:09 | < Rhamphoryncus> | why not B/s like is normal? x_x |
02:10 | <@Vornicus> | Citizen: you are now charged with fifth degree nonfeasance. Please report to the nearest Civil Protection unit for processing. |
02:11 | <@ToxicFrog> | They aren't always the same thing. |
02:11 | < Rhamphoryncus> | difference is? |
02:11 | < Rhamphoryncus> | ettvm10.ttv.telus.net,4545 239.192.10.33,4545 udp 2461K 29K |
02:12 | < Rhamphoryncus> | that is the culprit. Related to the tv service somehow |
02:12 | <@McMartin> | "nonfeasance"? |
02:13 | <@Vornicus> | Overwatch says a lot of ridiculous things. |
02:14 | <@McMartin> | If my dog latin is right, that's "fifth degree not doing anything" |
02:14 | <@Derakon> | I'm looking forward to HL2 being ported to OSX... |
02:15 | <@Vornicus> | "Individual, you are charged with capital malcompliance. Anti-citizen status approved." |
02:16 | < celticminstrel> | You mean it isn't yet? |
02:16 | < celticminstrel> | Derakon? |
02:16 | <@Derakon> | Not TMK. |
02:17 | <@Vornicus> | Not yet. |
02:17 | <@Derakon> | It'll probably be released soonish, though. |
02:17 | <@Vornicus> | It'll be showing up soon. Next few weeks. |
02:17 | < celticminstrel> | I would've thought that since Portal was ported that Half Life 2 would have been ported too. |
02:17 | <@Derakon> | Yeah, but they're spreading out the releases to get more cash. |
02:18 | < celticminstrel> | I see. |
02:18 | <@McMartin> | I suspect that Portal is the final beta test for Mac Source. |
02:19 | < Namegduf> | I'm half looking forward to native Linux. |
02:19 | < Namegduf> | Only half because I WINE it, and will continue to WINE it for Audiosurf. |
02:19 | <@McMartin> | Mmm, Audiosurf |
02:19 | <@Vornicus> | Thing I didn't know: |
02:19 | | * McMartin has been working on some Audiosurf superplay videos. |
02:19 | <@Vornicus> | GladOS and Overwatch are /both/ Ellen McLain. |
02:20 | <@McMartin> | Ellen McLain is the only VA with parts in every Orange Box game. |
02:20 | <@McMartin> | She is also The Administrator. |
02:20 | <@Derakon> | McM: superplay as in using prerecorded input? |
02:20 | <@Vornicus> | She's not in Episode 2 |
02:20 | <@McMartin> | Derakon: No, just Being Good At It. |
02:20 | <@Derakon> | Ah, righto. |
02:20 | < Rhamphoryncus> | 6.2. The IPv4 Organization Local Scope -- 239.192.0.0/14 |
02:20 | < Rhamphoryncus> | 239.192.0.0/14 is defined to be the IPv4 Organization Local Scope, |
02:20 | < Rhamphoryncus> | and is the space from which an organization should allocate sub- |
02:20 | < Rhamphoryncus> | ranges when defining scopes for private use. |
02:20 | <@Derakon> | (One expansion of TAS is Tool-Assisted Superplay) |
02:21 | <@McMartin> | Yeah, but AIUI Superplay is "you're watching them because they're good at it/are doing something unusual as their challenge" as opposed to, say, for the commentary or as an example of what the ordinary experience of the game is like) |
02:23 | <@ToxicFrog> | Rhamphoryncus: one character is not always one byte - see any wide character encoding. |
02:23 | | * Derakon nods. |
02:23 | <@ToxicFrog> | That said, a lot of stuff that reports CPS is actually counting BPS, and thus becomes wrong when you start stuffing unicode data through it~ |
02:24 | <@McMartin> | I think part of the problem with "BPS" is that it's too similar to "bps", which is a different number. |
02:24 | <@McMartin> | Traditionally off by a factor of 8 or so. |
02:25 | <@Vornicus> | ...wait, yes she is. She talks when you're in the hut after talking to The Magnussen. |
02:39 | < Rhamphoryncus> | one character is often not one character. See unicode grapheme clusters :P |
02:40 | | * Vornicus tries that again anyway |
02:40 | < Rhamphoryncus> | This was a network diagnostic tool. It had *nothing* to do with the text displayed to the end user |
02:42 | <@Vornicus> | r?o?c?k?d?o?t?s? |
02:43 | <@McMartin> | My terminal can't handle that =( |
03:07 | < Rhamphoryncus> | I just get question marks too. Probably not using utf-8 ;) |
03:10 | < celticminstrel> | ... |
03:14 | <@McMartin> | I am using UTF-8, but my terminal emulator can only handle the BMP. |
03:14 | <@McMartin> | And noncombining chars. |
03:14 | < Namegduf> | That seems likely to be the case for me, too. |
03:16 | <@McMartin> | Observe: R?ckd?ts |
03:19 | <@Vornicus> | It even ate the ?s, which are technically latin extended - you're stuck in /ASCII/, apparently |
03:20 | < Namegduf> | McMartin's looked fine here. |
03:20 | <@Vornicus> | Man, stuff's getting eaten everywhere |
03:20 | <@Vornicus> | I see no vowels in McM's. |
03:20 | < celticminstrel> | For McMartin, I saw "R?ckd?ts" with the o-umlauts |
03:24 | < Rhamphoryncus> | I saw R?ckd?ts too |
03:24 | < Rhamphoryncus> | Vornicus: it's just you that's stuck in ASCII land, or you somehow pasted a 2-byte encoding like UTF-16 |
03:25 | <@Vornicus> | It /should/ be UTF-8 all the way through. |
03:25 | < Rhamphoryncus> | obviously wasn't |
03:25 | <@McMartin> | Hrm |
03:26 | <@McMartin> | It's possible but very unlikely that we're all on Latin-1, but |
03:26 | <@McMartin> | Nope, terminal says UTF-8 |
03:26 | < Namegduf> | Pretty sure I'm not, just because half the time my Unicode is broken |
03:26 | < Namegduf> | Then I notice and go "^A :utf8 on on" and it's fixed. |
03:26 | < Namegduf> | Basically, every time I reattach to screen I need to do that. I somehow broke something. |
03:27 | <@McMartin> | Namegduf: Are you passing screen the -U option? |
03:27 | < Rhamphoryncus> | utf-8? ? = infinity |
03:27 | < Namegduf> | McMartin: No, but it wa working fine. |
03:27 | <@McMartin> | Score, Rham |
03:27 | < Namegduf> | Working. |
03:27 | <@McMartin> | So, -U is the "be Unicode, for serious" command line option, so screen -drU is my usual resume command |
03:28 | < Rhamphoryncus> | nifty looking non-BMP ugaritic character: ? |
03:28 | < Namegduf> | No dice here. |
03:28 | <@McMartin> | That's just a square here. |
03:28 | < Rhamphoryncus> | U+10383 |
03:29 | < Rhamphoryncus> | You *probably* don't have a font. It might be broken UTF-16 surrogate handling |
03:29 | <@Vornicus> | The infinity didn't come through properly. The 10383 came through as a 10380-zone placeholder. |
03:30 | < Rhamphoryncus> | Vornicus: really weird |
03:30 | <@Vornicus> | ("utf-8? = infinity") |
03:30 | < Namegduf> | You might not be using UTF-8 if the infinity didn't work, somehow. |
03:30 | <@McMartin> | Could be his client screwing up |
03:31 | < Namegduf> | Could it be his client is on ASCII, and interpreting stuff bigger than ASCII as UTF-16 or UTF-32 or similar? |
03:31 | < Namegduf> | Encoding "guessing" stuff can be... odd. |
03:32 | < Rhamphoryncus> | infinity is 0xE2 0x88 0x9E |
03:33 | < Rhamphoryncus> | U+10383 is 0xF0 0x90 0x8E 0x83 |
03:56 | | Thaqui [Thaqui@27B34E.D54D49.F53FA1.6A113C] has quit [Client closed the connection] |
04:47 | | Serah [Z@26ECB6.A4B64C.298B52.D80DA0] has quit [Ping timeout: 121 seconds] |
05:11 | | Serah [Z@3A600C.A966FF.5BF32D.8E7ABA] has joined #code |
05:25 | | celticminstrel [celticminstre@Nightstar-f8b608eb.cable.rogers.com] has quit [[NS] Quit: *hums* Can't stay now!] |
06:16 | | AnnoDomini [annodomini@Nightstar-32801df0.adsl.tpnet.pl] has joined #code |
06:16 | | mode/#code [+o AnnoDomini] by Reiver |
06:20 | | cpux is now known as shade_of_cpux |
06:26 | | Derakon is now known as Derakon[AFK] |
06:38 | <@McMartin> | Ha *ha*, I did it. |
06:38 | | * McMartin finally Ninja Stealths "Lightyears Away", is the greatest ninja in the world |
06:38 | < Namegduf> | Haha. |
06:39 | < Namegduf> | Awesome. |
06:39 | <@McMartin> | And, I got it on FRAPS~ |
06:39 | < Namegduf> | I can't do stealth because I like to play on horrible horrible songs |
06:39 | <@McMartin> | This was not the kindest of songs, really |
06:39 | < Namegduf> | Oh, well, I also suck |
06:39 | < Namegduf> | But it's still fun |
06:40 | <@McMartin> | Oh yes |
06:40 | | * McMartin is terrible at the Klaxers, can only Ninja. |
06:40 | <@McMartin> | But after this I think it's time I learned to Klax. |
06:40 | <@McMartin> | It is the twenty-first century, and it is time for Audiosurf |
07:35 | <@Vornicus> | dammit now I wish I was home so I could Vorncast. |
07:38 | <@Vornicus> | (it's kinda like breencasting except 1. you don't have to see my ugly mug, and 2. I don't excoriate the Overwatch.) |
07:38 | <@McMartin> | I ASK YOU, WHAT BETTER ENDEAVOR EXISTS THAN A SANDWICH |
07:38 | <@Vornicus> | Greater, for one thing. |
07:39 | <@Vornicus> | and I don't even remember what the endeavor he praises so highly /is/ |
07:58 | | Thaqui [Thaqui@27B34E.D54D49.F53FA1.6A113C] has joined #code |
08:01 | <@jerith> | A cup of tea. |
08:01 | <@Vornicus> | No, that's TW's icon. |
08:01 | <@jerith> | Ah. |
08:03 | <@Vornicus> | Found it: collaboration. |
08:03 | <@Vornicus> | "It has come to my attention that some have lately called me a collaborator, as if such a term were shameful. I ask you, what greater endeavor exists than that of collaboration? In our current unparalleled enterprise, refusal to collaborate is simply a refusal to grow - an insistence on suicide, if you will." |
08:09 | <@Vornicus> | Practically all the Breencasts are on imdb. |
08:10 | <@McMartin> | OK, it's up, though it's apparently still processing. http://www.youtube.com/watch?v=y8nuqXwbaec |
08:16 | <@Vornicus> | yay world record! |
08:19 | <@McMartin> | (Also note the Casual record is held by some "McMartin" dude >_>) |
08:47 | | gnolam [lenin@Nightstar-38637aa0.priv.bahnhof.se] has joined #code |
08:50 | | You're now known as TheWatcher |
09:14 | < gnolam> | Caution: do not edit /etc/fstab while intoxicated. |
09:23 | <@Vornicus> | Don't carouse and su root? |
09:45 | < gnolam> | Sudoing under the influence. |
09:47 | <@Vornicus> | Sudoing While Sauced |
10:17 | < Rhamphoryncus> | rooting while rooted |
10:19 | <@Vornicus> | Match goes to Rham, I guess |
10:21 | < Rhamphoryncus> | bonus points for potato vodka |
10:23 | <@Vornicus> | Rooting while rooted with roots. |
10:27 | < Rhamphoryncus> | Although it seems a potato isn't technically a root |
11:07 | | Rhamphoryncus [rhamph@Nightstar-bbc709c4.abhsia.telus.net] has quit [Client exited] |
11:37 | < gnolam> | Darnit. I know I had a todo list somewhere... |
12:34 | | Thaqui [Thaqui@27B34E.D54D49.F53FA1.6A113C] has quit [Connection closed] |
13:49 | | celticminstrel [celticminstre@Nightstar-f8b608eb.cable.rogers.com] has joined #code |
14:02 | | Tarinaky [Tarinaky@Nightstar-ca63009e.adsl.virginmedia.net] has quit [Operation timed out] |
14:16 | | Tarinaky [Tarinaky@Nightstar-65dff03c.adsl.virginmedia.net] has joined #code |
15:56 | < gnolam> | ... check http://www.google.com |
15:57 | < gnolam> | Today's funky Google logo is a Pacman game. :) |
15:57 | <@AnnoDomini> | It even works. |
16:07 | <@ToxicFrog> | Hmm. |
16:08 | | * ToxicFrog pokes C with a stick |
16:08 | < Namegduf> | * C bites |
16:12 | < celticminstrel> | What's wrong? |
16:15 | < celticminstrel> | XD |
16:17 | <@ToxicFrog> | Fighting with static. |
16:25 | | * ToxicFrog hugs gdb |
16:33 | < celticminstrel> | Yeah, it's useful, but I'd rather have a GUI debugger... |
16:44 | < Tarinaky> | Why? |
16:45 | | gnolam [lenin@Nightstar-38637aa0.priv.bahnhof.se] has quit [[NS] Quit: Reenactment time] |
16:45 | < celticminstrel> | It's a bit easier to do stuff, and I don't have to remember all the commands. I like XCode's debugger, which I suppose gives the best of both worlds. |
16:46 | <@ToxicFrog> | There are graphical frontends to gdb, although I can't tell you how good they are because I've never used them. |
16:47 | < Tarinaky> | There're a couple of bugs in the Pacman game on google. |
16:47 | < Tarinaky> | Namely when you eat a blue ghost it'll respawn as a normal ghost, rather than blue one. |
16:48 | < Tarinaky> | celticminstrel: Eh. There aren't a lot of commands to remember... backtrace, up, down, print, set, break delete and run? |
16:48 | < Tarinaky> | Oh and list |
16:48 | < Tarinaky> | But I pretend l is look and that I'm playing a text-adventure >.> |
16:48 | < celticminstrel> | XCode's debugger is a graphical frontend to gdb; you have the "step through the code view" and an interface for managing things like breakpoints, watches, viewing memory, etc... and you also have the gdb console if you want it. |
16:49 | < celticminstrel> | Sometimes it breaks down and cries, though. |
16:51 | < Tarinaky> | My only complaint with gdb is I need to figure out a way to script two terminals to launch with one loading gdb and the other one to redirect the program to using 'tty' |
16:51 | <@ToxicFrog> | Tarinaky: my most-used commands: where frame print break watch next cont |
16:51 | < Tarinaky> | Possibly within a screen session so you can flick between them with Ctrl+A |
16:51 | <@ToxicFrog> | "redirect the program to using tty"? |
16:52 | < Tarinaky> | It's been a while since I used gdb, let me check what the command's called. |
16:52 | < Tarinaky> | (gdb) help tty |
16:52 | < Tarinaky> | Set terminal for future runs of program being debugged. |
16:52 | < Tarinaky> | Usage: set inferior-tty /dev/pts/1 |
16:53 | < Tarinaky> | ToxicFrog: essential if you're using curses. |
16:53 | <@ToxicFrog> | Aah. |
16:53 | <@ToxicFrog> | If you don't need to run the program inside gdb from the start, you can always run it first and then use 'attach' from another terminal |
16:54 | < Tarinaky> | ToxicFrog: I prefer to launch gdb first so I can kill and restart the program. |
16:54 | < Tarinaky> | Since gdb will automatically reload the symbol table if the program's touched. |
16:55 | < celticminstrel> | There's also the step command which is useful. |
16:55 | < celticminstrel> | I think. |
16:55 | < Tarinaky> | Step and Next. |
16:55 | < celticminstrel> | Yes. |
16:56 | < Tarinaky> | There're a lot of commands but they're all pretty easy to remember. |
16:56 | <@ToxicFrog> | Also, you really only need to remember one |
16:56 | <@ToxicFrog> | 'help' |
16:56 | < celticminstrel> | And... knowing that tty command could be quite useful... |
16:57 | < Tarinaky> | Admittedly curses is the only use-case I can think of for tty. |
16:58 | < Tarinaky> | ToxicFrog: What does Watch do? |
16:59 | < celticminstrel> | Watching a specific variable, I believe. |
16:59 | < Tarinaky> | Likewise frame. |
16:59 | | Attilla [Attilla@Nightstar-5d258bee.threembb.co.uk] has joined #code |
16:59 | | mode/#code [+o Attilla] by Reiver |
16:59 | < Tarinaky> | I don't understand the help for frame :/ |
16:59 | < celticminstrel> | Does it print the current entry on the call stack, maybe? |
16:59 | <@ToxicFrog> | frame lets you switch stack frames. |
17:00 | <@ToxicFrog> | 'up' and 'down' move you up and down one frame; 'frame n' lets you move directly to a frame. |
17:00 | < Tarinaky> | Ahhh. |
17:00 | <@ToxicFrog> | So you can, for example, 'frame 5' rather than 'up. up. up. up. up.' |
17:01 | < Tarinaky> | up[enter][enter][enter][enter][enter] :p |
17:10 | < celticminstrel> | Still, frame 5 wouldn't scroll the console up as much. |
17:12 | < celticminstrel> | ^terminal |
18:03 | | * jerith requires a perlmeister. |
18:04 | <@jerith> | http://pastebin.starforge.co.uk/301 |
18:04 | <@jerith> | Can anyone tell me what that function is actually doing? |
18:06 | | * jerith pokes TheWatcher. |
18:15 | | * jerith figures it out by playing with it. |
18:15 | <@jerith> | That's utterly, utterly horrible. |
18:16 | | * Vornicus eyes google.com |
18:16 | <@Vornicus> | It's playable. |
18:17 | <@jerith> | There *has* to be a better way to do it than that. |
18:17 | <@Vornicus> | what is it doing? |
18:18 | <@jerith> | It builds a table of mappings. |
18:18 | <@jerith> | The first parameter is the name of the table. |
18:18 | <@jerith> | The second is an identifier of some sort. |
18:20 | <@jerith> | Every time it gets an identifier it hasn't seen before, it adds it to the mapping with the next integer as the value. If the identifier is already in the table, it just returns the id associated with it. |
18:20 | | * jerith is rewriting it in Python. |
18:21 | <@jerith> | (Once I know what uses it and stuff, I can replace it with something less insane.) |
18:21 | <@jerith> | All this is obfuscated, however, by the fact that Perl will helpfully do whatever it thinks is right if you give it nonsence. |
18:21 | <@jerith> | *nonsense. |
18:24 | <@jerith> | Try this: perl -e 'print $FOO->{"id"}->{1}++ . "\n";' |
18:25 | <@Vornicus> | 0 |
18:25 | <@Vornicus> | I can't tell what the fuck it's doing |
18:27 | <@jerith> | What it's doing is seeing that you're trying to write to a cell that doesn't exist in a nested hash, so it created it for you. Because you're trying to read from the thing, and it can see that you're trying to read a number, it gives you 0. |
18:28 | <@jerith> | If I do that in an actual program, the only warning I get is the fact that $FOO only appears once and therefore might be a tyop. |
18:29 | <@Vornicus> | And now we know why perl is in fact the most evil programming language. |
18:29 | < PinkFreud> | Vornicus: nonsense. |
18:30 | < PinkFreud> | perl is useful for quick scripts for just that reason. |
18:30 | <@jerith> | In my paste, lookup() is using this to build a nontrivial structure without actually defining it. |
18:30 | <@jerith> | This makes me a sad panda. |
18:30 | < PinkFreud> | if you want it to behave like a *real* programming language, add -w to the shebang line |
18:31 | < Tarinaky> | I need a website screen scraper but don't have time to 1) learn how to make one 2) actually make it :/ |
18:31 | < PinkFreud> | the fact that I can do something like that, without having to go through the trouble to predeclare everything, means it works well for one-liners and other quick'n'dirty scripts |
18:31 | < Tarinaky> | The reason time comes up is because I need to get it working to watch my TV programs. |
18:31 | < Tarinaky> | Which go offline after a certain window. |
18:31 | < Tarinaky> | >.< |
18:32 | < PinkFreud> | ... because sometimes, you just need to get a repetitive task *done*, rather than work on creating a proper coding project. |
18:32 | < Tarinaky> | Heh. I was wondering if there was anything I could hash together using out of the box tools. |
18:33 | <@jerith> | perl -e 'use Data::Dumper; $FOO->{"id"}->{1}++; print Dumper($FOO);' |
18:33 | <@jerith> | That gives you a better idea of what's actually going on. |
18:33 | < PinkFreud> | jerith: or perl -MData::Dumper -e '$FOO...' |
18:33 | < Tarinaky> | >.< I don't know perl. |
18:33 | < PinkFreud> | (yep, you can load modules on the commandline!) |
18:34 | | * Tarinaky is currently playing with the old program that used to work to see if he can get it alive again. |
18:35 | <@jerith> | PinkFreud: Yeah, I just didn't know the syntax for it offhand. :-) |
18:35 | < PinkFreud> | :) |
18:36 | < PinkFreud> | one of my favorites is: echo '<some base64-encoded string>' | perl -MMIME::Base64 -pe '$_ = decode_base64 $_' |
18:36 | <@jerith> | The way I see it, the time saved by not defining structure is spent manyfold trying to debug tyops. |
18:36 | < PinkFreud> | jerith: depends on the complexity. if it's a few lines, you're probably ok. |
18:37 | <@jerith> | Sure. |
18:37 | < PinkFreud> | if your one-liner baloons to a few hundred lines, then yeah, you're better off defining some structure. |
18:37 | <@jerith> | But if it's a few lines, you've lost almost nothing by doing it the sane way. |
18:37 | < Tarinaky> | Anyway. Anyone know a way I can obtain a list of program IDs from a search of the iplayer? |
18:37 | < PinkFreud> | jerith: try defining your structure on the commandline as part of a one-liner. :) |
18:38 | < PinkFreud> | it *can* be done, but you'll spend more time going back to fix typos anyway. :) |
18:38 | <@jerith> | PinkFreud: If I'm using something like that, it's probably going to be more than one line. |
18:39 | < PinkFreud> | sure. you're a programmer. |
18:39 | < PinkFreud> | I'm a sysadmin. I'm all about one-liners. :) |
18:44 | <@jerith> | http://pastebin.starforge.co.uk/302 |
18:44 | <@jerith> | That's the Python version. |
18:44 | <@jerith> | It's the same number of lines, excluding the trailing brace and the comment in the Perl version. |
18:45 | | Serah [Z@3A600C.A966FF.5BF32D.8E7ABA] has quit [Connection reset by peer] |
18:45 | | Serah [Z@3A600C.A966FF.5BF32D.8E7ABA] has joined #code |
18:48 | < PinkFreud> | heh |
18:58 | < Tarinaky> | Oh great. |
18:58 | < Tarinaky> | I'm a colossal idiot. |
18:58 | < Tarinaky> | Turns out there -is- a new version for my old iplayer grabber |
18:59 | < Tarinaky> | It's just the new package manager didn't tell me :/ |
19:04 | <@ToxicFrog> | Tarinaky: for future reference, curl/wget are both good for getting raw html off a site and lynx -dump will get you rendered stuff |
19:05 | < Tarinaky> | ToxicFrog: Well, I wasn't having trouble getting the search results. |
19:06 | < Tarinaky> | ToxicFrog: The problem I was having was getting the data I wanted off the page. |
19:06 | < Tarinaky> | The screen scraper portion >.< |
19:06 | <@Vornicus> | The problem was that the page was being rendered without you getting any source for that? |
19:06 | < Tarinaky> | Vornicus: Regexp design. |
19:07 | | Derakon [Derakon@Nightstar-1ffd02e6.ucsf.edu] has joined #code |
19:07 | | mode/#code [+o Derakon] by Reiver |
19:07 | <@Derakon> | Today's Sebastianism: giving global scope to a variable that is only used in a function that is called once. |
19:08 | <@Vornicus> | ah. ...yeah I'm still gonna say screen scraping would be a bad idea. |
19:08 | <@Vornicus> | In fact I'd throw BeautifulSoup at it if it's HTML. |
19:08 | < Tarinaky> | Vornicus: I wasn't aware of a better solution :/ |
19:08 | < Tarinaky> | It's HTML. |
19:08 | | * jerith has built the next bit of this madness and is now going to kill some pixels. |
19:08 | | * Tarinaky only knows... wget, grep and sed... |
19:08 | <@jerith> | Or maybe I'll try the next Portal advanced map... |
19:10 | <@Vornicus> | Which one is that? |
19:10 | <@jerith> | 16, I think. |
19:11 | <@jerith> | I've done three of them. |
19:11 | <@Vornicus> | 16 then. |
19:11 | <@Vornicus> | Oh, 16 is a doozy. |
19:11 | <@Derakon> | Is 16 Android Hell? |
19:12 | <@Vornicus> | 16 is Android Hell. |
19:12 | <@Derakon> | That was fun. |
19:12 | <@ToxicFrog> | Tarinaky: in that case, pick a language, slap the HTML through something that will turn it into a tree, extract the bits you need from that? |
19:12 | <@Vornicus> | it is I think the hardest one. |
19:12 | < Tarinaky> | ToxicFrog: Would take more time than I had :/ |
19:13 | <@Derakon> | I'm pretty sure I had more trouble with the last one. |
19:13 | <@Derakon> | But I didn't think of the camera trick. |
19:15 | <@Vornicus> | It is also possible to fly across the room without picking off the turrets though |
19:15 | < Tarinaky> | ToxicFrog: Remember, we're talking "OMG I'm going to miss the finale of this season of Ashes to Ashes!" kind of problem. |
19:15 | < Tarinaky> | ToxicFrog: Sometimes you just want it to just work :p |
19:15 | <@Derakon> | Vorn: sure, I cleared the room without touching the turrets. |
19:15 | <@Derakon> | It just was difficult. |
19:16 | <@Vornicus> | It's just that you need to (literally) think outside the box. |
19:16 | | * Tarinaky eats some (lie) cake. |
19:21 | | * Derakon rips out a few more unnecessarily global variables. |
19:22 | <@Derakon> | So far this revision, I've eliminated 219 lines of code... |
19:29 | <@Derakon> | More importantly, I've removed 21 functions from this module. |
19:34 | <@ToxicFrog> | Tarinaky: why do you need a sitescraper for that, as opposed to, say, a bittorrent client or a video capture card? |
19:35 | | Alek [omegaboot@Nightstar-c5f3565b.il.comcast.net] has quit [Ping timeout: 121 seconds] |
19:39 | <@jerith> | W00t! Finished 16adv. |
19:39 | <@jerith> | My finger's sore from holding "crouch" the whole level, though. |
19:39 | | Alek [omegaboot@Nightstar-c5f3565b.il.comcast.net] has joined #code |
19:41 | <@Derakon> | Congrats. |
19:41 | <@Derakon> | I felt a little sorry for the turrets that I'd piled up boxes in front of. Sure, they were still alive, but they weren't going to be doing anything...ever. |
19:41 | < Serah> | Crouchtoggle? |
19:42 | <@jerith> | Mine kept catching glimpses of me and woke up long enough to scan the area. |
19:43 | <@jerith> | I felt a little sorry for the one that was between me and another one. |
19:43 | <@jerith> | It got shot up a lot, but not enough to render it nonfunctional. |
19:43 | < Tarinaky> | ToxicFrog: The screen scraper is to automate the task of downloading certain TV series I'm interested in off the iplayer site. |
19:43 | < Tarinaky> | ToxicFrog: Bittorent or video capture don't solve the particular problem of automation. |
19:44 | <@Derakon> | TMK turrets can't kill other turrets. |
19:44 | <@Derakon> | I base this on letting one get hit by a few hundred bullets. |
19:45 | <@Vornicus> | Yeah, the ony thing that can actually kill turrets is enough momentum to knock it over. |
19:45 | <@Derakon> | Which is, like, barely anything. They're hilariously unstable. |
19:45 | <@Derakon> | If the game simulated recoil they wouldn't be remotely useful. |
19:54 | <@jerith> | They're recoilless guns. ^.^ |
19:54 | <@jerith> | But yeah. They only die if they're toppled. |
19:55 | <@jerith> | I had great fun in level 16 setting them all up to point at a bare wall, neatly in a row. |
19:55 | <@jerith> | I only broke three or four doing that. |
19:57 | <@Derakon> | Hee. |
20:10 | <@ToxicFrog> | Tarinaky: right, my point was more that those are alternate solutions to the problem of "I don't want to miss this episode" |
20:10 | | aoanla [AndChat@Nightstar-4b2adf86.range81-129.btcentralplus.com] has joined #code |
20:10 | < Tarinaky> | ToxicFrog: >.> I'm obsessive. |
20:10 | <@ToxicFrog> | At which point you're no longer under any time constraints to solve the problem of automatic downloading from iplayer. |
20:11 | < Tarinaky> | Yes, well. >.> shh. |
20:11 | <@ToxicFrog> | And can take the time to learn an HTML parsing library or regexes or whatever. |
20:11 | < Tarinaky> | When it comes to my stories I want it to just work. |
20:11 | < Tarinaky> | I'm a bad man, I know >.> |
20:12 | <@ToxicFrog> | In that case your only option is to wait until someone else writes it, no? |
20:13 | < Tarinaky> | Pretty much. |
20:13 | < Tarinaky> | Fortunately they did. |
20:14 | < Tarinaky> | It's just my package manager didn't tell me about it when asked. |
20:14 | < Tarinaky> | ^^ |
20:39 | | aoanla [AndChat@Nightstar-4b2adf86.range81-129.btcentralplus.com] has quit [[NS] Quit: ] |
20:56 | | Serah [Z@3A600C.A966FF.5BF32D.8E7ABA] has quit [Ping timeout: 121 seconds] |
21:02 | | AnnoDomini [annodomini@Nightstar-32801df0.adsl.tpnet.pl] has quit [Ping timeout: 121 seconds] |
21:04 | | AnnoDomini [annodomini@Nightstar-c5d72e22.adsl.tpnet.pl] has joined #code |
21:04 | | mode/#code [+o AnnoDomini] by Reiver |
21:26 | | * Derakon eyes Google's homepage. |
21:27 | <@Derakon> | The Pacman game is apparently fully-functional. |
21:27 | <@McMartin> | Yes. |
21:27 | <@Vornicus> | Insert two coins and bring a friend~ |
21:28 | <@Derakon> | I see their page source is obfuscated, though I wouldn't be surprised if that's just to reduce page load times. |
21:29 | < celticminstrel> | Yep. |
21:30 | <@Derakon> | I wonder how much bandwidth they save each day by removing a single character from the homepage... |
21:31 | < celticminstrel> | Do you know whether the Pacman is Flash or JavaScript? |
21:32 | <@McMartin> | Flash is involved for the sound |
21:32 | <@Derakon> | Javascript, I believe. |
21:33 | <@McMartin> | Yeah, they're different things; people with flashblockers seem to be able to play but don't get sound |
21:35 | | * McMartin eyes Wolfram Alpha |
21:35 | <@McMartin> | http://www.wolframalpha.com/input/?i=How+much+magnesium+is+there+in+43+cubic+mil es+of+fried+chicken%3F |
21:37 | < Tarinaky> | Wolfram Alpha scares me :/ |
21:37 | | * Derakon laughs for a long time, as quietly as he can manage. |
21:53 | | Thaqui [Thaqui@27B34E.D54D49.F53FA1.6A113C] has joined #code |
21:54 | | Serah [Z@2C3C9C.B2A300.F245DE.859909] has joined #code |
21:57 | <@Derakon> | It always bothers me when the diff for a file is longer than the file itself. |
21:57 | <@Derakon> | (839-line modified file, 1191-line diff) |
21:57 | < celticminstrel> | Why? |
21:58 | <@ToxicFrog> | Because the diff includes both the old and new versions. |
21:59 | <@Derakon> | It implies that I am drastically changing the file. |
21:59 | <@Derakon> | Which in turn implies large-scale overhauls, which imply high risk of something breaking. |
21:59 | <@Derakon> | It also becomes difficult to do an effective code review. |
21:59 | <@ToxicFrog> | As a general rule, the length of a diff will be (number of lines removed) + (number of lines added) + 2*(number of lines modified) + some overhead |
22:02 | <@Derakon> | In this case, I have 580 lines beginning with '-' and 268 beginning with '+'. And 23 diff context lines. |
22:06 | <@Derakon> | Hell, my checkin notes are 28 lines and 1729 characters. |
22:34 | <@Vornicus> | 1729! The Hardy-Ramanujan Number! |
22:36 | | * Derakon hits up Wikipedia. "Hunh." |
22:37 | <@Derakon> | "1729 is a Zeisel number. It is a centered cube number, as well as a dodecagonal number, a 24-gonal and 84-gonal number." |
22:37 | | celticminstrel [celticminstre@Nightstar-f8b608eb.cable.rogers.com] has quit [[NS] Quit: *hums* Can't stay now!] |
22:42 | | Derakon [Derakon@Nightstar-1ffd02e6.ucsf.edu] has quit [[NS] Quit: Leaving] |
23:29 | | * TheWatcher hunts for a small base64 decoder in javascript |
23:45 | | AnnoDomini [annodomini@Nightstar-c5d72e22.adsl.tpnet.pl] has quit [[NS] Quit: leaving] |
23:45 | | shade_of_cpux is now known as cpux |
--- Log closed Sat May 22 00:00:08 2010 |