< 1168560129 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :brilliant I tell you! brilliant! < 1168560354 0 :lament!unknown@unknown.invalid PRIVMSG #esoteric :bloody he tells us! bloody! < 1168560364 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :bloody! < 1168560680 0 :tgwizard!unknown@unknown.invalid QUIT :Remote closed the connection < 1168560989 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :hmm < 1168560999 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :I could just pickle the whole object < 1168561214 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :DIE BOT DIE < 1168561229 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :~exec self.load_callbacks("/bot/test.pickle") < 1168561232 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :now do it < 1168561239 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :DIE BOT DIE < 1168561239 0 :bsmnt_bot!unknown@unknown.invalid QUIT :Remote closed the connection < 1168561241 0 :bsmnt_bot!n=bsmnt@abacus.kwzs.be JOIN :#esoteric < 1168561255 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :ACTION feels the power < 1168561412 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :te he he < 1168562587 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :Well, it's persistant now < 1168562688 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :can i too? < 1168562694 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :yeah < 1168562705 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :DIE BOT DIE LIKE YER MOTHER!!! < 1168562711 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric ::( < 1168562719 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :~exec self.load_callbacks("/bot/test.pickle") < 1168562721 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :DIE BOT DIE LIKE YER MOTHER!!! < 1168562722 0 :bsmnt_bot!unknown@unknown.invalid QUIT :Remote closed the connection < 1168562725 0 :bsmnt_bot!n=bsmnt@abacus.kwzs.be JOIN :#esoteric < 1168562732 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :heh < 1168562746 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :omg that's nice < 1168562763 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :a thereapeutic robot :D < 1168562768 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :yeah :) < 1168562782 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :~exec print o < 1168562785 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :~exec print "o" < 1168562792 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :meh < 1168562810 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :The sys.output problem has not been solved. < 1168562828 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :that is not fair :\ < 1168562829 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :~exec print >> sys.output "o" < 1168562834 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :~exec print >> sys.output, "o" < 1168562846 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :>> ? < 1168562852 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :apparently renamed... < 1168562873 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :sys.stdout, as always < 1168562874 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :~exec self.raw("PRIVMSG #esoteric :o") < 1168562875 0 :bsmnt_bot!unknown@unknown.invalid PRIVMSG #esoteric :o < 1168562886 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :darn my memory < 1168562905 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :I can't figure out how to fix that < 1168562928 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :why won't it help to just change the stdout here? < 1168562940 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :That's what it is < 1168562961 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :~exec sys.stdout.write("foo") < 1168562962 0 :bsmnt_bot!unknown@unknown.invalid PRIVMSG #esoteric :foo < 1168562964 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :see < 1168562972 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :The problem is that the change should only affect the subthread, which may be impossible. < 1168562973 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :print is the exact same? < 1168562985 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: right < 1168562999 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ah okay < 1168563013 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :I change sys in the enviroment for the exec, but print borks anyway < 1168563043 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :A sub-process would solve that but make transmitting all other information awkward. < 1168563064 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :A sub proccess would require shared memory < 1168563069 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Is it possible to redefine the print statement itself? < 1168563082 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :not that I'm aware of < 1168563130 0 :ShadowHntr!i=sentinel@wikipedia/Shadowhntr JOIN :#esoteric < 1168563137 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :And I believe shared memory in a garbage collected language is hard, so Python probably doesn't have it. < 1168563145 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :yeah < 1168563157 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :don't think it does < 1168563185 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :It's possible to redefine the "import" statement with __import__, but I can't find the similar function for print < 1168563819 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :well... < 1168563853 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :the standard print can be altered with sys.stdout.write ...but other than that... < 1168563877 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: But I have done that < 1168563888 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :sys.stdout.write writes to this channel < 1168563919 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :import imp < 1168563924 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :has some useful stuff for import hooks. < 1168563933 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :to do some more interpreter magic that can't be done with __import__ easily. < 1168563946 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :I don't care about __import__, that was just an example < 1168563969 0 :Sukoshi!unknown@unknown.invalid PRIVMSG #esoteric :~quit < 1168563984 0 :Sukoshi!unknown@unknown.invalid PRIVMSG #esoteric :Aux vorto :( < 1168564005 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :Sukoshi: The only public commands are ~exec and ~ps < 1168564031 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :You can quit it with ~exec self.disconnect(message) < 1168564129 0 :Sukoshi!unknown@unknown.invalid PRIVMSG #esoteric :~ps < 1168564130 0 :bsmnt_bot!unknown@unknown.invalid PRIVMSG #esoteric :None < 1168564136 0 :Sukoshi!unknown@unknown.invalid PRIVMSG #esoteric :~ps < 1168564137 0 :bsmnt_bot!unknown@unknown.invalid PRIVMSG #esoteric :None < 1168564138 0 :Sukoshi!unknown@unknown.invalid PRIVMSG #esoteric :~ps < 1168564139 0 :bsmnt_bot!unknown@unknown.invalid PRIVMSG #esoteric :None < 1168564154 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :only ~exec commands go in ps < 1168564208 0 :Sukoshi!unknown@unknown.invalid PRIVMSG #esoteric :What's this ``pickling'' thingamabobber? < 1168564223 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :Python object serialization < 1168564232 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :I was using it to provide persistance for callbacks < 1168564251 0 :Sukoshi!unknown@unknown.invalid PRIVMSG #esoteric :ACTION pities those without lexical and dynamic bindings. < 1168564414 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :ACTION has some nifty stuff you ould use to persitent the entire global namespace. < 1168564421 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :I can store functions if nessicary. < 1168564442 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :sure, just pickle globals() < 1168564449 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :the pickle protocol can only store references to functions on the top level of a module. < 1168564457 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :same with classes. < 1168564467 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :meh whatever < 1168564467 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :because it doesn't actually store the class itself... just a reference name. < 1168564482 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :Did you see my way of persisting functions? < 1168564484 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :but... with enough abuse... you can make it work for any function. :P < 1168564494 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :Nope. < 1168564520 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :we basically pickle [(i[0], marshal.dumps(i[1].func_code), inspect.ismethod(i[1])) for i in self.raw_regex_queue] < 1168564554 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :Eh... that would work. < 1168564560 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :for my MUD I use a class. < 1168564568 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :that wraps functions... and just store the source code. < 1168564578 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :getting it out is a little more complicated, because we have to convert functions to methods < 1168564609 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :the actual function isn't pickled... but the source is... upon a __call__ it recompiles the function if it doesn't exist or if the source string has been altered. < 1168564618 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :http://bsmntbombdood.mooo.com/chroot_ircbot.py < 1168564639 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :so you can edit the definition of a function inplace. < 1168564662 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :How do you get the source? < 1168564679 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :depends. < 1168564688 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :If it's something in the hard source... I use inspect. < 1168564704 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :Right, that parts easy < 1168564712 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :as for mid-runtime defined functions... I just capture the source as its defined and instantiate a new func object. < 1168564733 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric : hmm < 1168564739 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :since it's a MUD... and it uses commands-mapped-to-functions... I can just hard-code that part into the "def" command. < 1168564755 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :? < 1168564769 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :You can redefine def? < 1168564774 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :no no. < 1168564779 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :it's not Python... it's MUD commands. < 1168564784 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :oh < 1168564803 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :So you have your own dsl < 1168564810 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :the player could type "def WHEEFUNC(arg, arg)" and a text-editor would pop up or something. < 1168564816 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :dsl? < 1168564819 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :wassat? < 1168564838 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :domain specific language < 1168564847 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :if you wanna call it that. < 1168564887 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :it's just "command stuff" where stuff is matched to a command-specific parsing regex. < 1168564906 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :regexes! < 1168564937 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :I still have that way to do it.. < 1168564946 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :but I decided in the end to make a new version that ditches all of that. < 1168564968 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :and I'm going to make my own language for the MUD... that resembles ORK and uses coroutines heavily. < 1168565048 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :I wonder if you could write a parser using only regexes < 1168565063 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :sure... depends on the language though. < 1168565073 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :Stue... for example... can be parsed entirely with regex. < 1168565079 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :as could ORK. < 1168565082 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :Using backreferences to get the actual values < 1168565094 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :Python's regex has named groups. < 1168565097 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :which is super handy for that. < 1168565106 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :yeah < 1168565117 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :Glass could probably be parsed with regex. < 1168565120 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :and BF too... :P < 1168565158 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :some things that probably can't be parsed too easily with regex would be like... HTML and English. < 1168565269 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Actually simple regexes cannot parse nested parenthesis-like structures. < 1168565296 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :I think really parsing english is just a matter of amassing a huge database of words, slang terms, colloquialisms, acronyms, terminology, expressions, common names, etc. < 1168565304 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Which rules out both Glass (/\) and BF ([]) < 1168565313 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :hrm < 1168565322 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :yeah, I guess so < 1168565341 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :it's the difference between regular and context-free languages < 1168565348 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :But you say simple...are there complex ways to do it? < 1168565372 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :I've got a parsing library that extends off of regex to allow recursive structures. < 1168565381 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Well I was hedging my bets for what strange extensions might exist :) < 1168565383 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :it uses some form of "forewarding" or something. < 1168565428 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :I guess if you a metacharacter that meant "a backreference to the group I'm in". < 1168565433 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :you could let the regex engine handle it. < 1168565513 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :There may of course be tricks to use regexes heavily together with explicit recursion. < 1168565627 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :For example, in BF you might use "[[^][]*]" to get everything between the first and last loop, and then have another regex to split _that_ up. < 1168565642 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :hmph < 1168565665 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :except you have to escape the [] < 1168565686 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :"\[[^\]\[]*\]" < 1168565690 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Eh, wait that was wrong. < 1168565696 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :er < 1168565700 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :In fact I meant: < 1168565734 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :"\[.*\]" < 1168565757 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :"\[^][]*\[(.*)\][^][]*\]" < 1168565782 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :huh? < 1168565815 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :first skip to the first [, then keep everything to the last ], then skip the rest. < 1168565836 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Don't know if it's useful, just thought of it. < 1168565861 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :You can't get it to match the right ] < 1168565892 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Gah, I forgot the final \[^][]* < 1168565925 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :i mean i had an extra \] < 1168565944 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :cannot read my own regexps :) < 1168565981 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :you can't get nested loops < 1168565992 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :I suppose real parser combinators are better. < 1168566024 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :What is wrong with "\[^][]*\[(.*)\][^][]*" ? < 1168566039 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :I can't read it :) < 1168566053 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Gah. An extra \ < 1168566061 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :regex should probably go the oher way around.. < 1168566065 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :or at least... have an option to do. < 1168566075 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :use escape characters for the meta characters.. < 1168566082 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :instead of escape characters for the regular characters. < 1168566090 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :What is wrong with "[^][]* \[ (.*) \] [^][]*"/v ? < 1168566099 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :all the slashes make it weird to read. < 1168566102 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :there's a sexp regex format < 1168566130 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :but I guess all the escape characters for metachars would just muck up the readability too. < 1168566131 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :I am trying to use the Perl format, which is what I know somewhat. < 1168566132 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :so.. < 1168566159 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :I always use non-greedy *'s on .'s < 1168566162 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :.*? < 1168566164 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :that CL-PPCRE uses < 1168566170 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :otherwise it'll eat up your regex. < 1168566190 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :That /v should be /x < 1168566208 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :(for embedded whitespace for legibility.) < 1168566236 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :verboose mode comes in handy. < 1168566245 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :ignores whitespaces unless they're in brackets. < 1168566280 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :OK then: "^ [^][]*? \[ (.*) \] [^][]* $"/x ? < 1168566315 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :hmmm.. < 1168566324 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :the tilde seems like a good escape character. < 1168566330 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :won't work < 1168566332 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Actually that ? is useless. < 1168566340 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :wait < 1168566345 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :it's rarely used.... and it's not quite so weird and choppy looking as \ < 1168566346 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :That might actually work < 1168566361 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: writing your own pattern matcher? < 1168566368 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :Nah. < 1168566376 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :Any pattern matcher I wrote would be non-character-specific. < 1168566391 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :with an optional ability to match per-character. < 1168566403 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :oerjan, I think you've got something < 1168566419 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :~[^~] < 1168566421 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :hmmm... < 1168566433 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :![^!] < 1168566437 0 :EgoBot!unknown@unknown.invalid PRIVMSG #esoteric :Huh? < 1168566437 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :I kind of like !'s < 1168566440 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :but it's used. < 1168566455 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :The question is how to parse the interior further. < 1168566480 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :recurse < 1168566494 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :It needs a different expression for sure. < 1168566537 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :uh yeah, yours.doesn't work < 1168566583 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :matched agains "[ ] [ ]", it matches the whole thing < 1168566644 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Yes, and then " ] [ " needs to be split up further. < 1168566671 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :I don't know of any way to do it other than counting, and regexes can't count < 1168566690 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :Lisp can be parsed... erm... linearly. < 1168566698 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :? < 1168566708 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :I believe I said I meant to use more than one regexp. < 1168566711 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :character by character. < 1168566730 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :yeah < 1168566742 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :it still needs to count parens < 1168566761 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :"(" simply means accumulate another branch to the parse tree... ")" mean return to the last node... " and ' would start a string and symbol mode respectively. < 1168566764 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :increment on "(", decrement on ")", return buffer when count == 0 < 1168566780 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :...yeah. < 1168566812 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Well, even if it could work it would end up rather complicated. < 1168566820 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :Yup. < 1168566847 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :parsers tend to be pretty damn weird to code by hand (i.e. without a parsing language) < 1168566899 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :I think I'm going to write a quit parser for nested (), just as an excersize < 1168567011 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Recursive descent is not that bad. < 1168567020 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :When it works. < 1168567287 0 :CakeProphet_!n=CakeProp@h209.254.213.151.ip.alltel.net JOIN :#esoteric < 1168567360 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Is everyone else finding the net awfully slow these last days? And not just IRC either. < 1168567374 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :yes < 1168567381 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :I was just thinking that < 1168567426 0 :CakeProphet_!unknown@unknown.invalid PRIVMSG #esoteric :The tubes are clogged? < 1168567439 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :need some billaird balls < 1168567666 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :ok, no idea how to do this < 1168567687 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :do what? < 1168567692 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :I at least got the code to get the part in between the parentheses < 1168567704 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :What is a quit parser? < 1168567714 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :*quick < 1168567740 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Darn, here I though I was up to some new interesting technology :D < 1168567784 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Use either an explicit stack, or recursion. < 1168567790 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :yeah < 1168567898 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :I'm not sure what the parse tree should look like < 1168567927 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :A list of expressions, some of which are themselves lists of expressions? < 1168567933 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :(a(b)) => [["a", ["b"]]] ? < 1168567958 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :A single outer set should be enough. < 1168567976 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :a(b(c)) < 1168567983 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :er, yeah < 1168567986 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :eh, right. < 1168567989 0 :CakeProphet_!unknown@unknown.invalid QUIT :Read error: 104 (Connection reset by peer) < 1168567989 0 :CakeProphet__!n=CakeProp@h209.254.213.151.ip.alltel.net JOIN :#esoteric < 1168567999 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :gah, I have no idea what I'm doing < 1168568012 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :actually your first seemed good. < 1168568022 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :what should (a(b)c) parse to? < 1168568039 0 :CakeProphet!unknown@unknown.invalid QUIT :Read error: 113 (No route to host) < 1168568043 0 :CakeProphet__!unknown@unknown.invalid NICK :CakeProphet < 1168568050 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :[["a", ["b"], "c"]] ? < 1168568061 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :I think so. < 1168568106 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :my web browser is acting weird. < 1168568109 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :for clarity, you might want two different functions, parse_list and parse_expr < 1168568109 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :it can't get to anything. < 1168568116 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :while everything else internet-wise works fine. < 1168568123 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: wow < 1168568138 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :it just hangs up... :/ < 1168568142 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :i also have web sites dropping out frequently. < 1168568161 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :it just sits loading forever... < 1168568170 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :without ever saying "lol no connection kthxbai" < 1168568172 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Same with me, until it gives up. < 1168568178 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :yep < 1168568192 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :meanwhile telnet and IRC work hunky dory. < 1168568193 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Oh, mine does give up eventually. < 1168568246 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :I can reach the esolang wiki and.. < 1168568247 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :gmail. < 1168568294 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Perhaps they are close to you? Anyhow the esolang wiki has always been on and off in my experience. < 1168568340 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Maybe the spam is finally taking over :/ < 1168568399 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :hmm... working fine for now.. < 1168568402 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :a little bump though. < 1168568408 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :bumpy < 1168568491 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Now I cannot get to BBC news... < 1168568513 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Now I can. < 1168568845 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :weird < 1168568860 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :? < 1168568870 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :the web < 1168568898 0 :pikhq!n=pikhq@75.71.223.179 JOIN :#esoteric < 1168568907 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :argh I can't do this < 1168568910 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :the parser < 1168568921 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :What's the problem? < 1168568927 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :...I don't know < 1168568983 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :What are you doing at ( and ) ? < 1168569012 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :incrementing the count, decrementing the count and recursing if count == 0 < 1168569041 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Eh, recursing should be done whenever you hit a ( < 1168569051 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :? < 1168569063 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Paste? < 1168569088 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :it's not even anything < 1168569107 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :oh I know < 1168569122 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :i need to return the string if it doesn't have any of () in it < 1168569134 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :If you are using recursion, you don't need any counting. < 1168569146 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :eh? < 1168569194 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Just return when you would decrement and call a subfunction when you would increment. < 1168569254 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :The depth of the recursion stack automatically keeps track of the count. < 1168569432 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :And by the way, this is easiest in functional style: the result value of the function should be the parse tree of what that invocation has parsed. < 1168569445 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :right < 1168569525 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :On the other hand the pointer to the current character needs to be common for all invocations, so each can take over where another stopped. < 1168569549 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Easy with a file-like object, I presume. < 1168569575 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :they just pass a substring < 1168569619 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Right, in that case it needs to be passed upwards as well because the caller needs to take over where the called function stopped, as well. < 1168569633 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :argh < 1168569688 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :I believe in Python it is easier to use a common object with a pointer. < 1168569754 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :file like object it is, then < 1168569775 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :Python doesn't really recognize such a thing as a "pointer". < 1168569793 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :everything is implicitly a reference... < 1168569814 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :And index into an indexable object is a "pointer" < 1168569826 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :s/And/An/ < 1168569901 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :That's what I meant anyhow. < 1168569932 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Also, doing it this way has the advantage that you can easily parse directly from a file. < 1168569933 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :but if it's something like a string... there's very little difference in a reference to a string and a copy of a string. < 1168569936 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :due to immutability. < 1168569949 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :lists and dictionaries... on the other hand. < 1168569996 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Just pretend I said "index", OK? :) < 1168570019 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :hmm... is an index a "pointer"? < 1168570054 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Well, a pointer is an index into memory. < 1168570114 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :it doesn't matter much in Python though. < 1168570128 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :You have to use an index to emulate a pointer in python < 1168570142 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :mutability and immutability tend to outweigh pointers. < 1168570189 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :x = [[].[].[]]; y = x[0]; y.append(1); print x #[[1],[].[]] < 1168570194 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :well in c, everything is immutable < 1168570195 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :That's a "pointer" < 1168570224 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :anything assigned to a list is just a pointer... unless you use the copy method... or use the list() function. < 1168570252 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :x = [[].[].[]]; y = x[0].copy(); y.append(1); print x #[[],[].[]] < 1168570326 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :y becomes a "pointer" implicitly for any variable that references a list.... same with dictionaries and classes/instances. < 1168570330 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :This is all well and good, but we knew it already. I just used a loaded word OK? < 1168570349 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :nah nah... not the wording... I'm just trying to figure out... what you're trying to do.. < 1168570375 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :some hardcore pointer manipulation makes me all warm and fuzzy inside < 1168570400 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :I was suggesting bsmntbombdood turned his string into an input file-like object so it could be scanned/parsed easier. < 1168570409 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :StringIO? < 1168570432 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Which means he somehow needs an index into it. < 1168570453 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :import cStringIO as stringio; x = stringio(); x.write("wheeeee"); print x.getvalue() < 1168570455 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :There's a library for it? Not entirely surprising. < 1168570465 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :yup. < 1168570476 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :cStringIO is the faster version of it though... so I'd use it. < 1168570507 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :it's basically just a string-file... good pretty much anywhere a file is (it uses all the same methods... with an added "getvalue" method) < 1168570511 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :It's also a drop in replacement, so it doesn't matter what I use < 1168570598 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :Half of Python's awesomeness lies in the sheer amount of junk in its library. < 1168570614 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: what do I do on ) ? < 1168570648 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :You place that accumulated bits into the next index of the node? < 1168570652 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Just return. < 1168570679 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :That's what I'd guess... basically just convert it into tuples (or lists) < 1168570681 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Perhaps not advancing the index, so that the parent also gets to see the ) < 1168570685 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :lists would work better... being mutable. < 1168570723 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Yes, return the accumulated list. < 1168570733 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :Generally speaking... if you're doing massive numbers of string, list, or tuple concats in a Python program... you're probably doing it the wrong way. < 1168570751 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: I do string concats a lot :/ < 1168570757 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :ewww. < 1168570759 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :they're slow. < 1168570766 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :list operations are much faster. < 1168570810 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :because when you work with a list... you don't have to construct an entirely new string object each and every time... as you do with concatenation. < 1168570923 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :it's really on a problem when you have a large number of successive concatenations on a progressively increasing string. < 1168570935 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :r/on/only < 1168570943 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :I guess stringIO doesn't actually construct the string until you call get_value? < 1168570951 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :Righto. < 1168570966 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :among other things. < 1168570971 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :it's a "mutable string". < 1168571000 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :but usually lists are the way to go when messing with strings. < 1168571003 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :there was a mutable string class once I think < 1168571066 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :arggggh < 1168571069 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :compared "\n".join(SomeListOfStrings) to x = ""; for string in SomeListOfStrings: x += string + "\n" < 1168571075 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :parse("(a(b))") => ['', ['a', []]] < 1168571088 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :What's wrong? < 1168571095 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :oh. < 1168571098 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :hmm. < 1168571100 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :no < 1168571101 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :wait < 1168571103 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :don't see it. < 1168571112 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :? < 1168571148 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :http://pastebin.ca/313805 < 1168571192 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :bsmntbombdood, haha... that's exactly the kind of problem I was referring to. :P < 1168571200 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :...yep < 1168571244 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :why a while loop? < 1168571283 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :because < 1168571328 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :... < 1168571348 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :it looks like you're just recursively calling parse() on the exact same string ( s ) < 1168571356 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :How else would I do it? < 1168571359 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Why the buff? < 1168571378 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :s shouldn't be a string but a file-like object. < 1168571388 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: s isn't a string < 1168571395 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :file. < 1168571397 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :ah. < 1168571424 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :you couild use partition... if you wanted. < 1168571469 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :why? < 1168571484 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :"Wheee(wha wha wha (wha wha wha))".partition("(") == ("Wheeee", "(", "wha wha wha (wha wha wha))" < 1168571489 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :You are missing a tree.append(buff) before the return. < 1168571491 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :so you don't have to use that god awful buffer. < 1168571511 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: oh, right < 1168571527 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :now it kind of works < 1168571529 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :And also you should check for buff=="" < 1168571539 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :make a buff a list. < 1168571544 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :and append characters to the list. < 1168571553 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :much much quicker. < 1168571603 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Perhaps... < 1168571618 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :no... that's the way you would want to do it. < 1168571620 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric ::P < 1168571626 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :strings aren't meant to do stuff like tha. < 1168571628 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :t < 1168571632 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :okeey, it works < 1168571634 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :I wasn't responding to you. :) < 1168571637 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :oh. < 1168571663 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :http://pastebin.ca/313811 < 1168571698 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :It might be an idea to do the collection of non-() as a second while loop inside the first. Then you don't have to worry about "" testing. < 1168571700 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :yeah... buff should definetely be a list... the string concats will get slow. < 1168571716 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :And it would be easy to do a join at the end of it. < 1168571724 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :"".join(buff) < 1168571792 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :However, then you need to be careful about when you read the next character. Unless the files have an undo method. < 1168571813 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: http://pastebin.ca/313814 < 1168571815 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :happy? < 1168571818 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :yup. < 1168571821 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: they dont < 1168571834 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :ACTION wishes file objects had an iterator for character-by-character stuff < 1168571845 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :you could make one pretty easy though. < 1168571894 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :I think there is still a bug in that if there is eof while buff is non-empty. < 1168571903 0 :digital_me!n=digital@wikipedia/Digitalme JOIN :#esoteric < 1168571919 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: indeed there is < 1168571938 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :for loops over files only go line-by-line... < 1168571997 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :http://pastebin.ca/313817 < 1168572000 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :def chariter(file): for line in file: for char in line: yield char < 1168572020 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :for char in chariter(s): < 1168572027 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :that'll solve pretty much all your problems. < 1168572058 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Oh, and it definitely does not catch mismatched parentheses. < 1168572059 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :as a general rule of thumb... while loops tend to be infrequently used in Python. < 1168572091 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :The problem here is that the index of the for loop needs to be updated after the recursion. < 1168572106 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :yeah < 1168572114 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :and python is stupid about that < 1168572119 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :index of the for loop? < 1168572122 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :what for? < 1168572195 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :I mean, the parent function should not reparse the characters parsed by the child. < 1168572236 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :just cut it off each time. < 1168572269 0 :lament!unknown@unknown.invalid PRIVMSG #esoteric :"There's still a bug" - well said < 1168572274 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :What does cut off mean? Can two for loops share an iterator? < 1168572301 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :argh, parsign is hard < 1168572331 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :For proper error handling you need to use lookahead for the ")" < 1168572359 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :So that the parent takes care of checking if it was actually there. < 1168572360 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :to get the next character you could use s.getvalue()[s.pos+1] < 1168572383 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Now _that_ is inefficient. < 1168572391 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :yep < 1168572628 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :On second thought, you don't need lookahead if the child knows whether it needs an end parenthesis. < 1168572680 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Which it does unless it actually is the topmost parent. < 1168572690 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :*child = function < 1168572753 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :And the topmost parent, on the other hand, knows that it must not have a ) < 1168572767 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :So an extra argument could fix that. < 1168572783 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :ugh < 1168572787 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :I hate doing that < 1168572817 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Or you could make two different functions. < 1168573051 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :how about this? http://pastebin.ca/index.php < 1168573057 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :it doesn't do error checking... but meh. < 1168573069 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :I doubt that is your URL. < 1168573086 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :...erm... yeah < 1168573094 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :http://pastebin.ca/313825 < 1168573146 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :oh... wait. < 1168573150 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :duh. < 1168573152 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :obvious mistake. < 1168573232 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :it needs to check for the ending parenthesis. < 1168573445 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :whats that list[::n] syntax? < 1168573461 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :step. < 1168573469 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :(1,2,3)[::2] == (1,3) < 1168573476 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :it's kinda weird. < 1168573479 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :but strangely useful. < 1168573504 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :http://pastebin.ca/313826 < 1168573506 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :new one < 1168573508 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :with a fix. < 1168573511 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :dunno if it works... but eh. < 1168573514 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :it's how I would have done it. < 1168573526 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :...using partition is cheating < 1168573569 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :...how's that? < 1168573578 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :it's not recursive. < 1168573585 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :it's not regular expressions. < 1168573590 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :You are only allowed to step through characters one by one < 1168573590 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :it's damn useful. :P < 1168573624 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :at it's heart... the partition source code probably steps through each character one by one. < 1168573626 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :so... < 1168573628 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric ::P < 1168573652 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :I wanted a "real" parser < 1168573675 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :sure sure... just substitute what partition does into that and you'll have a character-by-character "real parser". < 1168573694 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :then it becomes waaay long < 1168573696 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :er than mine < 1168573719 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :of course it does. < 1168573828 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :for loop is the way to go over while. < 1168573839 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :while can't anticipate EOFs ;) < 1168573843 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :not easily. < 1168573867 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :using whle loops for iterating is a sin anyhow. < 1168573911 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Does that code actually work with nested parentheses? < 1168573918 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :mine? < 1168573924 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :Don't know. < 1168573926 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :haven't tested it. < 1168573927 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Yes. < 1168573929 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :it'll probably have bugs. < 1168573932 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :but... oh well. < 1168573962 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :the way I envision it... it would. < 1168573969 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :but... I doubt it works as I imagine. < 1168574004 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Does partition include the "("'s in the list? < 1168574008 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :and what's the point of replace("\n", "")? < 1168574019 0 :pikhq!unknown@unknown.invalid QUIT :"leaving" < 1168574026 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :newlines aren't signifigant... or so I'm lead to believe. < 1168574036 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :ACTION was thinking of Lisp when he made it. < 1168574050 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: partitition(sep) => (head, sep, tail) < 1168574062 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :it puts it in the middle. < 1168574065 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: They aren't < 1168574071 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Oh, so never more than one sep? < 1168574080 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :which I safely ignore via [::2] < 1168574082 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :nope. < 1168574087 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :split is the one that does them all. < 1168574096 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :it returns a list. < 1168574107 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :partition is just a 3-tuple of the first encountered seperator. < 1168574126 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :"a b c".split(" ") => ['a', 'b', 'c'] < 1168574129 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :I doubt that it works when there are no ")"s in the string... < 1168574138 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :I mean "(" < 1168574150 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :"a b c".partition(" ") => ('a', ' ', 'b c') < 1168574154 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :"a b c".split(" ") => ("a", " ", "b c") < 1168574156 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :yeah < 1168574161 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :partition < 1168574165 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: no < 1168574240 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :ACTION is still thinking abouit that esoteric parsing language. < 1168574253 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :parsing is a pain in the ass... and needs simplification... esoterically. < 1168574269 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Anyhow if I understand your code right, it hardly works on anything containing more than a single set of parentheses. < 1168574317 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Wait a moment, not even that. < 1168574328 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :You are checking for ")" in the wrong branch. < 1168574419 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :whoa, mine works when you leave off closing parentheses < 1168574438 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :In fact, partition used this way cannot do more than regexes. < 1168574525 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Which we discussed previously, and I think we agreed it would at least become very complicated to parse nested parentheses using them, if at all possible. < 1168574626 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :bsmntbombdood: That's because there is no difference between eof and ), essentially. < 1168574636 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :In the code. < 1168574654 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :hmm, right < 1168574706 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :And as I implied, without extra arguments only the parent knows whether there must be a ")" or not. < 1168574717 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :oh ho.. < 1168574719 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :I beg to differ. < 1168574724 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :[["I've", 'got', [['magic', 'in', [[[['my', 'pocket', [['really', 'have']]]]]]]]]]] < 1168574737 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :parsed from... print whee("(I've got (magic in ((my pocket) but) you can't (really have) it)") < 1168574748 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :it messes it up some. < 1168574759 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :oh wait. < 1168574765 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :no it doesn't... hmmm... < 1168574767 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :[["I've got ", ['magic in ', [['my pocket'], ' but'], " you can't ", ['really have'], ' it']]] < 1168574773 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :is what my parser gets < 1168574931 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :It misses the part after ")". As I said, the partition(")") is in the wrong branch. < 1168574948 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :It wouldn't work properly in the other one. < 1168574957 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :or.. it would work less properly. < 1168574985 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Which strangely means that you call it recursively with something not well-formed. < 1168574991 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :see it works "backwards"... sorta. < 1168575019 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :You at least need to take case of the [3] part. < 1168575027 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :I mean [2] < 1168575032 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :*care < 1168575540 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :I'm awaiting a stroke of genius. < 1168575550 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :where I realize the grand pattern of parsing. < 1168575554 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :and make the ultimate parsing language. < 1168575555 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :but... < 1168575558 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :isn't happening. < 1168575609 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Unfortunately it has already been done. It is called monadic parser combinators in Haskell :) < 1168575637 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :moniadic parser combinators! < 1168575641 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :Well, that or Prolog diff lists, perhaps. < 1168575644 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :that's a buzzword if I ever saw one < 1168575680 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :for languages with symbols... there's some basic general re-ocurring patterns. < 1168575692 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :tokens < 1168575699 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :lex+yacc < 1168575717 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :enclosures (parentesis), flippers (quotes), funnyhats(decorate syntax in Python < 1168575724 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric ::P < 1168575736 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :hmmm... < 1168575777 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :you have things that serve as delimiters... usually operators... sometimes things like whitespace and newlines. < 1168575787 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :tokens < 1168575799 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :yes yes... tokens... you have to -make- them. < 1168575803 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :lex < 1168575810 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :which is what I'm trying to accomplish. < 1168575818 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :lex+yacc! < 1168575825 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :wait! < 1168575829 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :who needs tokens? < 1168575831 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :I mean really.. < 1168575833 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :expr_list = many (liftM Left (notOneOf "()") <|> liftM Right (between (char "(") (char ")") expr_list) < 1168575883 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :CakeProphet: yacc does < 1168575976 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :esoteric parsers don't need "tokens". < 1168575985 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :they need coupons. < 1168575996 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :which cannot even be defined in terms of the English language. < 1168575998 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :so I won't even bother. < 1168576001 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :You might combine both stages into one, but you are still going to be tokenizing < 1168576007 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :Nope. < 1168576016 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :yes < 1168576023 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :esoteric parsers are so magificent they don't even need to parse things. < 1168576109 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :esoteric languages just run the string directly, searching forward or backward. At least I _think_ I saw someone trying to do this the other day ;) < 1168576192 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :pretty much... ignoring strings.. < 1168576211 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :you want to find the parenthesis you can parse.. < 1168576230 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :There is such a thing as a parenthesis. < 1168576243 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :interpreter it... substitute the results... and parse the next parse-able parenthesis thing. < 1168576266 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :thats's how you would do it non-recursively. < 1168576295 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :I think there might be a need for a fundamentalist ORK, incorporating such extensions as the "There is no such thing as a" statement. < 1168576303 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :find what matches the base pattern... evaluate it... repeat over and over and over. < 1168576310 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :eventually you'll wear away the recursive-icity. < 1168576350 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :That is of course what /// does. < 1168576361 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :I've always been interested in data is defined by what it isn't. < 1168576373 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :anti-objects. < 1168576408 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :There was a thread on anti-objects on Lambda the Ultimate recently. < 1168576417 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :Let's say you have an interpreter that... when run without a program... will compute everything. < 1168576433 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :the program will define what not to compute... < 1168576445 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :so to compute one null you would to manually decompute everything. < 1168576489 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :What's a networking framework? Well... it's definetely not AI, a parser, time travel, the hello world program, a symbolic manipulator, nor a date simulator. < 1168576501 0 :CakeProphet!unknown@unknown.invalid PRIVMSG #esoteric :so just make all of those and you'll have your networking framework. < 1168579759 0 :digital_me!unknown@unknown.invalid QUIT :"Lost terminal" < 1168580310 0 :CakeProphet!unknown@unknown.invalid QUIT :No route to host < 1168580694 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :whoa neat < 1168580703 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :http://python.org/doc/lib/compiler.html < 1168580742 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :It parses python into syntax trees < 1168580956 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :that's awesome < 1168580969 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :I think that's the way to modify the print statement < 1168581039 0 :calamari!n=calamari@ip72-200-73-175.tc.ph.cox.net JOIN :#esoteric < 1168581140 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :maybe not, though < 1168581202 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :You can write python as syntax trees :) < 1168581291 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :Function(None, "f", ["x"], [], 0, None, Stmt([Return(Name("x"))])) < 1168581558 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :You might do a search and replace on "print" in do_exec, inserting >> sys.stdout, if there isn't a >> there already. A bit brittle, perhaps. < 1168581603 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :very brittle < 1168581656 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :Hacking the compiler would be more fun ;) < 1168581722 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :change Stmt([Printnl([Name('x')], None)]) to Stmt([Discard(CallFunc(Getattr(Getattr(Name('sys'), 'stdout'), 'write'), [Name('what')], None, None))]) < 1168581732 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :er, s/what/x/ < 1168582815 0 :calamari!unknown@unknown.invalid QUIT :"Leaving" < 1168583303 0 :ShadowHntr!unknown@unknown.invalid QUIT :Connection timed out < 1168588750 0 :Arrogant!n=Arrogatn@50.191.33.65.cfl.res.rr.com JOIN :#esoteric < 1168588799 0 :clog!unknown@unknown.invalid QUIT :ended < 1168588800 0 :clog!unknown@unknown.invalid JOIN :#esoteric < 1168589335 0 :oerjan!unknown@unknown.invalid QUIT :"leaving" < 1168592795 0 :Arrogant!unknown@unknown.invalid QUIT :"Leaving" < 1168598080 0 :ihope__!n=foo@c-71-205-100-59.hsd1.mi.comcast.net JOIN :#esoteric < 1168598126 0 :ihope__!unknown@unknown.invalid NICK :ihope < 1168603510 0 :jix__!n=jix@L6181.l.strato-dslnet.de JOIN :#esoteric < 1168603811 0 :jix__!unknown@unknown.invalid NICK :jix < 1168613849 0 :tgwizard!n=tgwizard@c-9b3ee155.178-1-64736c10.cust.bredbandsbolaget.se JOIN :#esoteric < 1168615760 0 :ngtr!i=ee4299@nemesis.ee.teiath.gr JOIN :#esoteric < 1168615799 0 :ngtr!unknown@unknown.invalid NICK :andreou < 1168619352 0 :ihope!unknown@unknown.invalid QUIT :Connection timed out < 1168619413 0 :andreou!unknown@unknown.invalid NICK :ngtr < 1168622329 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :bsmntbombdood: Bah. Many languages are in denial about their need for algebraic datatypes < 1168624793 0 :jix!unknown@unknown.invalid QUIT :"Bitte waehlen Sie eine Beerdigungnachricht" < 1168626716 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :SimonRC: what? < 1168626718 0 :ShadowHntr!i=sentinel@wikipedia/Shadowhntr JOIN :#esoteric < 1168626739 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :what were you making earlier? < 1168626793 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :some kinda parser? < 1168626893 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :ACTION listens to _The News Quiz_. < 1168626983 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :bsmntbombdood: Algebraic Datatypes are an enlightening system of describing datastructures. I much prefer them to classes or structs < 1168626995 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: A simple parser < 1168627015 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :ADTs are great for things like parsers. < 1168627030 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :What are they? < 1168627116 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :for regexes? < 1168627122 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :A good start http://en.wikipedia.org/wiki/Algebraic_data_type < 1168627135 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: no < 1168627142 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :okay < 1168627151 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: for nested parentheses < 1168627156 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i read it all but i'm half asleep < 1168627156 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :okay < 1168627156 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :ADTs generalise structs and unions, for a start. < 1168627161 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :that was hard? < 1168627171 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :just the parenthesis thing? < 1168627183 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: For someone who knows nothing about parsing, yes < 1168627193 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i'll try in python < 1168627203 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :bsmntbombdood: waitamo, did you just say you parsed parentheses with a regex? < 1168627207 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :in c++ that would take 20 min < 1168627211 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :SimonRC: no < 1168627228 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :Ah, good, I though mathematics might be falling apart. < 1168627257 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :nope, oklopol just misread the earlier conversation < 1168627314 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i didn't think you used regex for smth, i thought you were making a regex parser < 1168627422 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :k, does def a(b) take b as a reference if it's int < 1168627427 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :if b is int i mean < 1168627436 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: no < 1168627440 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: which language? < 1168627444 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :python < 1168627444 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :ints are immutable < 1168627451 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :how do i pass as ref? < 1168627456 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :[4]? < 1168627459 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :not 4 < 1168627460 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :a var < 1168627467 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :that's idiotic < 1168627468 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: you don't < 1168627469 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :(The answer would be yes in QBASIC.) < 1168627478 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :SimonRC: Python, I assumed < 1168627478 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :okay < 1168627504 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i can't pass as an int as a ref easily? < 1168627519 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :okay, then i see where you were having trouble :DD < 1168627527 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i'll have to use a stack then < 1168627554 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :use a list containging a singel int < 1168627571 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :A list works, but it's ugly < 1168627604 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i always code ugly with python, it's what python knows best imo < 1168627629 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :(okay, i just don't grasp functional languages) < 1168627683 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :python is functional < 1168627691 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :snork < 1168627706 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :yes, i know < 1168627713 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :and i don't grasp it < 1168627722 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :They are diking out map and rejecting multi-line lambdas < 1168627732 0 :SimonRC!unknown@unknown.invalid PRIVMSG #esoteric :ACTION goes to eat dinner. < 1168627940 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :SimonRC: I know, it's stupid < 1168627952 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :but a list comprehension is just as usable as map < 1168628089 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :define map(f,seq): return [f(i) for i in seq] < 1168628106 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :okay, made it < 1168628111 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :but did it the ugly way < 1168628130 0 :ngtr!unknown@unknown.invalid PART #esoteric :? < 1168628278 0 :andreou!i=ee4299@nemesis.ee.teiath.gr JOIN :#esoteric < 1168628329 0 :andreou!unknown@unknown.invalid PRIVMSG #esoteric :greets < 1168628480 0 :andreou!unknown@unknown.invalid PRIVMSG #esoteric :greets anyone < 1168628484 0 :andreou!unknown@unknown.invalid PRIVMSG #esoteric :i'm back from the dead < 1168628539 0 :andreou!unknown@unknown.invalid PRIVMSG #esoteric :or back into the dead ... no one here? < 1168628583 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :some < 1168628658 0 :andreou!unknown@unknown.invalid PRIVMSG #esoteric :heh hey you < 1168628721 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :who's andreou ? < 1168628748 0 :andreou!unknown@unknown.invalid PRIVMSG #esoteric :i frequented the channel a few years ago < 1168629065 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :is there a pastebin? i have an obsession to share my python code < 1168629091 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :pastebin.ca < 1168629193 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :http://www.pastebin.ca/314421 < 1168629294 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :python really shows you how much you suck when you use the ide since errors hide your code 5 miles up... < 1168629308 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :infinite recursion errors that is < 1168629358 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :>>> parentise("I've got (magic in ((my pocket) but) you can't (really have) it",[0]) < 1168629359 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :["I've", 'got', ['magic', 'in', [['my', 'pocket'], 'but'], 'you', "can't", ['really', 'have'], 'it']] < 1168629365 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i'm not sure if that's right < 1168629375 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :and my algorithm is terrible :) < 1168629392 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i iterate everything twice < 1168629581 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :oh, i forgot the slash < 1168629719 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :http://www.pastebin.ca/314437 < 1168629722 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :betterz < 1168630080 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :ACTION wonders how closures are implemented < 1168630141 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :in mine? < 1168630199 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :no < 1168630205 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :but? < 1168630211 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :? < 1168630232 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :in python? < 1168630247 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :in any language < 1168630440 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :http://bsmntbombdood.mooo.com/testclosure.c < 1168630441 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric ::) < 1168630460 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :heh < 1168630465 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :I doubt it's like that < 1168630470 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i gotta compliment my memory < 1168630491 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :very nice < 1168630536 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i gotta compliment that more tho, ingenious < 1168630599 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :thought of generalizing that with templates but never got into doing it < 1168630670 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :Hmm, I thought of a way of generalizing that code somewhat < 1168630707 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :except no < 1168630757 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :omg, managed to shut the lights with a throw of a ball < 1168630768 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :except no why? < 1168630850 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :no to the idea I had < 1168630895 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :okay :D < 1168630922 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :it could easily do that to any function given the function after it and before it :DD < 1168630960 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :curry(funcbefore,funcafter,firstvarvalue); < 1168630994 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :would search first variable in the function, variables being \0xDEADBEE(0,1,2,3,4, etc.) and currying < 1168631048 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :and return the function of course < 1168631057 0 :andreou!unknown@unknown.invalid PRIVMSG #esoteric :dhcpd is running as pid 666. < 1168631069 0 :andreou!unknown@unknown.invalid PRIVMSG #esoteric :this tells things about the upcoming net-installation... < 1168631139 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :heh < 1168631257 0 :andreou!unknown@unknown.invalid PRIVMSG #esoteric :well, has anyone installed debian on an old-world mac using netboot? < 1168631335 0 :andreou!unknown@unknown.invalid PRIVMSG #esoteric :no? wll, i'm screwed then. < 1168631829 0 :CakeProphet!n=CakeProp@h141.235.213.151.ip.alltel.net JOIN :#esoteric < 1168634339 0 :andreou!unknown@unknown.invalid PRIVMSG #esoteric :this deal sucks. < 1168634581 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :I think I might have, but I don't remember _anything_ about it, and I don't even have the silly box any more. Besides, come to think of it, I think I installed using the tried-and-true method of "move the hd to something more sensible". < 1168634700 0 :andreou!unknown@unknown.invalid PRIVMSG #esoteric :it's just insane. netbsd goes without a hitch, why not debian as well? < 1168634747 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Right, the hd-switching it was. It was the sparc I had to net-boot, it did only "rarp and tftp to the answering rarpd", and it was OpenBSD I was installing. Got confused. < 1168634769 0 :andreou!unknown@unknown.invalid PRIVMSG #esoteric :ACTION indulges in a huge piece of spinnach-cheese-pie, putting all the problems behind < 1168634839 0 :andreou!unknown@unknown.invalid PRIVMSG #esoteric :obsd-sparc goes without a flaw < 1168634850 0 :andreou!unknown@unknown.invalid PRIVMSG #esoteric :ACTION has the sparcclassic buzzing to his right as a proof < 1168634986 0 :andreou!unknown@unknown.invalid PRIVMSG #esoteric :come to think of it, sparcs are very sensible boxes < 1168635002 0 :andreou!unknown@unknown.invalid PRIVMSG #esoteric :maybe i should just sell or give away all the junk lying around and about and get a U10 or something < 1168635276 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :I had a sensible sparcstation 5 as a interweb firewall/router box, but it retired when I moved to this 100baseT network, since I didn't want to start looking for suitable sbus cards. It's currently in a closet. < 1168635357 0 :andreou!unknown@unknown.invalid PRIVMSG #esoteric :eh i'm still on 10baseT, although the previous workstation had GE-grade NICs. < 1168635376 0 :andreou!unknown@unknown.invalid PRIVMSG #esoteric :threw it out, too many MIPS, too many movies < 1168635386 0 :ihope__!n=foo@c-71-205-100-59.hsd1.mi.comcast.net JOIN :#esoteric < 1168635426 0 :ihope__!unknown@unknown.invalid NICK :ihope < 1168636890 0 :andreou!unknown@unknown.invalid PRIVMSG #esoteric :today is "can't" day. < 1168636980 0 :andreou!unknown@unknown.invalid PRIVMSG #esoteric :i'm really waiting for the s/a/u/ day < 1168639248 0 :Sukoshi!unknown@unknown.invalid PRIVMSG #esoteric :toduy is "cun't" duy < 1168639249 0 :Sukoshi!unknown@unknown.invalid PRIVMSG #esoteric :There. < 1168639260 0 :andreou!unknown@unknown.invalid PRIVMSG #esoteric :;p < 1168639288 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :There's no trailing g, so isn't it simply "Toduy is "can't" day."? < 1168639315 0 :Sukoshi!unknown@unknown.invalid PRIVMSG #esoteric :Oh. True. < 1168639333 0 :andreou!unknown@unknown.invalid PRIVMSG #esoteric :pedants < 1168639370 0 :Sukoshi!unknown@unknown.invalid PRIVMSG #esoteric :But it's right, and there's no denying it, and it's a common occurance. < 1168640210 0 :ShadowHntr!unknown@unknown.invalid PRIVMSG #esoteric :ACTION has Solaris 10 on his Ultra 5... < 1168640389 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Don't they call that "slowlaris"? < 1168640412 0 :andreou!unknown@unknown.invalid PRIVMSG #esoteric :a U5 is a perfect non-solaris box < 1168640503 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :The Ultra 10s (and the few Blade 1000s) in this university run Solaris 10, too. < 1168640934 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :you geeks and your non-x86 hardware < 1168640967 0 :andreou!unknown@unknown.invalid PRIVMSG #esoteric :a matter of pocket, not of brain. < 1168640975 0 :andreou!unknown@unknown.invalid PRIVMSG #esoteric :though, well... < 1168640992 0 :bsmntbombdood!unknown@unknown.invalid PRIVMSG #esoteric :I don't have any cool hardware :( < 1168641023 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Well, those U10s aren't really mine. And since my SS5 and the Indy are both in the closet, and the old mac is gone, the only non-x86 hardware here in use are the PPC iBooks. < 1168641085 0 :andreou!unknown@unknown.invalid PRIVMSG #esoteric : plural? capitalist pig... < 1168641355 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :The other iBook is my wife's, actually. I could barely afford my own. < 1168641441 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :I would accept the labeling if they were MacBook Pros or something. :p < 1168642616 0 :digital_me!n=digital@wikipedia/Digitalme JOIN :#esoteric < 1168642738 0 :bsmnt_bot!unknown@unknown.invalid PRIVMSG #esoteric :hi digital_me < 1168645674 0 :jix!n=jix@L6181.l.strato-dslnet.de JOIN :#esoteric < 1168645789 0 :jix!unknown@unknown.invalid QUIT :Client Quit < 1168645815 0 :tgwizard!unknown@unknown.invalid QUIT :Remote closed the connection