< 1231027208 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Oh, there are details, too. Motorola is building these chips; the model number is "BT 952000". < 1231027312 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :do they come with that leap year bug that Zune got from that Motorola spinoff? < 1231027352 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :BT 952000 --http://www.hiddenmysteries.org/themagazine/vol8/articles/montex.shtml < 1231027358 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :so, some consistency' < 1231027392 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Yes; I didn't know that the corporation called "Lucent" got its name from "LUCifer ENTerprises". < 1231027397 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :One would think that's not very good PR. < 1231027404 0 :Judofyr!unknown@unknown.invalid QUIT :Remote closed the connection < 1231027407 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ha < 1231027571 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :ACTION now wants to look up dev.* corporation names :D < 1231027702 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :i suggest staying away from Canada's DEVCO < 1231027835 0 :fizzie!unknown@unknown.invalid MODE #esoteric :-o fizzie < 1231027849 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Incidentally, have to sleep; do you want me to leave that +t on or what? < 1231027933 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :No. < 1231027935 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :Turn it off. :D < 1231027944 0 :kerlo!unknown@unknown.invalid PRIVMSG #esoteric :-t is nice when you have no trolls. < 1231028128 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :I'm not that sure that particular topic-sillitude will not come back, but I guess there's not much Real Talk during the "night-time" anyway. < 1231028143 0 :ChanServ!unknown@unknown.invalid MODE #esoteric :-t < 1231028152 0 :fizzie!unknown@unknown.invalid PRIVMSG #esoteric :Sleepitude, now; g'night. < 1231028211 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :WE ARE DOOMED! DOOMED, I SAY! < 1231028513 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :I just made a great misreading < 1231028517 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :"with enough bugs, all eyes are shallow" < 1231028543 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :THEY ARE EATING OUR EYES! AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA < 1231028949 0 :bloreg!unknown@unknown.invalid QUIT : < 1231028949 0 :puzzlet_!n=puzzlet@147.46.241.231 JOIN :#esoteric < 1231028957 0 :puzzlet_!unknown@unknown.invalid QUIT :Read error: 104 (Connection reset by peer) < 1231029109 0 :kar8nga!unknown@unknown.invalid PART #esoteric :? < 1231029251 0 :puzzlet_!n=puzzlet@147.46.241.231 JOIN :#esoteric < 1231029393 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ACTION puts a black background on everythin before his eyes cave in < 1231029483 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :BLACK IS THE (NON-)COLOR OF EVIL < 1231029565 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :dear apple: i would like a free leopard upgrade so that I don't get ugly white window mesh clashing with my ultimat blakk < 1231029720 0 :puzzlet!unknown@unknown.invalid QUIT :Read error: 110 (Connection timed out) < 1231030073 0 :GreaseMonkey!n=gm@unaffiliated/greasemonkey JOIN :#esoteric < 1231031316 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, eh? < 1231031323 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, can't you change theme in OS X? < 1231031331 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :Not the window chrome, no. < 1231031337 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :how strange < 1231031339 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :Didn't you know that Apple is always right? :-P < 1231031348 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, you just said they weren't? < 1231031357 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :Steve Jobs would disapprove of your sacrelige of his perfect design. < 1231031361 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :You uncouth savage. :D < 1231031403 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :NEWS: Today ehird was making fun of Apple. Read more on page 7, 9, 12-13 and 17 < 1231031406 0 :Vendan!n=Vendan@h215.43.16.98.dynamic.ip.windstream.net JOIN :#esoteric < 1231031429 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :I'm sure I've done that before :| < 1231031449 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :no you complained when I was doing it! < 1231031498 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :I wonder if Apple stopped disobeying their own HIG in 10.5. < 1231031500 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, anyway, iirc you can change theme even on windows xp < 1231031506 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :HIG? < 1231031512 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :HIGH? < 1231031517 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: Human Interface Guidlines < 1231031519 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ah < 1231031521 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :*Guidelines < 1231031524 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :if you added an H < 1231031529 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :it would explain a lot < 1231031531 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric ::-P < 1231031541 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :like, you know, imac < 1231031549 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :They sa(y|id) metal chrome should be used only for apps that are similar to real-world devices < 1231031557 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :but I don't think Safari, a web browser, fits that definition. < 1231031567 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :maybe it's imitating a refridgerated-mounted browser 2000 < 1231031568 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, oh? iirc finder had the metal look in 10.4 < 1231031573 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :yeah, it did < 1231031576 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :and < 1231031583 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :what on earth is it in real world? < 1231031590 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :Uh. A filing cabinet? XD < 1231031596 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :about the only time where apple listens to that guideline is with calculator. < 1231031600 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :Which looks like ar eal calculator at a glance. < 1231031613 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, in metal chrome? < 1231031614 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :well < 1231031619 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :their graph calc doesn't iirc < 1231031625 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :I mean Calculator.app. < 1231031633 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, ok, maybe they are separate < 1231031636 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :Yes. < 1231031639 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :I don't use mac a lot < 1231031642 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :as you probably know < 1231031643 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :One is a graphing calculator, one is a regular calculator :P < 1231031652 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, well I have no regular calc < 1231031655 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :Although Grapher.app is metal in 10.4, too... < 1231031660 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :I only have a graphing one < 1231031664 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :and it is black plastic < 1231031678 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :scratched black plastic < 1231031679 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :I want a TI-83 & an HP. Because that's like using both vi and emacs. < 1231031683 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :with worn out keys < 1231031690 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, this is a TI-83+ < 1231031731 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, had to replace the batteries once the in the ~6 years or so that I had it < 1231031743 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :maybe 5 years < 1231031743 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :not sure < 1231031795 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :doesn't use much power at all since those are 4 AAA < 1231031849 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ACTION examines how hard it'd be to rescheme cgit to fit with the rest of his design < 1231031860 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :cgit? < 1231031869 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :http://hjemli.net/git/cgit/about/ < 1231031883 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :hey < 1231031886 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :that is a webinterface < 1231031887 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :... < 1231031894 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :... yes, yes it is. < 1231031897 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :... And? < 1231031904 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, do you re-scheme google? < 1231031913 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :/facepalm. < 1231031916 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :It's a piece of software. < 1231031918 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :That you install on your server. < 1231031920 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :To view repositories. < 1231031921 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :true < 1231031922 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :On your server. < 1231031924 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :yes < 1231031925 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :I know < 1231031930 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :but you talked about desktop apps < 1231031933 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :just a few seconds ago < 1231031941 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :I know. It was a seperate musing. < 1231031942 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :I thought you planned to use greasemonkey or something < 1231031946 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :Ah. < 1231031950 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :No. < 1231031956 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :hey that would be fun < 1231031963 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :change the layout of every page you visit < 1231031969 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :to match your own style < 1231031969 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :http://userstyles.org/ < 1231031975 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :The interwebs are way ahead of you, mon. < 1231031981 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :hah < 1231031988 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ACTION doesn't use greasemonkey himself < 1231031993 0 :GreaseMonkey!unknown@unknown.invalid PRIVMSG #esoteric :hello. < 1231032000 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :GreaseMonkey, hah not you < 1231032004 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :GreaseMonkey: If you don't want to be pinged, stop infringing on intellectual property. :P < 1231032013 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, err maybe trademark < 1231032018 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :I was being sarcastic. < 1231032023 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :I would assume greasemonkey is GPL < 1231032067 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :hmm. making cgit fit into a 33em (base = 16px) layout could be hard. < 1231032071 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :Solution: expand the width for those pages. < 1231032075 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :Crazy! < 1231032081 0 :GreaseMonkey!unknown@unknown.invalid PRIVMSG #esoteric :a grease monkey is also a mechanic. < 1231032087 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :GreaseMonkey: Quite. < 1231032095 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :It is also a monkey. That is greasy. < 1231032105 0 :GreaseMonkey!unknown@unknown.invalid PRIVMSG #esoteric :anyways, back to what i was doing (teaching starnes how to rickroll on a keyboard) < 1231032112 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :GreaseMonkey, ouch < 1231032113 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :how < 1231032114 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :evil < 1231032123 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :that is just too evil < 1231032131 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ha < 1231032135 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :"I learned a song yesterday, come see!" < 1231032140 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :"Dun dan dun dun dan dun-dun-dun" < 1231032141 0 :GreaseMonkey!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: there's more horrible songs than that < 1231032146 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :"Dun dun dun dun dun, dun-dah-dah-dah!" < 1231032155 0 :GreaseMonkey!unknown@unknown.invalid PRIVMSG #esoteric :GbMaj7, Ab, Fm, Bbm < 1231032201 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ACTION likes how his irc bouncer + client handle logging the whole of #wikipedia and playing it back immediately on reconnect with only a few seconds of lag < 1231032272 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :also, I propose this become the next rick roll: http://uk.youtube.com/watch?v=nuyY9WjNpgs < 1231032294 0 :jix!unknown@unknown.invalid QUIT :"Computer has gone to sleep" < 1231032654 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :ACTION didn't notice the # on wikipedia first, and was sorta skeptic < 1231032733 0 :Sgeo!n=Sgeo@ool-18bf68ca.dyn.optonline.net JOIN :#esoteric < 1231033548 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: ? < 1231033550 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oh < 1231033550 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :lol < 1231034674 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric : GbMaj7, Ab, Fm, Bbm <-- chords? < 1231034677 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :not melody < 1231034687 0 :GreaseMonkey!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: yes. < 1231034690 0 :GreaseMonkey!unknown@unknown.invalid PRIVMSG #esoteric :chords. < 1231034690 0 :kerlo!unknown@unknown.invalid PRIVMSG #esoteric :GbM7 isn't much of a note. < 1231034705 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :kerlo, true < 1231034706 0 :GreaseMonkey!unknown@unknown.invalid PRIVMSG #esoteric :it's a series of tubes notes! < 1231034720 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :GreaseMonkey, so what about the actual melody? < 1231034723 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :does it have one? < 1231034725 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :or? < 1231034726 0 :kerlo!unknown@unknown.invalid PRIVMSG #esoteric :ACTION thinks, "G flat? What kind of crazy key is this?" < 1231034740 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric : GbM7 isn't much of a note. <-- several < 1231034759 0 :GreaseMonkey!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: it does, but chords are still good < 1231034783 0 :GreaseMonkey!unknown@unknown.invalid PRIVMSG #esoteric :also, the melody is covered by a different instrument, i think < 1231034788 0 :GreaseMonkey!unknown@unknown.invalid PRIVMSG #esoteric :maybe several < 1231034790 0 :kerlo!unknown@unknown.invalid PRIVMSG #esoteric :Let's see. A minor, five fifths down... < 1231034812 0 :kerlo!unknown@unknown.invalid PRIVMSG #esoteric :That's B flat minor, all right. < 1231034872 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :kerlo, I was trying to figure out the chord too < 1231034878 0 :kerlo!unknown@unknown.invalid PRIVMSG #esoteric :The key, I mean. < 1231034907 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :no I fail at this time of the night < 1231034911 0 :kerlo!unknown@unknown.invalid PRIVMSG #esoteric :Now someone quickly get me a program or an applet or something that can play me those chords. I don't want to wake anyone up with the piano and I'm not very good at sonification. < 1231034912 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :what are the keys of GbMaj7 < 1231034929 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :kerlo, well I connected my headset to my synth < 1231034937 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :err keyboard/synth < 1231034941 0 :kerlo!unknown@unknown.invalid PRIVMSG #esoteric :Gb, Bb, Db, F. < 1231034946 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :though it probably uses samples < 1231034949 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ah right < 1231035002 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :hm the keyboard claims that is Ebm(add9) < 1231035004 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :strange < 1231035006 0 :kerlo!unknown@unknown.invalid PRIVMSG #esoteric :Yell if you see a Cb or an Fb in any of these. < 1231035009 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :too tried to figure that out < 1231035022 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :kerlo, ? < 1231035030 0 :kerlo!unknown@unknown.invalid PRIVMSG #esoteric :Ebm(add9)? It doesn't even *have* an Eb, does it? < 1231035038 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :kerlo, no clue < 1231035062 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ACTION pulls the power plug and hopes it helps to reset it < 1231035091 0 :kerlo!unknown@unknown.invalid PRIVMSG #esoteric :Ebm(add9) is Eb, Gb, Bb, F. < 1231035117 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Gb, Bb, Db? < 1231035137 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ok my fault, I hit the wrong key -_- < 1231035151 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ok... < 1231035160 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :F#M7? < 1231035180 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :kerlo, does that match better? :P < 1231035195 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :well it would if reversed < 1231035197 0 :kerlo!unknown@unknown.invalid PRIVMSG #esoteric :Ab is Ab, C, Eb; Fm is F, Ab, C; Bbm is Bb, Db, F. < 1231035217 0 :kerlo!unknown@unknown.invalid PRIVMSG #esoteric :F#M7 is enharmonic to GbM7. < 1231035225 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :true < 1231035238 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :so yes it makes sense < 1231035240 0 :kerlo!unknown@unknown.invalid PRIVMSG #esoteric :I loathe treating enharmonics as the same, but only a little. < 1231035279 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :kerlo, depends on which way you take it < 1231035940 0 :Sgeo!unknown@unknown.invalid QUIT :Remote closed the connection < 1231043763 0 :Sgeo!n=Sgeo@ool-18bf68ca.dyn.optonline.net JOIN :#esoteric < 1231046388 0 :Sgeo!unknown@unknown.invalid QUIT :Remote closed the connection < 1231046951 0 :oerjan!unknown@unknown.invalid QUIT :"Good night" < 1231048114 0 :Sgeo!n=Sgeo@ool-18bf68ca.dyn.optonline.net JOIN :#esoteric < 1231052220 0 :Sgeo!unknown@unknown.invalid QUIT :Read error: 110 (Connection timed out) < 1231055999 0 :clog!unknown@unknown.invalid QUIT :ended < 1231056000 0 :clog!unknown@unknown.invalid JOIN :#esoteric < 1231056091 0 :oklosol!unknown@unknown.invalid PRIVMSG #esoteric :lol. my dream just reminded me i need to renew my library books xD < 1231056102 0 :oklosol!unknown@unknown.invalid PRIVMSG #esoteric :also i slept like 13 hours < 1231056104 0 :oklosol!unknown@unknown.invalid PRIVMSG #esoteric :so cool. < 1231056305 0 :oklosol!unknown@unknown.invalid PRIVMSG #esoteric :ais523: also, yay for a client that stores topic history <<< yeah i wish mine did, i mean when someone changes the topic, there's essentially no way to get the old one back. < 1231056559 0 :oklosol!unknown@unknown.invalid PRIVMSG #esoteric :ehird: freenode don't do that kind of thing. <<< freenode k-lined my friend, many times. < 1231056893 0 :oklosol!unknown@unknown.invalid PRIVMSG #esoteric :ehird: ais523: I've ran clonebots in #esoteric-blah for an okoplay. | ehird: i had another variation | ehird: with like 30 <<< dear fuck i wanna see < 1231057296 0 :psygnisfive!unknown@unknown.invalid PRIVMSG #esoteric :hey oklo < 1231057999 0 :oklosol!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: you've never heard about sex in the city? god i envy your style < 1231058250 0 :oklosol!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: oklosol: feeling particularly bright today? <<< actually, yes. well. not the day you asked, but now. < 1231058377 0 :oklosol!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: s/the/then/? <<< no, parses as "oerjan: the (nothing is possible unless there is a rule allowing it) kind, i assume" < 1231058524 0 :oklosol!unknown@unknown.invalid PRIVMSG #esoteric :01:46… ehird: AnMaster: The centralized UK provider that handles the block blocked this page recently: http://en.wikipedia.org/wiki/Virgin_Killer [you might not want to click] <<< i still think blocking a page containing child porn as an album cover is not as bad as blocking a thousand pages of normal porn < 1231058539 0 :oklosol!unknown@unknown.invalid PRIVMSG #esoteric :(we looked through the whole finnish list, 5 pages of cp, rest was just porn.) < 1231058559 0 :oklosol!unknown@unknown.invalid PRIVMSG #esoteric :(also the 5 needed a few links forward, nothing was cp to begin with) < 1231059126 0 :oklosol!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: GreaseMonkey, so what about the actual melody? <<< 02307..7..5.....b02b5..5..3..20.02303..5..2..0b...b.5...3....... repeat iirc < 1231059215 0 :oklosol!unknown@unknown.invalid PRIVMSG #esoteric :kerlo: Ebm(add9)? It doesn't even *have* an Eb, does it? <<< it has all but it. < 1231059243 0 :oklosol!unknown@unknown.invalid PRIVMSG #esoteric :ebadd9 just drops gb a third down < 1231059254 0 :oklosol!unknown@unknown.invalid PRIVMSG #esoteric :also why am i commenting this part, you're obviously noobs :-) < 1231059281 0 :oklosol!unknown@unknown.invalid PRIVMSG #esoteric :nice. could do that without anyone commenting back < 1231059302 0 :oklosol!unknown@unknown.invalid PRIVMSG #esoteric :and took only an hour, should really get back to only taking a glance at the logs. < 1231059733 0 :oklosol!unknown@unknown.invalid NICK :oklopol < 1231059842 0 :kar8nga!n=kar8nga@e-20.vc-graz.ac.at JOIN :#esoteric < 1231061351 0 :tyrelle!n=vicky@cpe-74-78-88-209.buffalo.res.rr.com JOIN :#esoteric < 1231061355 0 :tyrelle!unknown@unknown.invalid PRIVMSG #esoteric :hello < 1231061724 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i'm here < 1231061748 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :oh < 1231061753 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :psygnisfive: sorry i missed you < 1231061755 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i mean < 1231061756 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :of course < 1231061762 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :that i missed your comment, didn't see it < 1231062002 0 :psygnisfive!unknown@unknown.invalid PRIVMSG #esoteric :its ok < 1231062008 0 :psygnisfive!unknown@unknown.invalid PRIVMSG #esoteric :and i know you missed me darling dont worry < 1231062009 0 :psygnisfive!unknown@unknown.invalid PRIVMSG #esoteric :im here now < 1231062015 0 :psygnisfive!unknown@unknown.invalid PRIVMSG #esoteric :ACTION coddles oklopol < 1231062019 0 :psygnisfive!unknown@unknown.invalid PRIVMSG #esoteric :also, im off to bed. :P < 1231062052 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :again? < 1231062057 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :have a fun < 1231062065 0 :psygnisfive!unknown@unknown.invalid PRIVMSG #esoteric :what do you mean again? < 1231062071 0 :psygnisfive!unknown@unknown.invalid PRIVMSG #esoteric :its 4:40 am :P < 1231062077 0 :tyrelle!unknown@unknown.invalid PRIVMSG #esoteric :any math students < 1231062077 0 :psygnisfive!unknown@unknown.invalid PRIVMSG #esoteric :night <3 < 1231062085 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :you were going to sleep when i was < 1231062087 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :and i just woke up < 1231062092 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :and you're going to sleep again. < 1231062111 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :tyrelle: i've had two courses! < 1231062464 0 :Corun!n=Corun@cpc1-rdng19-0-0-cust700.winn.cable.ntl.com JOIN :#esoteric < 1231062580 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :think i gotta go. cya < 1231062585 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :-> < 1231062691 0 :tyrelle!unknown@unknown.invalid PRIVMSG #esoteric :oh brother < 1231062700 0 :tyrelle!unknown@unknown.invalid PRIVMSG #esoteric :#lisp has some opinionated ops < 1231063887 0 :GreaseMonkey!unknown@unknown.invalid QUIT :"You only need one wheel. Bikers are just greedy." < 1231069646 0 :Corun!unknown@unknown.invalid QUIT :"This computer has gone to sleep" < 1231072000 0 :judotest!n=judotest@084202203016.customer.alfanett.no JOIN :#esoteric < 1231072190 0 :judotest!unknown@unknown.invalid PRIVMSG #esoteric ::P < 1231072366 0 :judotest!unknown@unknown.invalid PRIVMSG #esoteric :woot < 1231072373 0 :judotest!unknown@unknown.invalid PRIVMSG #esoteric :was that me? :S < 1231072377 0 :judotest!unknown@unknown.invalid NICK :Judofyr < 1231072410 0 :Judofyr!unknown@unknown.invalid PRIVMSG #esoteric :that's why the smilie didn't show up in MSN :P < 1231073189 0 :Corun!n=Corun@cpc1-rdng19-0-0-cust700.winn.cable.ntl.com JOIN :#esoteric < 1231073322 0 :kar8nga!unknown@unknown.invalid QUIT :Read error: 110 (Connection timed out) < 1231073344 0 :kar8nga!n=kar8nga@k-19.vc-graz.ac.at JOIN :#esoteric < 1231073471 0 :jix!n=jix@p548C9ECB.dip0.t-ipconnect.de JOIN :#esoteric < 1231073598 0 :jix!unknown@unknown.invalid QUIT :Client Quit < 1231075831 0 :moozilla!n=moozilla@207-118-25-204.dyn.centurytel.net JOIN :#esoteric < 1231075962 0 :metazilla!n=moozilla@207-118-25-204.dyn.centurytel.net JOIN :#esoteric < 1231075968 0 :moozilla!unknown@unknown.invalid QUIT :Read error: 104 (Connection reset by peer) < 1231075972 0 :metazilla!unknown@unknown.invalid NICK :moozilla < 1231076720 0 :Judofyr!unknown@unknown.invalid QUIT :Read error: 104 (Connection reset by peer) < 1231076737 0 :Judofyr!n=Judofyr@084202203016.customer.alfanett.no JOIN :#esoteric < 1231077304 0 :metazilla!n=moozilla@207-118-25-204.dyn.centurytel.net JOIN :#esoteric < 1231077304 0 :moozilla!unknown@unknown.invalid QUIT :Read error: 54 (Connection reset by peer) < 1231077314 0 :metazilla!unknown@unknown.invalid NICK :moozilla < 1231077352 0 :jix!n=jix@p548C9ECB.dip0.t-ipconnect.de JOIN :#esoteric < 1231077462 0 :moozilla!unknown@unknown.invalid QUIT :Read error: 104 (Connection reset by peer) < 1231077465 0 :metazilla!n=moozilla@207-118-25-204.dyn.centurytel.net JOIN :#esoteric < 1231077983 0 :Judofyr_!n=Judofyr@084202203016.customer.alfanett.no JOIN :#esoteric < 1231078218 0 :metazilla!unknown@unknown.invalid QUIT :Read error: 104 (Connection reset by peer) < 1231078223 0 :moozilla!n=moozilla@207-118-25-204.dyn.centurytel.net JOIN :#esoteric < 1231078377 0 :metazilla!n=moozilla@207-118-25-204.dyn.centurytel.net JOIN :#esoteric < 1231078377 0 :moozilla!unknown@unknown.invalid QUIT :Read error: 104 (Connection reset by peer) < 1231078385 0 :metazilla!unknown@unknown.invalid NICK :moozilla < 1231078924 0 :ais523!n=ais523@147.188.254.120 JOIN :#esoteric < 1231079075 0 :Judofyr!unknown@unknown.invalid QUIT :Read error: 110 (Connection timed out) < 1231079076 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ACTION wonders how the trolling went yesterday < 1231079076 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :hmm... I wonder if that's interesting enough to actually open up logs to read < 1231079264 0 :metazilla!n=moozilla@207-118-25-204.dyn.centurytel.net JOIN :#esoteric < 1231079264 0 :moozilla!unknown@unknown.invalid QUIT :Read error: 104 (Connection reset by peer) < 1231079274 0 :metazilla!unknown@unknown.invalid NICK :moozilla < 1231079369 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric : Trolling esoteric language enthusiasts about their tastes in programming languages is like trying to annoy a duck by pouring water on it < 1231079374 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :so true < 1231079420 0 :moozilla!unknown@unknown.invalid QUIT :Read error: 104 (Connection reset by peer) < 1231079423 0 :moozilla!n=moozilla@207-118-25-204.dyn.centurytel.net JOIN :#esoteric < 1231079888 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :I should read the logs more often < 1231080470 0 :moozilla!unknown@unknown.invalid QUIT :Read error: 54 (Connection reset by peer) < 1231080470 0 :moozilla!n=moozilla@207-118-25-204.dyn.centurytel.net JOIN :#esoteric < 1231080477 0 :Judofyr_!unknown@unknown.invalid NICK :Judofyr < 1231080640 0 :moozilla!unknown@unknown.invalid QUIT :Read error: 104 (Connection reset by peer) < 1231082526 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird will like this quote: "MySQL is a very fast database because it takes out the parts of a database that make it a database." < 1231082539 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :which explains why lots of people don't like it, and also why lots of people use it < 1231083739 0 :ehird!unknown@unknown.invalid PART #esoteric :? < 1231083744 0 :ehird!n=ehird@eso-std.org JOIN :#esoteric < 1231083746 0 :ehird!unknown@unknown.invalid PART #esoteric :? < 1231083749 0 :ehird!n=ehird@eso-std.org JOIN :#esoteric < 1231083796 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :graph serialization for the fecking win < 1231083806 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :graph serialization for the fecking win < 1231083808 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :hi ehird < 1231083820 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :hai < 1231083851 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :00:14:53 ehird: ais523: I've ran clonebots in #esoteric-blah for an okoplay. | ehird: i had another variation | ehird: with like 30 <<< dear fuck i wanna see < 1231083853 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :im sure i showed you < 1231083923 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :also, our troll was awesomely bad. < 1231084639 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ehird: i read the logs. < 1231084646 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :and yes, you probably showed me, i just don't remembe < 1231084647 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: wat < 1231084647 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :yes, I read the logs too < 1231084648 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :r < 1231084677 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ehird: well i thought you were telling about the troll from last night < 1231084684 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :*telling me < 1231084711 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :no < 1231084717 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :was replying to ais523's logmsg < 1231084746 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :what do you think of the quote about MySQL/ < 1231084810 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :15:42 graph serialization for the fecking win < 1231084812 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :that was my reply < 1231084818 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oh, I didn't realise < 1231084843 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :actually, viewing MySQL as not a database, but still useful for certain tasks, is probably best < 1231084850 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ehird: yes, i know, you told that with your wat. < 1231084852 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :even if it isn't a database, it seems to have found itself a niche < 1231084869 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :what does mysql take out? < 1231084877 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: just about everything < 1231084882 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :until recently, it had no transactions < 1231084904 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: it's sort of the C of databases, it lets you do stupid and nonsensical things without complaining, and most high-level features have to be written by hand < 1231084907 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :transactions are one of the crucial things about irl databases that are not a part of databases as such < 1231084918 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: er yes they are < 1231084919 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ACID < 1231084925 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :of course, this means it's very fast < 1231084937 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i don't actually think mysql did any of ACID until recently < 1231084962 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :they started a project recently, Drizzle, which aims to.. make it even less of a database, for the "web 2.0" crowd < 1231084965 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i'm wondering what it'll have left < 1231084981 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ehird: they aren't an inherent part of databases. < 1231084985 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :no. < 1231084997 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :cool, what does it do? < 1231084997 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :I actually think they're onto something here < 1231084997 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :printf("hello world\n")? < 1231084999 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: barely anything < 1231085000 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :never. < 1231085011 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :http://en.wikipedia.org/wiki/Drizzle_(database_server) < 1231085011 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :hmm... this morning I was thinking about an esolang idea I haven't thought about in ages, and realised I hadn't told you lot about it < 1231085021 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i bet it ends up as PERSISTENT MEMCACHED < 1231085030 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :basically, it's an attempt to create a programming language which is as computationally powerful as possible without being TC < 1231085042 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :the highest "named" class in common use seems to be linear bounded automaton < 1231085049 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :so I thought I'd make an Ackermann-function-bounded automaton < 1231085059 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i've always thought that most real world programming need not use a turing complete language < 1231085071 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :and that the static-verification gains you could get from using a sub-TC language < 1231085074 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :would be highly useful < 1231085075 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :Actually, none of them do < 1231085084 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :Slereah: they do, just the interps are buggy < 1231085084 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :Slereah: they use TC languages < 1231085086 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :just not on TC machines < 1231085090 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :Yes, but they don't need to < 1231085100 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :Because the languages can't be use to their fullest < 1231085107 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :Slereah: ok, lower than "TC bar memory storage" < 1231085108 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :happy now < 1231085108 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :incidentally, I was also wondering about whether it was possible to actually get a true-TC interp in the real universe < 1231085114 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: uh, no. < 1231085117 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :I think you need the universe to not expand < 1231085120 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and unlimited energy < 1231085123 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ehird: i mean, i do agree transactions are a crucial part of a real database system, because you need it, in practise; i'm just you could just have the database not have any errors or synchronization problems, and get by without transactions. < 1231085127 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :but apart from that there are no obvious obstacles < 1231085127 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :you need it to expand to grow the tape < 1231085132 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :... < 1231085132 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i'm just < 1231085135 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :*i'm just saying < 1231085135 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :also, um < 1231085136 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :entropy? < 1231085138 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: having it infinitely large to begin with < 1231085145 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and free-energy, I meant < 1231085147 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: that's Impossible, though < 1231085150 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :which is sort of the opposite of entropy < 1231085158 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: the universe is only finitely large because it's expanding < 1231085160 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :Entropy isn't really a law < 1231085165 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :the expansion of the universe causes it to get smaller < 1231085173 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :... wait, what? < 1231085174 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :_smaller_? < 1231085175 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :But you're screwed anyway on infinite time < 1231085178 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :which is counterintuitive, but so is most of physics < 1231085183 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i'm physics-retarded, I htink < 1231085191 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :ais523 : What are you talking about < 1231085192 0 :Judofyr!unknown@unknown.invalid PRIVMSG #esoteric :ehird: limechat is awesome! thanks for the tip :-) < 1231085196 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :Judofyr: yw :) < 1231085196 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :basically, the expansion is homogenous, so the speed at which a particular point is receding depends on its distance from you < 1231085203 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :the further away it is, the faster it recedes < 1231085215 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :So? < 1231085220 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :if a point is so far away it's moving away faster than the speed of light, it's technically outside the universe < 1231085223 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :That makes it bigger, not smaller :o < 1231085225 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :that's how the boundary of the universe is defined < 1231085226 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i still can't think how a universe expanding gets smaller. < 1231085229 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :that makes no sense. < 1231085242 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :I think you mean "visible universe" < 1231085248 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :yes < 1231085249 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :Which is irrelevant to the discussion < 1231085255 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and no, not at all < 1231085255 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :Slereah: no. < 1231085257 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :Also the visible universe gets larger also < 1231085269 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :clearly you can't use data outside the visible universe for calculation < 1231085276 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i'm with ais523 on this one < 1231085289 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :Yes, if you stay on earth < 1231085300 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :Slereah: well, technically, but everything else expands at the same rate too, so it gets smaller compared to all the objects inside it < 1231085301 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :If you use a TC machine, it will need to move to read the data anyway < 1231085305 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :So its horizon will move < 1231085315 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :Slereah: its horizon always moves inwards < 1231085318 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :It doesn't get smaller, it gets emptier. < 1231085327 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :you can't move the horizon outwards except by moving faster than the speed of light, or using time travel < 1231085332 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and both are believed impossible < 1231085343 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :(not to mention time travel gives you computational classes above TC) < 1231085344 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :What are you talking about. < 1231085354 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :Just moving will move your horizon < 1231085369 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :Slereah: yes, but the horizon moves inwards at the speed of light < 1231085369 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :hmm. < 1231085373 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :so we're just lucky it's so far away < 1231085381 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :the horizon's getting smaller, all the time < 1231085388 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :at least, if the universe keeps expanding < 1231085389 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :*larger < 1231085393 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :*smaller < 1231085402 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :Define "smaller" < 1231085409 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :Slereah: less distance to it < 1231085419 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :I'm afraid I must disagree then < 1231085419 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and so a smaller surface area, because it's spherical < 1231085435 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :you may be thinking of it getting /older/ over time < 1231085436 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :"Programming language authors image gallery" <-- I thought this was a sentient language that authored a web gallery script... < 1231085457 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :The horizon increases in size just with time. < 1231085476 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :I'm not sure if it also increases with expansion, but it also might < 1231085491 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :does anyone want to write up a well-worded and thought-provoking seed to a Usenet flamewar, on this? < 1231085494 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :so we can see who's right? < 1231085495 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :(Doing the speed of light + enlarged metric isn't easy to do in your head) < 1231085521 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :Slereah: well technically not, say the universe consisted of cells of some size that was constantly getting bigger < 1231085528 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :and it grew faster than light would let us see < 1231085541 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: as for Drizzle, they're taking out all the features that you don't technically have to use in a MySQL database AFAICT < 1231085547 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :they seem to be making some form of tarpit < 1231085554 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i still love this http://www.malevole.com/mv/misc/killerquiz/ < 1231085554 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :so once in a while, even though we're seeing farther and farther, the cell size would let us see less and less cells < 1231085559 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :e.g. you don't actually need prepared statements, you can just send the statement each time < 1231085577 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :oklopol : Except the universe doesn't do that. < 1231085578 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i mean i don't know or care whether this is what actually happens, i'm just saying that's what i though ais523 meant. < 1231085583 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :Slereah: i don't care. < 1231085583 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :You see more cells, not bigger cells. < 1231085586 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :yes, that is what I meant < 1231085602 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and no, expansion of the universe doesn't create more cells, at least not in the popular theories < 1231085606 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :Slereah: explain to ais523, not me. < 1231085608 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :I think steady-state theory has it doing that < 1231085623 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :What does "more cells" mean anyway. < 1231085633 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :It's continuous in general relativity < 1231085637 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :well, the cells are just a way of thinking about it, given they're infinitely small < 1231085642 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :do you know about the delta function? < 1231085649 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :Slereah: planck's constant or something like that getting bigger? < 1231085649 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :Yes, yes I do. < 1231085657 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ugh < 1231085660 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :-14 C outside < 1231085662 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :way too cold < 1231085664 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :well, how do you know it integrates to 1, given that it's 0 everywhere and infinity at one point < 1231085667 0 :Slereah!unknown@unknown.invalid PRIVMSG #esoteric :oklopol : Not proved in any way < 1231085674 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: much colder here. < 1231085674 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric : AnMaster: you've never heard about sex in the city? god i envy your style <-- my style? < 1231085683 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :the cell-size thing is sort of like that < 1231085686 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :Slereah: i'm sure. < 1231085688 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :there are no actual cells, and they're infinitely small < 1231085691 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :yet they're getting bigger < 1231085711 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :Slereah: don't respond to that "i'm sure", it was an accidental message :) < 1231085713 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :you know who we need in here? < 1231085716 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :chris pressey < 1231085723 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :why, does he know about this sort of thing? < 1231085729 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :no < 1231085732 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :or just because it would be great to have such a prominent esolanger? < 1231085735 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :yep :P < 1231085742 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric : AnMaster: GreaseMonkey, so what about the actual melody? <<< 02307..7..5.....b02b5..5..3..20.02303..5..2..0b...b.5...3....... repeat iirc <-- what on earth is that notation? < 1231085751 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: being completely ignorant about popular culture < 1231085754 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i mean, he made befunge < 1231085757 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :what more do you want? < 1231085758 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: glad you asked < 1231085766 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: Xigxag? < 1231085773 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :yes, yes, I know < 1231085775 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :but he made befunge :P < 1231085782 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oklopol, sure, I don't care about popular culture < 1231085782 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :actually, I think AnMaster would scare him away < 1231085785 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and lots of others, too < 1231085790 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :I don't even HAVE a tv since a few months < 1231085793 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :since I never used it anyway < 1231085802 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: http://www.theonion.com/content/node/28694 < 1231085803 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :what i use for melodies, a subset that explains that little melody, "z-a0-9A-Z" are notes, from left to right, "."'s are pauses < 1231085807 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: wow, you sound just like me < 1231085810 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :everything is ...equilong < 1231085815 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :if I want to watch the news of the public service TV I can just go to their website < 1231085823 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: i haven't watched tv in years < 1231085823 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :I think UK users can do the same for BBC < 1231085835 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: I'd guessed hexadecimal with . to continue notes < 1231085838 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :so I was almost right < 1231085839 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :and i don't care about *physics*, let alone pop culture < 1231085847 0 :oerjan!n=oerjan@hagbart.nvg.ntnu.no JOIN :#esoteric < 1231085856 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :and still i know what sitc is < 1231085859 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric : and i don't care about *physics*, let alone pop culture < 1231085860 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric : what i use for melodies, a subset that explains that little melody, "z-a0-9A-Z" are notes, from left to right, "."'s are pauses <-- left to right of what? < 1231085863 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric : and took only an hour, should really get back to only taking a glance at the logs. < 1231085867 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: yes < 1231085868 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :that may be for the best. < 1231085869 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :where do you begin? < 1231085871 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :I mean < 1231085872 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :z is the lowest < 1231085875 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :Z is the highest < 1231085877 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: that has to be one of my favourite lines of yours ever < 1231085877 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oklopol, on what instrument? < 1231085880 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :it sums you up so well < 1231085886 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: singing < 1231085890 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :but that's the main melody < 1231085895 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :who cares what the instrument is < 1231085913 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i don't believe in existence < 1231085915 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oh fuc--------- < 1231085924 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :caring about instruments is for people who don't understand music, you know, the kind of people who like music that "sounds good" < 1231085932 0 :Epic_Fail_Guy!n=Slereah@ANantes-252-1-37-58.w82-126.abo.wanadoo.fr JOIN :#esoteric < 1231085933 0 :Epic_Fail_Guy!unknown@unknown.invalid PRIVMSG #esoteric :ais523 : It's not, it's just defined like that, not by infinity. < 1231085935 0 :Epic_Fail_Guy!unknown@unknown.invalid PRIVMSG #esoteric ::D < 1231085954 0 :Epic_Fail_Guy!unknown@unknown.invalid PRIVMSG #esoteric :Was I saying. < 1231085955 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ais523: heh, thanks, i liked that line too < 1231085959 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :ehird: don't put descartes before the horse < 1231085960 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oklopol, well 1) I can't sing, but I can play the piano a bit 2) If I could sing I would be really low bass I think < 1231085968 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :Epic_Fail_Guy: if you're talking about the delta function like that, you're missing its essential esoness < 1231085969 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ACTION has a really low voice < 1231085982 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: ugh < 1231085989 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster should have a Standard Context pack of lines which he just links to so he doesn't have to say the same things < 1231085991 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :every five seconds < 1231085994 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :did you have that pun prepared? < 1231086013 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, what did I repeat? < 1231086022 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: i know all that, like ehird pointed out. my point is, just use any instrument < 1231086027 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :it's the same melody no matter what you use < 1231086037 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :* AnMaster has a really low voice <-- one of your standard lines < 1231086046 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :along with "i recommend emacs" < 1231086046 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ACTION greps to check < 1231086046 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: in some cases the instruments can affect the harmony < 1231086056 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :if it's correct, i just woke up and didn't really try playing it in my head to check it or anything. < 1231086059 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :such as an organ with a 3/7 stop, or one of the other silly ones < 1231086081 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :ais523: no, but it was recycled of course < 1231086088 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ais523: umm. what do you mean? < 1231086090 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :er that may mean yes < 1231086097 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, I said it just once the last 3 months, and that was the instance I said just now < 1231086098 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: gggggggggggggggggggggggg < 1231086101 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :I rotate logs every 3 months < 1231086125 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :wait, sorry, cleaning my keyboard < 1231086125 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: I meant, organs have 'stops' which let you automatically add harmony < 1231086125 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :it's alright if organs have a 3/7 stop, unless of course it's the heart < 1231086132 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :a 3/7 stop will add a note whose frequency is 3/7 higher than the one you play < 1231086137 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :and sorry about that. < 1231086138 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :as a chord with it < 1231086150 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :it's one of the silly ones, most of the stops are at frequencies which actually correspond to chords < 1231086156 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :or at least notes < 1231086191 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ais523: right. i didn't know it does that < 1231086200 0 :jix!unknown@unknown.invalid QUIT :"..." < 1231086207 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg < 1231086211 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ugh, my g key is still dirty < 1231086216 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :anyone here know how to clean keyboards? < 1231086225 0 :jix!n=jix@p548C9ECB.dip0.t-ipconnect.de JOIN :#esoteric < 1231086231 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :ais523: i thought you were grinning widely < 1231086238 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: use water :P < 1231086248 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :ACTION swats ehird -----### < 1231086250 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :anyway, something played with an instrument will always just be an approximation of the pure sine/square wave melody < 1231086252 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :not in a position to do that easily right now < 1231086256 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :although I may try when I get home < 1231086265 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: well, yes < 1231086270 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :if you have a 3/7 stop there, it will be closer to being an approximation of having that higher note there. < 1231086271 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :although square waves aren't exactly pure < 1231086274 0 :Slereah2!n=Slereah@ANantes-252-1-96-169.w81-53.abo.wanadoo.fr JOIN :#esoteric < 1231086274 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: take the key out and figure something out < 1231086275 0 :Slereah2!unknown@unknown.invalid PRIVMSG #esoteric :>:| < 1231086277 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :well no, they're not < 1231086294 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: I've never tried to remove a keycap from this laptop, I have no idea how securely or not they're glued on < 1231086299 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and I don't want to break it < 1231086300 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oh, a laptop < 1231086308 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :I know they just come off on desktops, not sure about laptops though < 1231086316 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: well, it'll almost certainly come off OK < 1231086318 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :but it might be a bit tricky < 1231086327 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: actually, organs are pretty similar to additive synthesizers < 1231086333 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ofc they don't manage perfect sine waves to add together < 1231086344 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :but you get to add together a lot of organ-waves to create the timbre you want < 1231086344 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :my organs synthesize things, then add them < 1231086366 0 :Slereah2!unknown@unknown.invalid PRIVMSG #esoteric :Hm < 1231086369 0 :Slereah2!unknown@unknown.invalid PRIVMSG #esoteric :Organ wave. < 1231086373 0 :Slereah2!unknown@unknown.invalid PRIVMSG #esoteric :(It's also not a function) < 1231086377 0 :Slereah2!unknown@unknown.invalid PRIVMSG #esoteric :(So there) < 1231086437 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :organ waves are all in the blood < 1231086439 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ais523: i don't like timbres. i'm more of a theoretical musician, so i prefer keeping it all pure and ...sinous? yes, that must be it. < 1231086455 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :who wants to help me write a Magenta compiler? < 1231086456 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :yes, I know about the curse :-P < 1231086477 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: sinusoidal is the real word, but I prefer yours < 1231086486 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :i am already cursed. i wouldn't want to add to it. < 1231086487 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and no, I don't want to help < 1231086506 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :mostly because if you succeed, you'll break the curse, then Magenta won't be so interesting to talk about < 1231086519 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :in a way, I'd prefer you to fail so we can all have a laugh about it and talk about how Magenta is truly cursed < 1231086529 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :but if I want you to fail, then I shouldn't really work on the project, that wouldn't work out well < 1231086531 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :sine -> sinusoidal? does sine come from a longer word i don't know or whazz thaddabout? < 1231086541 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :well sinusoid prolly < 1231086549 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :English makes no sense, but it might be fun to look up < 1231086570 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: sine <- sinus, latin < 1231086578 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: i think it's interesting :P < 1231086586 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :adding -oid to that is probably not very classical < 1231086590 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: and what's this oidal subbic?= < 1231086592 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :hmm... Wiktionary doesn't know, but apparently "sinusoidal" is "sinimuotoinen" in Finnish < 1231086592 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :... < 1231086595 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :*suffix. < 1231086598 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and that's the only translation given < 1231086619 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :sinimuotoinen = of sinusoidal form < 1231086626 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :hmm... an ellipsoid is a 3D shape which corresponds to what an ellipse is in 2D < 1231086630 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :lol < 1231086664 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :-oid is a greek suffix i think, put on things to make family names in biology. like hominoid < 1231086671 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :well. "of sine form", we don't want recursive translations < 1231086685 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, hm what is a 3/7 stop on an organ? I have no clue how organs work apart from blowing air through pipes < 1231086685 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :oh it may be -o + ides < 1231086696 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :the latter meaning offspring < 1231086706 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :ACTION should check < 1231086725 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ais523: well yes, i know what oid *means*, i just meant what's it doing there < 1231086727 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: organs are so complicated because they have one pipe for each stop/note combination, more or less < 1231086739 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :hmm. i didn't really ask it that way. < 1231086741 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, I thought it was one pipe / note? < 1231086743 0 :Slereah!unknown@unknown.invalid QUIT :Connection timed out < 1231086744 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and all the stops basically multiply or divide the frequency of a note by a given value < 1231086744 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :also, what is a stop < 1231086751 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, huh < 1231086755 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :strange < 1231086757 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :stops you can either turn on or off, they're like booleans < 1231086768 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and when you play a note, you get the sound of that note for each stop that's on < 1231086775 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: stops flow of air, presumably < 1231086781 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :normally organs have multiple keyboards, and stops can be on or off for individual keywords < 1231086782 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :hm reminds me of the university organ in Discworld, with "silly fam animal sounds" < 1231086785 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :*keyboards < 1231086786 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :farm* < 1231086793 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :http://en.wikipedia.org/wiki/-oid < 1231086794 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and I think that's the etymology < 1231086820 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :it goes all the way from 1/16 stops which are so low that you can't actually hear them, just annoy the Headmaster because for some reason the pipes come out directly behind his chair < 1231086824 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :err. oerjan: what does sinus mean? < 1231086828 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :to stops with numbers like 4 < 1231086833 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i mean i thought it meant what "oid" meant < 1231086834 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: s/fam/farm/ ? < 1231086834 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, hm I see, I thought the multi-keyboard thing was due to having such a large range < 1231086841 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oerjan, farm* < 1231086843 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :which is why i didn't understand why the suffix < 1231086862 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: "bukt" although it is a mistranslation from arabic iirc < 1231086868 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: sinuses are the parts of the human body which connect the nose to the back of the mouth, IIRC < 1231086872 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :or possibly to the ears < 1231086874 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :oh. < 1231086878 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :ACTION doesn't remember the english word < 1231086882 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :but I think that's irrelevant, at least I hope it is < 1231086895 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ohhhhh < 1231086910 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, you could hear 1/16 for the notes at the upper end of the range < 1231086913 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :lol i thought -oid meant like "ball" :D < 1231086931 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :at least I think so < 1231086932 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i've probably reverse-engineered it from ellipsoid < 1231086954 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :makes things more clear. < 1231086959 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :also explains monoids and the like < 1231086959 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric ::D < 1231086965 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i've always wanted a language that can jump through the calls tack < 1231086966 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :so "like a sine", in this case < 1231086976 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, also do you know what the similarity is between organs and MRI scanners? < 1231086977 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :;P < 1231086985 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: is this an attempt to make a pun? < 1231086988 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, yes < 1231086991 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :if so, I utterly fail to get it < 1231086994 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :or maybe no < 1231086995 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :not pun < 1231086997 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :joke yes < 1231086997 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :also "asteroid" could have a ball etymology < 1231086999 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :but not pun < 1231087003 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: oh, "bay" in english < 1231087005 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, "neither is portable" < 1231087018 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: bay? you mean sinus? < 1231087026 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :oh < 1231087031 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ais523 already explained. < 1231087036 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :according to Wiktionary, the Latin word "sinus" has loads of meanings < 1231087039 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :all of which seem to be irrelevant < 1231087039 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :yes. but the use for trigonometric sines is a mistranslation from arabic < 1231087050 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :a(x) { < 1231087050 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric : x = x + 1; < 1231087052 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :A: return x; < 1231087053 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :} < 1231087054 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ok, that would explain a lot < 1231087054 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :ais523: the "See also: sine" at the bottom < 1231087056 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :b(x) { < 1231087058 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric : x = x - 1; < 1231087059 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric : goto A; < 1231087061 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :} < 1231087064 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :guess what b(3) returns < 1231087068 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :also i've known what sinuses are like forever < 1231087068 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :um < 1231087070 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: 2? < 1231087073 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: yep < 1231087081 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, what is the thing about bays and sin() that you are discussing < 1231087085 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :why the fuck did i ask. < 1231087085 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :in a, "x" is now a reference to the first local var < 1231087087 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :I'm unable to figure out what the topic is < 1231087093 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: ick_ec can do that < 1231087093 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :and b has a var in the same position < 1231087095 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :almost < 1231087096 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :so it ends up accessing that < 1231087099 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :and returning it < 1231087116 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :basically, i'm trying to make a language where you can goto/comefrom ----anywhere----- < 1231087127 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :even in in while () < 1231087132 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: don't worry, people on IRC are there to help when you're too lazy to do your own remembering < 1231087137 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :I know it helps me when I'm in that state < 1231087139 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, cool < 1231087139 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :which is quite often < 1231087151 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: well, famously asm works like that < 1231087162 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :well i just had 6 hours of band training < 1231087163 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :as can INTERCAL, fwiw < 1231087167 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :that was kinda tiring. < 1231087168 0 :Epic_Fail_Guy!unknown@unknown.invalid QUIT :Read error: 110 (Connection timed out) < 1231087181 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: I'm not criticising you, it happens to everyone < 1231087182 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :well of course asm works like that < 1231087185 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :just most people don't admit it < 1231087208 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :well yes, but i'm very insecure about my intelligence. < 1231087213 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :hmm < 1231087220 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :not insecure... blargh. < 1231087238 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ACTION bangs head to wall < 1231087244 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric : But how many of us actually run an operating system that Richard Stallman would consider free? < 1231087253 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :a(x) { < 1231087253 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric : while (A: (x -= 1) > 0) { < 1231087254 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric : printf("hello world\n"); < 1231087256 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric : } < 1231087258 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :} < 1231087258 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oh dear, someone mod the article flamebait again < 1231087260 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :b(x) { < 1231087261 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric : goto B; < 1231087264 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric : comefrom A; < 1231087266 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric : printf("x = %i\n", x); < 1231087268 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :B: a(x); < 1231087269 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :} < 1231087271 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :discuss(ting) < 1231087278 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :and yes, that -actually works- < 1231087288 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: would the comefrom only happen if you called B, not A directly? < 1231087298 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :also, what's the precedence of label vs. > < 1231087298 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: i think so, yes < 1231087300 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, how many gNewSense users are there? < 1231087306 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :also, label is high precedence < 1231087307 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :and how many Hurd users are there? < 1231087310 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :so it's A: (...) < 1231087313 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :add them toegether < 1231087313 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: I don't know, but I'd guess less than use Ubuntu < 1231087316 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :together* < 1231087320 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :haha, "dynamic comefrom scope" < 1231087326 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: yes < 1231087330 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, well that is the answer to But how many of us actually run an operating system that Richard Stallman would consider free? < 1231087336 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: latin "sinus" means "bay" < 1231087349 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i like how you have to do the goto B; thing so that you never land on it directly < 1231087350 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: I was commenting more on the fact that Slashdot are trying to inspire debate about a contentious topic, than the actual question < 1231087356 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :hmm < 1231087358 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ehird: please use that term in the spec like it's a standard term, not explaining further. < 1231087359 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :I should have no return < 1231087364 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: what happens if you hit a comefrom directly? Nothing, like in INTERCAL? < 1231087368 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :just a way to get a reference to the label of the caller < 1231087370 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :to go to it < 1231087375 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :also, "pocket", "curve", or "bosom", says wp < 1231087376 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :and a way to assign to the right variable in the caller < 1231087380 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :also, gerund comefroms plz < 1231087382 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: hmm < 1231087391 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric : i like how you have to do the goto B; thing so that you never land on it directly < 1231087392 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :hm < 1231087399 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: hitting {comefrom A;} directly goes to A < 1231087400 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :just an idea... < 1231087402 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :comefrom +; < 1231087405 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :so that the rest runs, but you do _come from_ A < 1231087408 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :a+=1; b-=1; < 1231087416 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :+ isn't a label < 1231087417 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: haha < 1231087424 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: no, that's what I meant by gerund comefroms < 1231087430 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :maybe < 1231087434 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: i dont' get it < 1231087436 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: i will < 1231087437 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :gerund nextfrom would be more useful, actually < 1231087447 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, conditional come from? < 1231087448 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :nextfrom +; number_of_additions++; resume 1; < 1231087453 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :I know ick has computed come from < 1231087458 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: just put your comefrom in an if () < 1231087463 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :example: < 1231087465 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: that doesn't work < 1231087468 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, really? that will work? < 1231087468 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :no, it does < 1231087470 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :watch: < 1231087473 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :because you want to be able to jump into the body of ifs, don't you? < 1231087476 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :(warning: this is perverse...) < 1231087481 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ACTION writes < 1231087483 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, yes < 1231087487 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oh, comefroms only become active inside the block they're in < 1231087488 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :so it does work < 1231087495 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ugh, that's worse than INTERCAL < 1231087498 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :wait what? < 1231087504 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :can't you come from anywhere? < 1231087504 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :although arguably leads to more maintainable code < 1231087512 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: yes, but comefroms are dynamically scoped < 1231087516 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :so they're not active all the time < 1231087527 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ais523: well you can probably comefrom into inside a block, if the label is inside the block from where the coming occurs < 1231087536 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :sort of if you write {int a;} {a=1;} in C, you get an error < 1231087539 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, ouch ouch ouch < 1231087547 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: nah, you will be able to jump into them manually < 1231087549 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i mean { ... conditional comefrom A: ... } ... A: ... < 1231087550 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :it just won't happen automatically < 1231087567 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :isn't this _awful_? :D < 1231087571 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: nextfrom too, plz < 1231087576 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :dijkstra is cutting himself in his grave < 1231087579 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :it's just as useful in practice < 1231087580 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: wut < 1231087582 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, what is nextfrom in ick now again? < 1231087588 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: like comefrom, but saves return address < 1231087593 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ah < 1231087593 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :well < 1231087598 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :that should be manual < 1231087598 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: oh so comefrom with a stack? < 1231087599 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :like: < 1231087600 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :CLC-INTERCAL had it first < 1231087601 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: yes < 1231087604 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :exactly that < 1231087612 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: all of my gotos/comefroms/function calls have a "stack" < 1231087617 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :yay < 1231087620 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :in that they can get a reference to the right place to goto < 1231087620 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ais523: i think it's already with a stack, although locals overwrite the top of it < 1231087623 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :from whence you came < 1231087629 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :*stack++ = &this_function_name_goes_here; goto ... < 1231087630 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :thats how you return a value < 1231087632 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :then the other one does < 1231087646 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :goto *(--stack) < 1231087649 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :or something like that < 1231087654 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :looks something like this: < 1231087661 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :well different syntax than that I gues < 1231087665 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :but something like it < 1231087667 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :a(x) { x = x + 5; goto ->; } < 1231087676 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :then < 1231087681 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :so how do you undo the previous comefrom? < 1231087681 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :in intercal, it would be RESUME #4 to undo the last 4 nextfroms, for instance < 1231087681 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :a(1) evaluates to 6 < 1231087685 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oh and yes the #4 can be computed < 1231087687 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: goto ->; < 1231087695 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: uh-oh, that's exactly how gcc-bf actually implements function calls < 1231087699 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :HAHA < 1231087704 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, wait what!? < 1231087715 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :I call goto ->; the "finnish maneuver" < 1231087726 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :because you do it when you "finnish" your function! < 1231087728 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: what, how would you do it? < 1231087732 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :somebody call the pun police < 1231087735 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oerjan! < 1231087740 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, ? < 1231087752 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: well, I had to implement function calls somehow < 1231087753 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, well I haven't considered that < 1231087758 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :I though you used a switch case < 1231087762 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :to select block < 1231087772 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :yes, that's how goto is implemented < 1231087781 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :what was above is how function calls are implemented in terms of goto < 1231087785 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :so there isn't a contradiction < 1231087785 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, oh return you mean < 1231087789 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :call/return, yes < 1231087795 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :right < 1231087803 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :exactly what does goto -> do? < 1231087807 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i explained that. < 1231087815 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, yes but I didn't understand it < 1231087816 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :goto *--TOS < 1231087819 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ah < 1231087819 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :-> is a label reference to the exact point one up in the goto stack < 1231087819 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :right < 1231087820 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ok < 1231087831 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: does it pop the stack at the same time, or does the goto do that? < 1231087831 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :->+1 is two levels up < 1231087835 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :->+10 is ten levels up < 1231087837 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :actually, does the goto pop two levels when returning? < 1231087838 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ehird: will the local variable x, after goto ->;, overwrite whatever local was created last in the calling function? < 1231087839 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :yes, overloading addition on label references < 1231087842 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :it works on every label reference < 1231087844 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :I am so perverse < 1231087852 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :and yes, that means you can do A-2 even if you haven't gone anywhere near A < 1231087859 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: heh, finds the label in the stack, then moves 2 away from it? < 1231087860 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :and get a reference to the point two levels up from A < 1231087864 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, why do you have functions at all? < 1231087866 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: something like that < 1231087871 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: well, good point < 1231087875 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :just do it all with labels < 1231087882 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, too close to basic < 1231087883 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :so < 1231087885 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :no no no < 1231087886 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: presumably the functions are to generate infinite data storage < 1231087888 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :they're nested, scoped labels. < 1231087892 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, oh? < 1231087901 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :well, you need infinite data somehow < 1231087904 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :true < 1231087908 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :nested scoped labels, hmmmmm < 1231087911 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :{ var a = 0; var b = 0; call smth } { smth: var x = 5; goto -> }, what will a and b be after that? < 1231087911 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, infinite next stack < 1231087915 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ehird: ^ < 1231087918 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: that's only one stack < 1231087919 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: lemme look < 1231087930 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, you need to have local variables somewhere < 1231087930 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: a will be 5 < 1231087937 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :because it's on the same position in the local variable storage as a < 1231087938 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and it should be common knowledge here what happens if you only have one stack, and no way to index arbitrarily deep into it so it isn't really a stack < 1231087940 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :pretty muchers < 1231087940 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, also you could just add array variables < 1231087942 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i thinky < 1231087943 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i dunno < 1231087944 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :lol < 1231087945 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: that's cheating < 1231087950 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :this is #esoteric < 1231087954 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :in fact, this thing really fucking confuses me < 1231087956 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, hm true < 1231087958 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i don't get the semantics at all < 1231087963 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :I think it's a huge heap of special cases < 1231087963 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :besides, you can't have infinitely large arrays without bignum dimensions < 1231087966 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ehird: why a? i mean wouldn't b be on top of the stack < 1231087971 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: ok maybe < 1231087972 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :I don't know < 1231087973 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :or bignum numbers of dimensions, I suppose < 1231087981 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :hmm < 1231087985 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :I think we strayed away from this a bit < 1231087987 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :when we got into -> < 1231087992 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :I can imagine a lang where all arrays were indexed 0 to 1, but could have bignum numbers of dimensions < 1231087993 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :let's rewind a bit to the while (A: ...) & comefrom example < 1231087994 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :and go from there < 1231088002 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ehird: no, it's just starting to get interesting < 1231088003 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and anyway, you're just reinventing INTERCAL with a different syntax < 1231088010 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, what is the name of the language? < 1231088013 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: i'm not now, i'm rewinding < 1231088018 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: yes, but let's rewind to get a better picture < 1231088021 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: i don't know! < 1231088039 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, also an idea: cometo < 1231088045 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :like goto and comefrom combined < 1231088048 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :so you do like < 1231088058 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :hmm. < 1231088072 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :{ A: foo; } { B: bar; } { C: A cometo B } < 1231088094 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :so that means it will act as if there had been a "comefrom A" at B < 1231088101 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :dynamically scoped of course < 1231088107 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :18:52… ais523: and it should be common knowledge here what happens if you only have one stack, and no way to index arbitrarily deep into it so it isn't really a stack <<< what do you mean not really a stack? < 1231088108 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, what do you think of that idea? < 1231088108 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: code injection? < 1231088112 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, certainly < 1231088115 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :that's pretty much the definition of a stack < 1231088121 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, non-local effect too < 1231088127 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i like it. < 1231088130 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: if you can index arbitrarily deep without popping, it's basically an array which also has stacklike operations < 1231088139 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: that doesn't really work, it doesn't scale, semantically, methinks < 1231088144 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :will not have any uses, that is < 1231088145 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oklopol, oh? < 1231088149 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: AnMaster; I've been looking for a way to do that in INTERCAL for a while < 1231088154 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :it's possible to do it right now, but hacky < 1231088169 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: what does it mean exactly to act as if it came from A? < 1231088171 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :anyway < 1231088172 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :just adding it as a new command didn't actually cross my mind for some reason < 1231088174 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :a(x) { < 1231088175 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric : x = x + 1; < 1231088176 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :A: return x; < 1231088178 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :} < 1231088180 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :b(x) { < 1231088182 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric : x = x - 1; < 1231088184 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric : goto A; < 1231088186 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :} < 1231088188 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :a(x) { < 1231088190 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric : while (A: (x -= 1) > 0) { < 1231088192 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric : printf("hello world\n"); < 1231088194 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric : } < 1231088194 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: it's effectively self-modifying code, just dynamically scoped < 1231088196 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :} < 1231088198 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :b(x) { < 1231088199 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :so it unmodifies itself when you leave the block < 1231088199 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric : goto B; < 1231088202 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric : comefrom A; < 1231088204 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric : printf("x = %i\n", x); < 1231088204 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ais523: oh, i guess i misread your negations then < 1231088205 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :B: a(x); < 1231088207 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :} < 1231088210 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :let's go from thar < 1231088212 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oklopol, like if C had comefrom A; goto B; but C will never end up on the stack < 1231088214 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :thought you said it's not a stack if you can't access all indices < 1231088228 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :http://www.cobolportal.com/index.asp?bhcp=1 < 1231088239 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oklopol, also if something was comefrom C it wouldn't affect it < 1231088245 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: ohhhhhh < 1231088249 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i misunderstood it < 1231088254 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oklopol, oh? < 1231088256 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :yeah that's an awesome instruction < 1231088261 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oklopol, haha < 1231088267 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :cometo should be an unary operation < 1231088270 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i don't know how < 1231088271 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :well i thought hitting that instruction would somehow flip A on top of stack, then call B < 1231088271 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :but it should < 1231088281 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, well it would be hard to do < 1231088288 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :if you can figure it out sure < 1231088293 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :but yeah, it just says "if, while this block is on stack, you hit A, goto B" < 1231088312 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :I must get back to thinking about DO INEVITABLY < 1231088320 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :which was a primitive which let you implement that sort of thing and more < 1231088324 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :wait < 1231088324 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ais523: finally? < 1231088325 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: < 1231088328 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :it basically meant "do this statement, but not quite yet" < 1231088329 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :that's just < 1231088329 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :"finally {}" < 1231088330 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :comefrom A; goto B; < 1231088332 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :idiots < 1231088335 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric ::D < 1231088336 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oklopol, no no, that would be: "C: camefrom A to B" < 1231088337 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric ::P < 1231088338 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :the statement ran, but delayed a couple of cycles < 1231088339 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :see? < 1231088341 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :you're idiots. < 1231088342 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, what do you think of that one then? < 1231088343 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :listen tomeeeeeeeeeee < 1231088352 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :A cometo B < 1231088353 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :--> < 1231088355 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :comefrom A; goto B; < 1231088359 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric : comefrom A; goto B; < 1231088361 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: that was the hack I was planning to use < 1231088361 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :not exactly < 1231088365 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ehird: yes i heard < 1231088366 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, different < 1231088366 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: that's not a hack :P < 1231088368 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: how < 1231088368 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :it doesn't work, because it disrupts the callstack < 1231088374 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: ok, use nextfrom them < 1231088374 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :you end up with two entries rather than 1 < 1231088375 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :then < 1231088380 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, 1) that will put the location of "goto B;" on the stack frame < 1231088392 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :well that's easy, just destackerize it or whatever < 1231088392 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :if you have separate comefrom/nextfrom, it works < 1231088394 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, 2) it will be affected by any comefrom at the location of comefrom A < 1231088417 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :except in INTERCAL it still doesn't work in all cases, it works for fixed labels A but not for gerunds < 1231088423 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :which is why you need hacks < 1231088428 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, 3) wouldn't this goto B when it was first executed? < 1231088434 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :since it is dynamically scoped < 1231088434 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: just goto out of it < 1231088441 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :hmm... you might be able to manage it for cometo by mixing nextfrom and forget, but not for nextto < 1231088441 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :{ goto X; comefrom A; goto B; X: } < 1231088447 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ah right < 1231088451 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :you don't create a new block of scope < 1231088455 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :so it still applies < 1231088456 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :right < 1231088467 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :just have a way to write "stack functions", that don't work on the normal stack, and that can be called to alter it < 1231088468 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :also AnMaster < 1231088470 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :isnce there's a comefrmo < 1231088473 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :it'd actually goto A < 1231088474 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, still the return issue is unsolved < 1231088474 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :then come from A < 1231088476 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :then go to B < 1231088476 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :unless you do < 1231088478 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric ::D < 1231088495 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :{ goto X; comefrom A; goto B; goto ->; X: } < 1231088502 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: INTERCAL solves that problem by making all stack manipulation implicit < 1231088502 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :yeah < 1231088504 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :that's what I was thinking AnMaster < 1231088514 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :you could just make it a function < 1231088526 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, still this wouldn't work for goto ->+2 < 1231088531 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :cometo(A,B) { goto X; comefrom A; goto B; goto ->+1; X: } < 1231088531 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ais523: and i'm essentially saying maybe you could try making it explicit < 1231088532 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :then < 1231088533 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :or whatever the syntax was < 1231088534 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :cometo(A,B) < 1231088545 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, err, what if B does goto ->+10 < 1231088548 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :then it would be one off < 1231088553 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: modify -> < 1231088555 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :just have it be implicit for the functions that have an explicit view of the stack under them < 1231088556 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :since that code would be skipped < 1231088563 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, what if you can't modify B's code? < 1231088566 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :cometo(A,B) { goto X; comefrom A; -> = -> + 1; goto B; goto ->; X: } < 1231088572 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, AH! < 1231088574 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :also < 1231088575 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :- 1 < 1231088576 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: MWAHAHAHAHAHA :D < 1231088577 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :not + 1 < 1231088578 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :also < 1231088579 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :er < 1231088580 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric : yeah < 1231088583 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :cometo(A,B) { goto X; comefrom A; -> = -> - 1; goto B; goto ->; X: } < 1231088591 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :err < 1231088591 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i think my brain just broke < 1231088592 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :wait < 1231088592 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :no? < 1231088593 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric ::DDDDDDDDDD < 1231088598 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, I'm unsure < 1231088602 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: well, -1 < 1231088604 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i think < 1231088604 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :is best < 1231088606 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ah yes < 1231088608 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :since the stack goes downwards < 1231088611 0 :ais523!unknown@unknown.invalid QUIT :Remote closed the connection < 1231088613 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oh < 1231088613 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :but seriously, what < 1231088615 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :right < 1231088615 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :XD < 1231088618 0 :ais523!n=ais523@147.188.254.120 JOIN :#esoteric < 1231088621 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :cometo(A,B) { goto X; comefrom A; -> = -> - 1; goto B; goto ->; X: } < 1231088624 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :THAT JSUT DOES NOT MAKE SENSE < 1231088627 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric : and even that doesn't solve the problem, because what if the code at B wants to return more than one level at once? It'll have to add 1 to the distance to return, for no reason obvious to it < 1231088632 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: no < 1231088632 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :cometo(A,B) { goto X; comefrom A; -> = -> - 1; goto B; goto ->; X: } < 1231088636 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, I think the goto -> will never be executed < 1231088636 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: aha < 1231088643 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: oh, right < 1231088643 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :it won't < 1231088645 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :you've just added yet another INTERCAL operator < 1231088646 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :cometo(A,B) { goto X; comefrom A; -> = -> - 1; goto B; X: } < 1231088648 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: no < 1231088649 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :that's "FORGET #1" in INTERCAL < 1231088652 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :I'm generalizing the whole control flow thing < 1231088655 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :yes < 1231088662 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :also, intercal isn't quite as hectic as this < 1231088666 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :I still think you're reinventing INTERCAL, though < 1231088667 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :this is completely freeform < 1231088683 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :also < 1231088683 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, what about return values? < 1231088689 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :INTERCAL has no label refs apart from constant ones and -> < 1231088690 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and it's completely freefrom in INTERCAL too, if only because it's sufficiently low-level that "inside expressions" in your lang = "between statements" in INTERCAL < 1231088696 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and wrong < 1231088696 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :as my cometo shows, they can be passed around < 1231088697 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, you could use a global variable for it < 1231088700 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :computed COME FROM < 1231088700 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :like $return < 1231088703 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :or whatever < 1231088703 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: yes < 1231088705 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :that's different < 1231088710 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and you can do computed gotos too < 1231088711 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: no < 1231088712 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :just not directly < 1231088715 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, no? < 1231088716 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :you make it so that the func you returns to < 1231088716 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :it takes a few statements < 1231088717 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric : oerjan! < 1231088717 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :gets teh value < 1231088720 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :on the top of the stack < 1231088727 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, right... < 1231088730 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :givemeatwo() { a = 2; goto -> } < 1231088730 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, example? < 1231088732 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: well, yes, that's the normal way to do call/return in INTERCAL < 1231088733 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :ACTION belatedly puts ehird in handcuffs for punning without a license < 1231088737 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :since a resides on the top of the stack < 1231088741 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, ouch < 1231088742 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :givemeatwo() evaluates to 2 < 1231088746 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :because when you go back, it's still on the top of the stack < 1231088748 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :as the result < 1231088749 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric ::DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD < 1231088752 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :ACTION then gives up reading the channel again < 1231088756 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, err no < 1231088757 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :only difference is that scoping is explicit < 1231088757 0 :ais523!unknown@unknown.invalid QUIT :Remote closed the connection < 1231088761 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: oh yes < 1231088763 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :the goto -> will have popped it < 1231088766 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :nope < 1231088770 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :not using a stack there < 1231088771 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :or is the call stack separate? < 1231088774 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :the value stack stays the same < 1231088776 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :oerjan: the beginning was actually pretty interesting < 1231088778 0 :ais523!n=ais523@147.188.254.120 JOIN :#esoteric < 1231088785 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :[17:05] ehird: well, yes, that's the normal way to do call/return in INTERCAL < 1231088787 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :[17:05] only difference is that scoping is explicit < 1231088790 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :we saw < 1231088795 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ah, I didn't realise < 1231088796 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, ouch that means you will have to remember to pop the stack of any local variables before returning < 1231088799 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :how would you do it < 1231088800 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :of course, i now believe ais523 in that all this is already intercal 101 < 1231088806 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :my connection must have dropped for recieve but not send, for some reason < 1231088812 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :*receive < 1231088813 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: um, let me think < 1231088818 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :hmm < 1231088821 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :just don't do that < 1231088821 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :xD < 1231088823 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: RETRIEVE .2 + .3 + .4 < 1231088825 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :or whatever < 1231088830 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :we're talking about my language, ais523 < 1231088832 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, hm? < 1231088840 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: ok, well INTERCAL gives each variable name its own stack < 1231088844 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, it would make variables kind of useless < 1231088845 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :so you can use them all synchronized for scoping < 1231088847 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: nope < 1231088854 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :just take the variables from your caller < 1231088856 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :or you can have two different interlocking scoping schemes, if you like < 1231088857 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :and put them back before returning < 1231088861 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :you could write a function to do it < 1231088869 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :just do ->-2 in the function, and examine the variables < 1231088870 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, you need to know who your caller is < 1231088871 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :put them on the stack < 1231088873 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :then goto -> < 1231088875 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: you do < 1231088876 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :-> < 1231088877 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :to know what number of variables it has < 1231088884 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :-> is the reference to your caller < 1231088888 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :hm < 1231088889 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ok < 1231088895 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :imagine C where you could write { braceint a = 2; /* a valid */ [ bracketint b = 3; /* a and b valid */ } /* b valid */ ] /* neither valid */ < 1231088912 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, haha < 1231088931 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :INTERCAL's like that, except you can have a practically unlimited number of independent scoping mechanisms < 1231088932 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ais523: i like that < 1231088939 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :(although there are only finitely many variable names) < 1231088943 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :WHAT. A ONE CHARACTER DOMAIN NAME. < 1231088943 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :WANT. < 1231088955 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :oh? < 1231088956 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :wher? < 1231088958 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :*where? < 1231088961 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :Over there! < 1231088965 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, believe it or not, but I actually wanted something like that when doing "serious" programming recently < 1231088987 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ehird: plz show me i can't see. < 1231088991 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: look closer < 1231089004 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: I've said several times before that INTERCAL's control flow is really nice and actually suited to serious programming, just the lang isn't because its expressions are bad and string handling is awful < 1231089010 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :only I didn't think anyone was listening < 1231089022 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, what tld? There are so many now when since ICANN did that thing with them... I can't find witch one < 1231089024 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: is it a whitespace character, by any chance? < 1231089028 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: .cx < 1231089029 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: no < 1231089035 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, ah < 1231089041 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :also, whose was .cx originally? < 1231089045 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :cook islands < 1231089047 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :before it got taken over by goatse? < 1231089048 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :err < 1231089048 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :no < 1231089050 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :that's .ck < 1231089054 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :well, .co.ck < 1231089060 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ah < 1231089061 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :christmas island < 1231089061 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :checkoslovakia iirc? < 1231089065 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :http://en.wikipedia.org/wiki/Christmas_Island < 1231089065 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ah no < 1231089070 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: that isn't even a real country any mroe < 1231089071 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, that should be .xmas < 1231089072 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :IMO < 1231089073 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :it got split into 2 < 1231089077 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :Population < 1231089077 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric : - 2006 estimate 1,493 (n/a) < 1231089079 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, oh right true < 1231089081 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and all country codes are two chars < 1231089082 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: tat makes no sense :P < 1231089097 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, ah true < 1231089137 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, hm for balance I still think you need cometo and gofrom < 1231089143 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :quick! what's your favourite shade of gray? < 1231089146 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :in hex < 1231089147 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :192 < 1231089151 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :in hex < 1231089151 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :c0c0c0 < 1231089160 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and I said 192 before you said in hex < 1231089160 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ACTION don't know < 1231089164 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :darker? :D < 1231089179 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :010101 < 1231089203 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :why would you ask grey especially in hex? < 1231089203 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :#eee < 1231089214 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :actually no < 1231089220 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :because you don't want people to do it the hard way? < 1231089221 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :#fefefe < 1231089227 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :that is my favourite grey < 1231089229 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: that's pretty light < 1231089238 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :lol < 1231089240 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :fefefe shows as white on every screen < 1231089240 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, yes I prefer white over grey < 1231089241 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i think < 1231089244 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :that just about sums up me and AnMaster < 1231089244 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :so light that it would probably go out the other side of white on my screen at some angles < 1231089245 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric ::D < 1231089253 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :19:12… oklopol: 010101 || 19:13… AnMaster: #fefefe < 1231089261 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ha < 1231089261 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :agreed < 1231089274 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :WE'RE THE SAME ONLY OPPOSITES < 1231089275 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :... < 1231089279 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :my screen's weird, it gets darker and darker as you adjust the angle (or lighter and ligher in the other direction), until it goes past the blackest or whitest colour and comes out the other side < 1231089281 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :drinking time -> < 1231089282 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :in inverse video < 1231089283 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oklopol, oh hm, this is some classical symbology(sp?) in that I think < 1231089290 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: that's not odd < 1231089293 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :that's typical LCD behaviour < 1231089295 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :well, yes < 1231089300 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oklopol, like evil and good < 1231089301 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :typical LCD behaviour is weird, though < 1231089302 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :or something < 1231089307 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :(I even know how it happens, to some extent) < 1231089325 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :yes, 010101/fefefe is one of the texts in those jing-jang t-shirts < 1231089327 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, how does it happen < 1231089330 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :I don't know < 1231089336 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: do you know how an LCD works? < 1231089338 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oklopol, "jing-jang t-shirts"? < 1231089346 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: it's ying/yang in English, if that helps < 1231089347 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, yes < 1231089348 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: t-shirts with the symbol. < 1231089353 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :hmm < 1231089354 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :right, ofc < 1231089356 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, it helps slightly < 1231089359 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :well, Yin/Yang < 1231089368 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :I prefer ping/pong < 1231089368 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: well, it's to do with the screens not being infinitely thin < 1231089386 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :so if you see them at an angle, the polarisation twisting isn't lined up perfectly < 1231089394 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :right < 1231089404 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :different voltages affect the amount of twisting to produce different colours, so it's possible you can twist more than 90 degrees and come out the other side of black < 1231089405 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i don't believe in polarization, i think. < 1231089407 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :that I know of, though this one has a pretty good viewing angle < 1231089419 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :if a weird viewing angle is rotating it too far < 1231089427 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :I need to go around 80 degrees before I notice anything < 1231089428 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i haven't decided really, but that sounds like something i don't have to believe in < 1231089435 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: it must be a good thin one then < 1231089440 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ACTION licenses his stuff under Creative Commons Attribution 1.0 Generic < 1231089442 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :because he is oldschool < 1231089444 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: do you have a calculator? < 1231089446 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :and because newer versions are useless < 1231089450 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, a 21" 1400x1050 TFT < 1231089452 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ais523: yes < 1231089463 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: if you don't believe in polarisation, how can you see the numbers on it/ < 1231089471 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, also it isn't inverted video even at 90 degrees < 1231089471 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ais523: by looking < 1231089484 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: have you ever looked at your calculator through a polarising filter? < 1231089485 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :or close to that anyway < 1231089485 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :doesn't involve polarizing anything afaik! < 1231089488 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: don't ever start making sense <3 < 1231089495 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ais523: think i believe in those? < 1231089496 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric ::D < 1231089497 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :from inside another calculator would do, although it's a bit hard to climb inside them < 1231089505 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :they're just slightly shaded glass < 1231089527 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: if you have two polarising filters next to them, and start rotating them < 1231089532 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :then it becomes clear they aren't shaded glass < 1231089548 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, you think oklopol is serious? < 1231089557 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :actually, that would be ehird's comment to me < 1231089559 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :heh < 1231089567 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oklopol is serious < 1231089569 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ais523: well. that's a bit hard to explain ;=) < 1231089569 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :that's the thing. < 1231089573 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, hm < 1231089578 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :I GUESS WE'LL NEVER KNOW WHY THAT HAPPENS. < 1231089588 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :there are lots of things you can more or less get away with not knowing, or not agreeing with whilst being wrong < 1231089588 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :maybe i should open my rwh now < 1231089595 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oklopol, do you believe in Star Trek? < 1231089631 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :rwh? < 1231089632 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :wtf is that < 1231089639 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ais523: true. but science isn't exact, knowing it might be useless if it happens to be wrong. < 1231089646 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :real world haskell < 1231089648 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :well, yes < 1231089650 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :so i say why bother < 1231089650 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ah < 1231089653 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :! < 1231089657 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oklopol, do you believe in Star Trek? < 1231089668 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :well okay, i guess i should believe in polarization, because it's so effing cool < 1231089672 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :anyway, I'm an engineer, and engineers know things that tend to work in practice are often useful even if they are wrong < 1231089679 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i'll believe it's a close approximation of how light works < 1231089693 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :heh < 1231089717 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i hate... < 1231089719 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i hate things < 1231089723 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ais523: well, an abstraction can't really be "wrong" < 1231089726 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, anyway the color issue is much larger on laptops than desktop TFTs in my experience < 1231089728 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :no idea why < 1231089737 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :you might just realize it's a bad abstraction < 1231089742 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :and call it wrong < 1231089747 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :well, I suppose so < 1231089750 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :but if it was once useful, probably it's still useful < 1231089755 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :polarisation's just statistical behaviour anyway < 1231089756 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, do you know? < 1231089759 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :but one which is nice to know about < 1231089761 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :of course < 1231089765 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :all physics is < 1231089771 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: I'd guess the screens are better-quality on desktop TFTs < 1231089777 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :well not all physics. < 1231089780 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, hm. < 1231089780 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :but kinetics and the like < 1231089784 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :grrrrrrrrrrrrrr < 1231089838 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, I do notice colour shift at the edge for certain slightly off white values, need to be around 254,254,254 before I notice it though < 1231089847 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :but very very slight < 1231089861 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :who wants to stop things sucking????? < 1231089864 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, in other aspects this monitor is really low quality :( < 1231089875 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, like the foot of it, not very well adjustable < 1231089887 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :or the fact it is VGA only, no DVI < 1231089895 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ais523: do you play chess? < 1231089902 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :I used to, although I haven't for ages < 1231089919 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :I was the captain of the house chess team, and played for the school first team < 1231089924 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :but I haven't played for about 4 years now < 1231089926 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :so you're awesome? < 1231089934 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :my brother's much better than I am < 1231089942 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and sort of lapsed-decent, rather than awesome < 1231089948 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :I'm awful at chess. < 1231089949 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :Awful. < 1231089949 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :really out of practice < 1231089951 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :wanna teach me the art? < 1231089966 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :wait < 1231089971 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: you're not perfect at something? < 1231089973 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :holy shit < 1231089974 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :you can get a lot better at chess by not making mistakes < 1231089988 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :in fact, I think that gets you right up above grandmaster level < 1231089994 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :lol < 1231089994 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :the mistakes just get more subtle as time goes on < 1231089997 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ehird: i'm actually relatively bad at games where every move can get you killed < 1231090001 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :hmm... chess is like NetHack in that respect < 1231090008 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :the more robust the better i get < 1231090014 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i'm like an anticomputer at games < 1231090020 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :proto: chess, the FPS < 1231090028 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: how? < 1231090037 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: if i knew that it wouldn't be a proto < 1231090042 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ACTION games little enough that they had to think about the acronym... < 1231090055 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: even you aren't that fast at coding < 1231090056 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ais523: oh, that wasn't a joke? < 1231090099 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i mean < 1231090105 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :the reason i can't do chess is < 1231090114 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :it wasn't much of a joke < 1231090116 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i think like 7 plies ahead < 1231090125 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :then move the last piece in my train of thought < 1231090126 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :generally speaking, the person who loses a game of chess is the first to make a mistake < 1231090130 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :unless the other makes a bigger mistake later < 1231090131 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :because at that point i've solved the situation < 1231090136 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and heh, I do that as well < 1231090141 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :although not 7 ahead < 1231090141 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :and lose my concentration < 1231090145 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :well. < 1231090147 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i meant many plies < 1231090159 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :7 was just a random number < 1231090164 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :I'm no good at visualising more than about 2 plies < 1231090171 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :I -can't- think ahead. :P < 1231090191 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :heh, once I wrote a tic tac toe solver whose objective was to beat itself < 1231090195 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: you're forked, then < 1231090196 0 :kar8nga!unknown@unknown.invalid QUIT :Connection timed out < 1231090201 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :(when it looked ahead (brute-force), it played against itself) < 1231090212 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ehird: that's how you always do it < 1231090213 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :naturally, it was pretty awful < 1231090216 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: nope < 1231090223 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :because it only ever tried to be better than itself < 1231090224 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :that's the way to brute-force games < 1231090227 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :it's a recursive issue < 1231090247 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: it depends on what the evaluation function was < 1231090256 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :but for noughts-and-crosses, you can analyse until the game ends < 1231090272 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: basically, "if I beat or tie myself, this is a good solution" < 1231090280 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :but since that's the definition of itself, it kind of sucked < 1231090295 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, still have the code? < 1231090302 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :nah < 1231090304 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :I think it would always end at a draw < 1231090309 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :um, no shit < 1231090309 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: that's actually the best possible (if not fastest) algorithm if you brute-force to the end and know whether a position's won, lost, drawn or unfinished < 1231090310 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric ::P < 1231090312 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :hmm. i don't understand how that's different from just brute-forcing the perfect solution < 1231090322 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: i think you misunderstand :D < 1231090328 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: because it doesn't fight against every possibility < 1231090331 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :just every possibility that is tried < 1231090338 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :and yet that's how you determine what to try... < 1231090346 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: if it's brute-forcing, it does try every possibility < 1231090347 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :huh? < 1231090350 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :so what does top-level try? < 1231090355 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: nope, it didn't < 1231090361 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :what happens when first move happens? < 1231090364 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :happen happen < 1231090366 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :then you aren't brute-forcing, so what are you doing? < 1231090370 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: i wish I knew < 1231090382 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :hmm, cgit's template files are c files < 1231090386 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :that's disappointing < 1231090394 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :isn't taking the middle square the best first move in tic tac toe? < 1231090400 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :well. the idea is brute-forcing, maybe you're just fucking it up somehow ;) < 1231090460 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :http://hjemli.net/git/cgit/tree/ui-log.c :( < 1231090465 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: it doesn't matter which square you take < 1231090476 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: errr yes ti does? < 1231090477 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :it's a draw for all 9 possible starting moves < 1231090493 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :although if you start in a corner, the opponent has to reply in the middle to avoid losing < 1231090498 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :right but with the middle you have more of a chance of -winning- against an idiot < 1231090508 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ah < 1231090517 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: only if you assume the idiot plays in the middle given the chance < 1231090526 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :even idiots do that. < 1231090526 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :if you play in the corner, the idiot has 7 losing moves and only 1 drawing move < 1231090533 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :if you play in the middle, the idiot has a 50/50 chance < 1231090537 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :same if you play at an edge < 1231090538 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :hm. < 1231090553 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :hm < 1231090589 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :how many possible tic tac toe games are there? < 1231090597 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :few hundred thousand < 1231090598 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :I think < 1231090600 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :nine factorial < 1231090602 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :less if you discard symmetrical ones < 1231090608 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :hm < 1231090608 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :so yes, about a few hundred thousand < 1231090609 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :right < 1231090612 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :362880 < 1231090614 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :except < 1231090616 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :if you discard symmetry, it's less than 100 IIRC < 1231090617 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :nine factorial is an upper bound < 1231090618 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :less if you discard duplicates. < 1231090632 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: oh, because the games can end before all the squares are filled/ < 1231090636 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :not all games only after last move < 1231090641 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ais523: yes < 1231090646 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :... < 1231090648 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, even when the other person don't play perfect? and when you consider taking a first then b or b first then a different? < 1231090650 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :not all games *fucking end* only after last move < 1231090656 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :though both could lead to the same end result < 1231090668 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :and what oklopol said < 1231090682 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: the one that was incorrect or the one with fuck? < 1231090684 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: yes and no to your two questions < 1231090717 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i mean if you meant the first one, why would you quote a broken sentence? and if you meant the latter one, please don't swear, it's not your style < 1231090720 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oklopol, the latter < 1231090750 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: say fuck < 1231090762 0 :tyrelle!unknown@unknown.invalid PART #esoteric :? < 1231090770 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ACTION wonders whether to surprise everyone by saying lol < 1231090772 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, why would I? < 1231090773 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :yes of course nine factorial is a pretty loose upper bound also because the order doesn't matter < 1231090778 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: novelty < 1231090779 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, you just did < 1231090786 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i mean < 1231090786 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, not when you told me to < 1231090789 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: I've typed it before, but only in quoted contexts < 1231090791 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: don't say fuck < 1231090796 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :I haven't actually used it, just mentioned it < 1231090800 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :not taking order into account isn't even much harder than taking the factorial < 1231090801 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, too late, I don't fall for that trick < 1231090812 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, ah right < 1231090816 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :you just take 4 out of 9... < 1231090820 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :I only ever quote the word too < 1231090822 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :I think < 1231090824 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :of course I know of the existence of lol < 1231090829 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :I think I used "lol" once really < 1231090830 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :same verb character in j < 1231090832 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :just people don't use it with its intended meaning < 1231090835 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :only dyadic vs. monadic < 1231090837 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :so it's become meaningless recently < 1231090864 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :sometimes I do laugh out loud; I have been for about 5 minutes now (good thing there's nobody else in here) < 1231090868 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :also < 1231090873 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :but "lol" is no longer a good way to express that < 1231090874 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :the correct answer isn't 9! < 1231090877 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :the correct answer is: < 1231090892 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :"as long as there are humans or other creatures to play it there can be more" < 1231090893 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: Of course it isn't, there are more than 9 games! < 1231090893 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric ::P < 1231090909 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :wut < 1231090910 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, that was ! as in factorial < 1231090914 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: no shit < 1231090919 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :way to ruin his joke < 1231090922 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, lame joke yes < 1231090929 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :oh as a joke. < 1231090934 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :I never said unique games :P < 1231090947 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :also < 1231090949 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :wtf is this < 1231090956 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :and really < 1231090959 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ACTION looks at the SQL statement < 1231090966 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :9 choose 4, *not* nine factorial < 1231090984 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :you can tell I was joking due to the capital letter at the start of the sentence, the joke didn't work without it < 1231090987 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :it's like one character longer, and seven billion times smaller. < 1231090992 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and I rarely do that normally < 1231091020 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :hmm... maybe we should come up with a new IRC convention, which states that correct capitalisation and punctuation indicates sarcasm < 1231091025 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :17:19:29 PESOIX? < 1231091025 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :17:19:33 <-- new < 1231091027 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :-- 2005 < 1231091029 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ais523: it already does imo < 1231091030 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :I mean, completely correct, initcaps and fullstop at the end < 1231091064 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :well, not completely correct, but that's one standard way to indicate you're not being serious, if you don't do that normally < 1231091140 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :btw < 1231091141 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :>>> !9 < 1231091141 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :362880 < 1231091141 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :>>> 4!9 < 1231091141 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :126 < 1231091153 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: teach me j < 1231091157 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :err < 1231091159 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :in ssql < 1231091160 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :sql* < 1231091166 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :what is the ORDER BY to sort backwards < 1231091173 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: DESC < 1231091174 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :I forgot the keyword < 1231091176 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :desc/asc < 1231091177 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ah thanks < 1231091187 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :wait... < 1231091195 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :actually that upper bound actually isn't correct < 1231091198 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :but for a moment, I thought you were correcting ehird, saying that ehird really meant to ask oklopol to teach him J in SQL < 1231091201 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :once you take into accound games can end prematurely < 1231091205 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :which would be weird < 1231091224 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: i thought AnMaster thought oklopol was showing AnMaster some code that he'd asked for < 1231091225 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :blah. is suck at translating reality into math < 1231091228 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :and he wanted it in sql instead < 1231091238 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :err? < 1231091239 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :what? < 1231091243 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: desc < 1231091243 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :nothing. < 1231091248 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, no I'm multitasking < 1231091250 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :asc/desc, asc is implicit < 1231091257 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :also ais523 said that already < 1231091263 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :wait, I'm trying to follow the threads of conversation here < 1231091266 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :great it didn't sort correctly when selecting from the sorted view < 1231091268 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :wonder why < 1231091276 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :it's almost feels as if there are two conversations < 1231091279 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :only they're impossible to separate < 1231091284 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ais523: there are always multiple < 1231091290 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :yes, but rare for them to get this intertwined < 1231091300 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :21:04:58 It would be more esoteric to make pop-from-empty-stack read from stdin :) < 1231091302 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :-- 2005 < 1231091306 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :it's like befunge < 1231091329 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :that's not esoteric < 1231091331 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :what, on division by 0? < 1231091334 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: yep < 1231091337 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :"why not have the arguments of the program in the stack!!" < 1231091341 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :well < 1231091344 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :not arguments < 1231091346 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and <> reads from stdin on Perl when it runs out of argv < 1231091347 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: thats not related < 1231091348 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :it means like < 1231091353 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :but if you consider stdin the args to the program < 1231091359 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :"The stack is empty. What value should be on top?> " < 1231091361 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :oh, from any stack? < 1231091365 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :yep < 1231091369 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ah. < 1231091385 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :hm, < 1231091394 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :is INNER JOIN or LEFT JOIN fastest in general? < 1231091401 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :all those join types confuse me < 1231091403 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :well then that's just an object that has two separate uses, which are intertwined to make it very error-prone < 1231091405 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: inner IIRC < 1231091407 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :so yeah, pretty eso < 1231091410 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :because it doesn't have to compare against NULL < 1231091414 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :but they do different things < 1231091430 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, all columns are NOT NULL, and in my case they end up doing the same result < 1231091430 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :if you're asking which is fastest, either you're doing something really weird or you aren't thinking about the problem < 1231091436 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :you know what sucks? < 1231091439 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oh, then they should take exactly the same length of time < 1231091440 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :navigation < 1231091445 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :navigation should be implicit < 1231091446 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :always < 1231091446 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :if you have at least a half-decent database engine < 1231091466 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :inner is faster for the same reason ++i is faster than i++ < 1231091477 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, except this is mysql (eww yes I know, I hate it, not my choice), and EXPLAIN says INNER JOIN here doesn't use the indexs < 1231091480 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :which is very strange < 1231091483 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :the question is how you implicitify navigable aids without making a separate form for them. < 1231091485 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :while left join does < 1231091491 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: MySQL's optimiser is strange, it seems to pick at random < 1231091497 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :what happens if you add a FORCE INDEX to it? < 1231091497 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, yes I agree < 1231091508 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, SQL error... let me try again < 1231091521 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :I never can remember exactly where you're supposed to put it < 1231091548 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :hmmm. < 1231091555 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i don't think form is inherently navigable. < 1231091556 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, actually if I add a WHERE = first explains says they are the same < 1231091562 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :this make really no sense < 1231091568 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :makes* < 1231091619 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: is it a small table? < 1231091633 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, currently yes, expected to grow a lot in the future < 1231091634 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :on small tables, MySQL sometimes randomly decides that using an index isn't worth the bother < 1231091638 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and often it's actually right < 1231091651 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :it would be nice to have an EXPLAIN ON HYPOTHETICAL BIG TABLE SELECT < 1231091657 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :yes it would < 1231091681 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :huh < 1231091686 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :now this is just crazy < 1231091701 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :1 SIMPLE history ref tid,pid pid 4 const 2 Using where < 1231091714 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ACTION tries to change join type < 1231091731 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: well, const is a pretty useful join type to have < 1231091741 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :it's the second-fastest < 1231091753 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, which one is the fastest then? PRIMARY I assume? < 1231091761 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: no, the type where the table only has one row < 1231091763 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :or zero < 1231091766 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :well thing is... I *only* select on primary keys < 1231091773 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :in this case < 1231091774 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :PRIMARY's not a join type, it's a key type < 1231091785 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :and join on "not primary -> primary" < 1231091790 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, true < 1231091795 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :but primary index should be the fastest < 1231091803 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: not on MyISAM < 1231091812 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :all indexes are equally fast there IIRC < 1231091820 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, innodb since I need foreign key constraints < 1231091825 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :I hate mysql and innodb < 1231091826 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oh, primary is fastest there < 1231091835 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :SELECT history.revid, history.tid, text.uid, text.timestamp, text.title, user.realname FROM (history INNER JOIN `text` ON (history.tid = text.tid) INNER JOIN user ON (text.uid = user.uid)) WHERE history.pid = 4 ORDER BY history.revid DESC < 1231091836 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :btw < 1231091842 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :InnoDB is too much trying to be like other database engines, IMO < 1231091854 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, I would much prefer postgresql < 1231091858 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :they should stick to MyISAM which is not a database in the conventional sense, but is nonetheless useful < 1231091875 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, anyway can you see anything obviously stupid in the above query? < 1231091895 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :I guess I can let this pass for now... < 1231091900 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :that should be 3 const lookups, one using where < 1231091903 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :which should be very fast < 1231091912 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :unless you have duplicate pids in the history table < 1231091922 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :or duplicate tids in text, or duplicate uids in user < 1231091922 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, yes that can exist < 1231091928 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :no duplicate tids though < 1231091936 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :nor uids? < 1231091936 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :pids in history can be duplicate < 1231091948 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :no other key I'm testing on can be < 1231091951 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :in that case, it should be const/const/const, with affected rows (small number), 1, 1 < 1231091954 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, oh yes they are dup < 1231091958 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :in the text tample < 1231091960 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :which is very fast < 1231091961 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :table* < 1231091967 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :so no, nothing looks wrong with that < 1231091967 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, sorry for that < 1231091972 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :id select_type table type possible_keys key key_len ref rows Extra < 1231091972 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :1 SIMPLE history ref pid pid 4 const 2 Using where < 1231091972 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :1 SIMPLE text eq_ref PRIMARY PRIMARY 4 vcms.history.tid 1 < 1231091972 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :1 SIMPLE user eq_ref PRIMARY PRIMARY 4 vcms.text.uid 1 < 1231091975 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :is what it says < 1231091994 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :that's a good query < 1231092001 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, and sorry, text.uid and history.pid can be dup < 1231092008 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ref const, eq_ref primary, eq_red primary < 1231092017 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :three O(1) queries joined < 1231092021 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :well, O(number of results) < 1231092026 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, where are those abbreviations explains < 1231092031 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :which is much faster than O(size of database), which is what slow queries are < 1231092037 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :also number of results depend on number of edits on the page < 1231092043 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: there's a whole chapter of the MySQL docs about it < 1231092054 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :also, you can't possibly get faster than O(n) in the number of results, for obvious reasons < 1231092063 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :well yes < 1231092075 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, I expect at least quite a few results. < 1231092098 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :you can't optimise that any faster in computational class terms, so don't try < 1231092110 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :micro-optimising is just not worth it < 1231092127 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :true < 1231092143 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, I agree < 1231092143 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :I was just confused why it didn't want to use indexes sometimes < 1231092157 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: because the table was so small that a full table scan was faster than loading the indexes < 1231092224 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, true I don't have a lot of entries yet since I'm continually changing the schema when I find bugs < 1231092237 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :so I have an sql file that I change then import that resets the database < 1231092255 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, also what about longtext type, is it sane for using to store pages in? < 1231092267 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :longtext is too long < 1231092269 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :try text. < 1231092269 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :I have been unable to find info about that in the mysql docs < 1231092271 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :I'm not sure, but I think so < 1231092276 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :err left join was join + keep all entries of leftie, inner was just join? < 1231092277 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :longtext is for pretty massive pages < 1231092287 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: yes, pretty much < 1231092288 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, hm isn't text like 32 kb? < 1231092296 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i think mor < 1231092297 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :e < 1231092302 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ACTION looks < 1231092304 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :64 kb probably < 1231092311 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :as MySQL like using whole numbers of bytes < 1231092316 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :well < 1231092322 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :I need more than that < 1231092328 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :what are you storing < 1231092330 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and 64 KiB = a two-byte length < 1231092336 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, wiki pages < 1231092342 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :64 kb is enough. < 1231092345 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :if it isn't, fix your pages :P < 1231092354 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, well ever looked at gentoo wiki? < 1231092357 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: what if they have embedded data: URLs to images? < 1231092361 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :yes, and I never looked again, AnMaster < 1231092370 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, some are over 100 kb < 1231092372 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :quite a few in fact < 1231092374 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :yes. fix that. < 1231092390 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :well, long text it is, though this isn't gentoo wiki < 1231092420 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :sql doesn't have an infinitely extending type? < 1231092427 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :or am i completely out of context < 1231092428 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :no. < 1231092447 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :(i don't really know much about practical db's, as should be obvious) < 1231092458 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: what do you think about my work in progress db? < 1231092461 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :it serializes objects to a graph < 1231092464 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :GRAPHS < 1231092467 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :FUCKING GRAPHS. < 1231092470 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :you love graphs. < 1231092484 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :(except queries, but of course just the actual query syntax) < 1231092495 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :graphs are pretty awesome < 1231092509 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :exactly < 1231092514 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :well < 1231092523 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :contact me the day when the product is ready :P < 1231092531 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :go to hell, practical jackass. :| < 1231092565 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :yeah, who wants to finish a program when you already know how to do it < 1231092566 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, hey I was all for your comefrom/goto lang < 1231092570 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :and I still am < 1231092575 0 :kerlo!unknown@unknown.invalid PRIVMSG #esoteric :I hate doing things I already know how to do. < 1231092588 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :kerlo, like eating? < 1231092593 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :kerlo: yeah they're almost as bad as things i don't know how to do < 1231092603 0 :kerlo!unknown@unknown.invalid PRIVMSG #esoteric :Well, eating is an exception. It's an instant gratification thing. < 1231092611 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ah < 1231092615 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :kerlo, sleeping? waking up? < 1231092626 0 :kerlo!unknown@unknown.invalid PRIVMSG #esoteric :I hate doing both. :-) < 1231092634 0 :kerlo!unknown@unknown.invalid PRIVMSG #esoteric :Well. < 1231092643 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :I hate eating, sleeping and waking up, but not messing around on IRC < 1231092659 0 :kerlo!unknown@unknown.invalid PRIVMSG #esoteric :Yeah, messing around on IRC is fine because you don't have to actually do anything. < 1231092677 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :well at least you don't have to achieve anything. < 1231092681 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ok this is evil, a wiki that requires users to use valid xhtml 1.1 syntax (filtered to a safe set of whitelisted tags, attributes and attribute values) < 1231092682 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric ::) < 1231092689 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :no horrible wiki syntax thing < 1231092697 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :markdown isn't horrible < 1231092697 0 :kerlo!unknown@unknown.invalid PRIVMSG #esoteric :Unfortunately, I have obligations. < 1231092698 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :xhtml 1.1 is < 1231092705 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :therefore, fail < 1231092708 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, well I was thinking of mediawiki syntax < 1231092717 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: the requirement for valid xhtml 1.1 is so it can be filtered more easily? < 1231092718 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :also for extra eww this is coded in php < 1231092726 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :please die. < 1231092727 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric ::) < 1231092731 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, no because otherwise firefox renders it badly < 1231092734 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, like "error" < 1231092740 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :when you send the correct mime type < 1231092741 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :and such < 1231092747 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: yes, I know < 1231092751 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :but I mean, why did they pick XHTML < 1231092754 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :not, say, HTML? < 1231092759 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :my guess is so it's easier to filter < 1231092761 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: AnMaster loves XHTML because it's newer. < 1231092763 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, s/they/me/ < 1231092767 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :what am postel's law? what am server-side filtering? < 1231092771 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :what am intelligence < 1231092775 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, also it is easier to filter < 1231092786 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: yes, what /am/ postel's law? < 1231092793 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :also < 1231092798 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: what am google < 1231092800 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :although "what am intelligence" seems surprisingly philosophical < 1231092801 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :all the layout is in css 2.1 < 1231092802 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric ::D < 1231092812 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :no tables for layout < 1231092819 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :only tables for actual tables < 1231092831 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :not even tables for form layout < 1231092837 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :no shit < 1231092839 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :you're so unique < 1231092842 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: how do you enforce that rule? < 1231092843 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :never mind that 500 other people do that. < 1231092844 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, sadly I am < 1231092856 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, I don't, but I mean the software in itself < 1231092872 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :iirc even mediawiki use(ed?) tables for login form < 1231092880 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :s/ed/d/ < 1231092916 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :yep it does < 1231092918 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric : < 1231092918 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric : < 1231092918 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric : < 1231092919 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric : < 1231092921 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :and so on < 1231092922 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :s/\((.*\?\)/$1/ < 1231092931 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, hah < 1231092937 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :not sure if it still does < 1231092956 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, that was from en.wikipedia < 1231092962 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :like 10 seconds ago < 1231092973 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, maybe it doesn't in trunk < 1231092977 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :but on wikipedia it does < 1231093006 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: I doubt they've fixed it < 1231093019 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :changing one CSS identifier in MediaWiki causes people to kick up a stink sometimes < 1231093029 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, btw: http://rafb.net/p/LWWpzm49.html < 1231093032 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :"You should have consulted the community before messing up all our non-robust scripts!" < 1231093042 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, that is my login form, that renders the same way < 1231093045 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :also < 1231093053 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :yes mediawiki themeing is a mess < 1231093054 0 :oerjan!unknown@unknown.invalid PRIVMSG #esoteric :what am grammar < 1231093059 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :no Captcha? < 1231093059 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :it should be just changing a css file < 1231093063 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, not for login < 1231093066 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ah, ok < 1231093078 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, for register there is such support, but register isn't coded yet < 1231093095 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: you're actually building a wiki that requires completely valid, whitelisted xhtml 1.1 as its page input? < 1231093100 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :as in, register.php is: < 1231093100 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :wow, you're more idiotic than I previously thought possible < 1231093113 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, not my choice, this is for a school course < 1231093113 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :actually, I like the idea < 1231093126 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :although it would be for different purposes than Wikipedia, say < 1231093127 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: I am sure "completely-valid XHTML 1.1" is your choice. < 1231093134 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, yes... < 1231093136 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :Also, I really don't care who likes the idea, because it's a bad one. < 1231093143 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, oh and it uses object orientation in php < 1231093144 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :instead of a quick-edit anyone-can-join wiki, it would be a lets-use-this-to-maintain-a-website wiki < 1231093148 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :NOT my choice < 1231093152 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: so do lots of other PHP programs < 1231093156 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :true < 1231093159 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :Maintaining a website in XHTML 1.1 is grounds for the death penalty. < 1231093162 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :but php OOP is horrible < 1231093164 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ever used it? < 1231093175 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, btw my login form css basically works similar to this: http://www.websiteoptimization.com/speed/tweak/forms/ < 1231093177 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :no, but I've tried to read code that uses it < 1231093185 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :except not px but em for the sizes < 1231093191 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :to make it scale correctly < 1231093193 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: maintaining a website in XHTML is taking all the suffering onto yourself for the good of the rest of the world < 1231093198 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :writing in plain HTML is being selfish < 1231093199 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: no, there is no good < 1231093204 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :there are no exceptions to postel's law < 1231093214 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: writing in XHTML /is/ postel's law < 1231093222 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :it's not < 1231093229 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :wtf is postel's law < 1231093229 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :? < 1231093233 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :it is, because it's very strict and easy to parse for other programs < 1231093234 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :google it. < 1231093242 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :valid, well-formed, XHTML 1.1 is no more cleaner and easy to process than the same with HTML 4.01 < 1231093246 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: check on Wikipedia, which calls it something else but has a redirect < 1231093247 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :so sorry, that's just bullshit. < 1231093249 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :hm < 1231093252 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: and yes it is, you can't process HTML with CSLT < 1231093255 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :*XSLT < 1231093268 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :except you shouldn't process with XSLT, one because it sucks ,and two because it violates postel's law < 1231093283 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, I don't do that, but it would be nice to allow < 1231093316 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, also the code is made so it would be easy to plug in a wiki-syntax engine < 1231093320 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :in the page render function < 1231093322 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :if you wanted < 1231093331 0 :Corun!unknown@unknown.invalid QUIT :Read error: 110 (Connection timed out) < 1231093346 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :two places only, vcms_page->preview(); and vcms_render->render() < 1231093348 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :;P < 1231093371 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oh and never touch page id -1 because that means it is some internally generated page, like the login page < 1231093378 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :but yes quite simple < 1231093491 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: do you favour Postel's Law for everything, or only for internet communications? < 1231093499 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :do you favour it for, say, functions inside a C program? < 1231093515 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: It is complicated. < 1231093526 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, I don't think so, he claimed he disliked "defensive coding" recetly < 1231093528 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :recently* < 1231093528 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :For closed-world things -- e.g., functions inside a C program -- it doesn't apply. < 1231093541 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :For open-world things -- e.g., the entry point of a C program, or a website -- it applies. < 1231093550 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :and I tend to agree, though assert() is an exception. < 1231093556 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :it is for debugging < 1231093557 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :One is controlled, the other isn't. < 1231093584 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: I'm currently trying to get a BF interpreter to pass splint strict mode < 1231093592 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :it requires jumping through all sorts of hoops < 1231093594 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, heh < 1231093594 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :http://diveintomark.org/archives/2004/01/08/postels-law < 1231093595 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :http://www.aaronsw.com/weblog/001025 < 1231093597 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :http://www.b-list.org/weblog/2008/jun/18/html/ < 1231093598 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, such as? < 1231093601 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :Read those (in order.) < 1231093603 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :I have an auxiliary /function/ guarded by NDEBUG < 1231093618 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :which checks if argc is larger than a certain value < 1231093622 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and takes argv as an argument and ignores it < 1231093642 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :the function is expressing the fact that argv has argc elements, in a way that splint can understand and verify is correct < 1231093659 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :I have a few NDBUG guarded funcs in cfunge, dumping functions, "clean up on exist to make valgrind output simpler, even though this could be left to the OS" < 1231093663 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :and such < 1231093691 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, but your sounds strange < 1231093696 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, really strange < 1231093700 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :maybe I should paste it < 1231093705 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :I would check argc in main() probably < 1231093712 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :or actually, I would use getopt() < 1231093720 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oh, so do I, but Splint didn't notice it there < 1231093723 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :yes it is POSIX, but I don't care about windows < 1231093725 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and I'm not even getting options < 1231093740 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :I'm trying to persuade Splint that I can read the first command-line arg without buffer overflow < 1231093743 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :The nice thing about dependently typed languages is that you can statically prevent incorrect data. < 1231093761 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :the buffer-overflow checks are a bit primitive, you have to jump through loads of hoops to guarantee to it that you're doing things right < 1231093763 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, hopefully the OS should leave a \0 at the end of it... < 1231093779 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: again, it does < 1231093790 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :but Splint doesn't have a "this is a null-terminated array of strings" annotation < 1231093804 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, well paste that function then < 1231093828 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, also does it have a "this is a null terminated string?" annotation? < 1231093832 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :if yes then doing: < 1231093834 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :e.g., main :: [string] `ofLength` 2 -> io () < 1231093847 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :then (main a = print a) will fail < 1231093848 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :char * argv1 = *argv; < 1231093849 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :would work < 1231093862 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :and then annotating argv1 < 1231093877 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :strange, my web browser's going slow < 1231093881 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :also, I don't think so, strange really < 1231093892 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :because you need to _prove_ to the compiler that you can't pass it non-2 length arrays < 1231093892 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :or rather < 1231093892 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :when you call it < 1231093892 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :you have to prove to the compiler that the array you passed it is of length 2 < 1231093895 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :so in your entry point, you have to check the length of the array < 1231093901 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :before calling main < 1231093907 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, what lang was that? < 1231093911 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: http://rafb.net/p/sRPjBK56.html is the whole program < 1231093916 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: a hypothetical Haskell with dependent types < 1231093919 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :check_argc_argv is the relevant function < 1231093921 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ah < 1231093939 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :dependent types give you immense flexibility and awesome, at the expense of not being able to prove that your compilation will terminate < 1231093950 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :(because the type system == the normal language, and is therefore TC) < 1231093951 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric : /*@*/ ? < 1231093956 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :wtf does that do < 1231093959 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: "This function does not modify any global variables" < 1231093969 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric : assert(argc >= minlength); < 1231093969 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric : /* Splint seems not to know about assert... */ < 1231093969 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric : if (argc < minlength) {abort();} < 1231093978 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :if it doesn't know, why not remove it? < 1231093988 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :it does know about assert, just doesn't notice it for some reason < 1231094025 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, know what? I would give up on splint instead of doing that < 1231094036 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: you don't understand, this is an eso project < 1231094043 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :also the splint project was in practise dead last I checked < 1231094045 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :I have splint's warning levels /way/ above the typical levels < 1231094050 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, ok why? < 1231094054 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :cfunge is designed to be as fast as possible < 1231094061 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :this program is designed to be as Splintable as possible < 1231094067 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :still not perfect, btw < 1231094068 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ah right < 1231094070 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :makes sense < 1231094082 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :it thinks there are some potentially undefined structure fields, and I have to resort to /*@- on occasion and I don't want to < 1231094083 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :/\? < 1231094084 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i think you could get very far by hooking a dependent types layer onto C < 1231094088 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :e.g. < 1231094088 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :as in < 1231094089 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: and < 1231094090 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :/*@requires maxRead(argv) == argc < 1231094091 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric : /\ maxSet(tape) >= 100663378 < 1231094091 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric : /\ maxRead(tape) >= 100663378;@*/ < 1231094094 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, hm ok < 1231094098 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :strange notation for it < 1231094102 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: it's from logic < 1231094104 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :& or && would make more sense < 1231094123 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, well the splint devs were making a program checking C source, maybe C notation would have made sense then < 1231094146 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :also the logic notation is one symbol and not some sort of mini-ascii art of it < 1231094147 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :don't ask me to make Splint make sense < 1231094156 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :although Splint has inspired me to write an esolang, btw < 1231094159 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :void real_main(int argc /**@ == length(array)*/, char **argv /**length(@) == 3 */) < 1231094161 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :or something < 1231094162 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, oh? < 1231094166 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :and then the layer requires you to prove it in calls < 1231094167 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :so < 1231094174 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :which is like C, but impossible to write buggy programs in < 1231094176 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :is the idea < 1231094180 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :well, logic bugs still possible < 1231094184 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, hm details? < 1231094188 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :int main(int argc, char **argv) { if (argc != 3) { ...error... } else { real_main(argc, argv); } } < 1231094189 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :also there are langs like that < 1231094190 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :but memory leaks and buffer overflows and so on impossible < 1231094195 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :and since argc == length(argv) < 1231094197 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and of course there are < 1231094198 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :and argc is verified to be 3 < 1231094200 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :the preconditions are met < 1231094201 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :but the point is, to do it in C < 1231094203 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, BitCC and Cyclone may interest you < 1231094204 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :and the program can compile < 1231094209 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :so you still have to write the free()s and so on < 1231094210 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and bounds checks < 1231094214 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :both are made to be hard to write buggy things in < 1231094215 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :the compiler just verifies they're there < 1231094220 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :and both are C-like < 1231094247 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, hah < 1231094262 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, could be done as a GCC middle end maybe? < 1231094267 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :maybe < 1231094268 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :if such a thing exists < 1231094270 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :I didn't even know it had middle ends < 1231094279 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :the problem is that the front end/back end transition is blurry < 1231094280 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, note what I said after < 1231094290 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :there's a chain of back ends, more or less < 1231094291 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :hm ok < 1231094298 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and the various front ends filter into different places in it < 1231094308 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :even gcc-bf has to interact with the front ends slightly < 1231094308 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, where does mudflap in GCC insert it's calls? < 1231094317 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :to tell them how to send data to the back ends < 1231094321 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :also, I don't know < 1231094333 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, I assume you know what -fmudflap is though? < 1231094337 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :(gcc-bf has to request varargs calls to be sent a certain way, so it can handle them) < 1231094340 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :very useful thing < 1231094342 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: I do, but not how it works < 1231094361 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, inserting lots of canary values iirc and checking every read/write access < 1231094367 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :yes, I mean inside gcc < 1231094370 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :I don't know what it hooks into < 1231094371 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :somewhat like valgrind except it can catch some stuff gcc doesn't < 1231094383 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :err catch some stuff valgrind doesn't < 1231094392 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :like 2 valid variables after each other < 1231094411 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :if both are static valgrind can't check that access doesn't pass from one over to the other < 1231094428 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :yes < 1231094448 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :mudflap can catch that < 1231094451 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :of course valgrind finds stuff mudflap doesn't < 1231094492 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric : /*@-retvalint@ We don't care if fputs fails, we can't do anything... */ < 1231094493 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :wtf < 1231094500 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, why not cast each to (void) < 1231094501 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :instead? < 1231094540 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: hmm... I wonder if that works < 1231094545 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :I've been casting to void elsewhere < 1231094552 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, also: default: continue; /* a comment */ < 1231094555 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :but possibly Splint doesn't let you do that for non-printf functions < 1231094559 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :well is this a C tutorial? < 1231094572 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :I must have phased out there < 1231094577 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :no idea what the comment was meant to say < 1231094583 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oh, no it is right < 1231094587 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :line 195 < 1231094589 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :that case catches comments in the input BF < 1231094600 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oh ok < 1231094606 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :Musings on a static analyzer for C: http://pastie.org/352320 < 1231094632 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :let's make something like Splint that actually works < 1231094638 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: see http://pastie.org/352320 < 1231094641 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, and works for C99 < 1231094653 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: I have < 1231094655 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :that's very splint-like < 1231094661 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :yes, but more general < 1231094661 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :and sane < 1231094663 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, and can handle ## in macros < 1231094668 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :[and compile-time turing complete :DDDDDD] < 1231094692 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: and trigraphs? < 1231094699 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :(N.B. I haven't tried to run Splint with trigraphs) < 1231094699 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, I don't use them < 1231094704 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :neither do I normally < 1231094709 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, what about digraphs? < 1231094712 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :besides, you're in C99, you have digraphs now < 1231094712 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :they exist too iirc < 1231094713 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :in C < 1231094718 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ah that is C99? < 1231094720 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :hm ok < 1231094726 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, I don't use digraphs either < 1231094726 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :yes, they were added as they're easier to type than trigraphs < 1231094739 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oi, people, obsess over my awesome. < 1231094751 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: they're useful if your character set doesn't have { in < 1231094763 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :I mean, how else would you type C in such a character set? < 1231094772 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, I'm not sure if it does, but I sure hope POSIX requires that < 1231094786 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: there's a standard for which characters are guaranteed in a character set < 1231094789 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :{ is not one of them < 1231094792 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :OI :| < 1231094797 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :which is why C has digraphs < 1231094808 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :(and formerly trigraphs) < 1231094809 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, true, but I think all POSIX systems would have it or? < 1231094815 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :does POSIX require ASCII/ < 1231094825 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, not sure < 1231094861 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :incidentally, you can take proves further < 1231094862 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :e.g. < 1231094871 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Conforming implementations shall support one or more coded character sets. Each supported < 1231094871 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :locale shall include the portable character set, which is the set of symbolic names for characters in < 1231094871 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :Table 6-1. This is used to describe characters within the text of POSIX.1-200x. The first eight | < 1231094871 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :entries in Table 6-1 are defined in the ISO/IEC 6429: 1992 standard and the rest of the characters | < 1231094871 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :are defined in the ISO/IEC 10646-1: 2000 standard. < 1231094872 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :hm < 1231094875 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ACTION reads the table < 1231094884 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :void assert_not_empty(char *s) /*@ proves (strlen(s) > 0) */ < 1231094890 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :also those | are due to this being a "diff from 2001 edition" < 1231094893 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :that's only useful if you roll your own logic in there though < 1231094894 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :if you just do < 1231094894 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: ok, that's clever < 1231094897 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :assert(strlen(s) > 0) < 1231094900 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :then it works anyway < 1231094904 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :since assert(x) proves x < 1231094913 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :would strlen be special-cased in the linter? < 1231094916 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, the meaning of strlen is built in? < 1231094920 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :nope < 1231094921 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :or would it deduce strlen's properties from its source? < 1231094932 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :well, it'd come with a standard block of definitions < 1231094936 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :for the c standard library < 1231094943 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :but you could easily add your own for any function < 1231095005 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, {} are in table T-1 < 1231095005 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :err < 1231095005 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :6-1 < 1231095005 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :so I think this means posix requires that < 1231095005 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric : { LEFT CURLY BRACKET < 1231095005 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric : { LEFT CURLY BRACKET < 1231095005 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric : | VERTICAL LINE < 1231095005 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric : } RIGHT CURLY BRACKET < 1231095005 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric : } RIGHT CURLY BRACKET < 1231095005 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :wtf? < 1231095011 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :several names for the same symbol? < 1231095017 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: essentially, this system would be an extensible system for writing code checkers < 1231095022 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :from inside the actual code < 1231095025 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :yes < 1231095033 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :with a large base checker built in < 1231095057 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i can forsee, e.g., people offering checker files for all sorts of libraries < 1231095064 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, yes POSIX.1-2008 at least requires {} < 1231095066 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :and you just import them and off you go, compile-time verification < 1231095071 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :I don't have a 2001 copy < 1231095111 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i think what i'm saying here, is that i am crazy, and awesome < 1231095154 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :and yeah < 1231095154 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, somewhere in between I think < 1231095171 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: yep, pretty much what I was thinking too < 1231095179 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :does it track memory allocation the same way? < 1231095193 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :it is a very nice idea ehird < 1231095193 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: no, void assert_awesome(Person *person) /*@ need (is_crazy(person)); proves (is_awesome(person)) */ < 1231095205 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, that is a logic bug < 1231095210 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :no, that's life < 1231095217 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, life isn't boolean < 1231095228 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: i'm pretty sure you could write that to be non-core < 1231095237 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :you'd need to put a property on (*x) < 1231095244 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :need (valid_memory(x)) < 1231095253 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, I think ais523 meant tracking memory leaks < 1231095262 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i'm not sure I get what you mean < 1231095263 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :as in finding missing free < 1231095271 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :when pointers go out of scope < 1231095273 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :yes, memory leaks and use after free < 1231095281 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :what splint's meant to do but doesn't because the annotations are too general < 1231095300 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :use after free is easy < 1231095311 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :just add that property to (*x) and define free(x) as proves (!valid_memory(x)) < 1231095312 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :what about tracking when allocations go out of scope? < 1231095334 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: like how < 1231095338 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, also it need to track when pointers are copied and this one being applied to other copies of that pointer < 1231095354 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :otherwise it wouldn't detect stuff like: < 1231095355 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: int* foo (void) {int a = 4; return &a;} < 1231095356 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: pointers are copied is just variable assignment < 1231095359 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :and of course it'd track variable assignment < 1231095361 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :char* x = y; < 1231095362 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :that's an error, you should be able to detect it < 1231095364 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :free(y); < 1231095369 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :use(*x); < 1231095376 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: yep, that's variable assignment :P < 1231095380 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: ah < 1231095382 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: the problem is tracking what's aliasing what < 1231095385 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :gcc already warns about that, does it not? < 1231095385 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, but: < 1231095392 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :int x = y; < 1231095396 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :y = 0; < 1231095405 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :then x is still valid < 1231095410 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :so you need to treat that specially < 1231095412 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: no duh < 1231095413 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric ::P < 1231095418 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: lots of things do < 1231095422 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :but that's an obvious case < 1231095423 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, yes that = "*" < 1231095438 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: right, but you can make gcc make just that an error can't you? < 1231095442 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :consider {char* a = malloc(20); b = a; free(a);} < 1231095447 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :gcc won't catch that < 1231095448 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i mean, this is really for the sort of non-trivial stuff, like hugely nested frees and such < 1231095452 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, gcc is far from perfect < 1231095456 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: right, it'll notice b is invalid < 1231095457 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :but it's the same thing, really < 1231095461 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :because it contains the same pointer as a < 1231095466 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :and a is no longer valid_memory < 1231095470 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :so b isn't, obviously < 1231095471 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, all the sort of memleaks that valgrind can detect < 1231095474 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :yes, that's the sort of tracking that I was talking about < 1231095475 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :it should try to do < 1231095482 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: yes, hopefully < 1231095485 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :now, suppose you have the C-INTERCAL Threading Structure < 1231095494 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :how do you detect that memory's being freed exactly once there < 1231095496 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: i don't want to suppose that :D < 1231095496 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, oh no < 1231095506 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, I agree, thought it should try to do that < 1231095511 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: it's the most complex memory structure I know of offhand < 1231095516 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :it's full of aliases < 1231095520 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and other interesting stuff < 1231095522 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, I think runtime checking of it is the only sane way < 1231095526 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :such as valgrind < 1231095530 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: remember that it can't just magically infer stuff < 1231095532 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :of mudflap < 1231095533 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :if you say a function proves (x) < 1231095534 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :hmm... for something saner, what about a skiplist? < 1231095537 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :then it takes your word for it < 1231095542 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ugh, no < 1231095548 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :well, it has to < 1231095551 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :you should state the proves by hand < 1231095554 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :um < 1231095555 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :no duh < 1231095556 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :but it should verify that it is indeed proven < 1231095559 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :that's what Splint does < 1231095560 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :it can't < 1231095562 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :it can't < 1231095563 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, there should be a mode to check what you tell it < 1231095564 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :that's impossible < 1231095569 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :that's halting problem impossible < 1231095573 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: it's normally possible, though < 1231095576 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :at least trying to < 1231095579 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :and what ais523 said < 1231095582 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: it's not even worth it < 1231095582 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :just because it's halting impossible sometimes doesn't mean you can't do it in the general case < 1231095588 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :*non-general < 1231095597 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and then, you just make programs where it can't prove compile errors < 1231095598 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :the amount of functions you declare as proving things is a small amount compared to other types < 1231095600 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :that was my idea < 1231095601 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :and you should check them carefully < 1231095613 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :as, well, if it can't trust validators to validate, it can't do anything, can it? < 1231095629 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :*it can't /trust/ anything < 1231095631 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :it can do a lot < 1231095639 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :no, it can trust this: < 1231095639 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :it can trust + to add, for instance < 1231095646 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and the control variable of a while to be 0 when it ends < 1231095647 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :void assert(int x) < 1231095647 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :/*@ proves (x) */ < 1231095648 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :{ < 1231095650 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric : if (!x) { < 1231095652 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric : /* error out here... */ < 1231095654 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric : } < 1231095655 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, yes of course < 1231095656 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :} < 1231095658 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :that's one of the rare provers < 1231095660 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :and it should be effectively foolproof < 1231095662 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :there's not much room for error there < 1231095663 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, unless you use while ++ < 1231095672 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :as a good rule of thumb, if you can't look at every line and certify that it works correctly < 1231095673 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: it can easily deduce that that proves, though < 1231095674 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :don't make it a prover :P < 1231095677 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :or some a non-trivial while < 1231095683 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :you don't need to take the programmer on trust < 1231095687 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: really, it's best to use discretion when defining provers. < 1231095692 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :just don't, in general < 1231095693 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523: while (str[i] != 0) { ... } < 1231095693 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :? < 1231095694 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :you know exit (or what ever you use) errors out permanently < 1231095695 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :use assert(), or whatever < 1231095697 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :make a primitive prover < 1231095698 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :so the function never ends unless x is true < 1231095698 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :and use it < 1231095699 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :actually < 1231095700 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :and get its assurance < 1231095701 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :so it does in fact prove < 1231095702 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523: while (str[i++] != 0) { ... } < 1231095702 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :even < 1231095711 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :because that will work much better < 1231095715 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :and it will edtect when it doesn't really prove it < 1231095720 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :beacuse it uses an asserted-prover incorrectly < 1231095733 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :that's the thing, provers should be rare and very carefully written and small < 1231095740 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :everything else can be inferred on top of them < 1231095744 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: what I'm saying is there should be /no provers/ under your definition < 1231095750 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: yes, but that's shaky < 1231095752 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :not just rare and carefully written and small < 1231095753 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :it's not general < 1231095755 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :and you could slip up < 1231095758 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :you can infer everything from the lang itself < 1231095759 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :very easily < 1231095759 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :it's very general < 1231095760 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :no < 1231095761 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :no slips < 1231095761 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :you can't < 1231095765 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :because it's the fucking halting problem < 1231095773 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: no, it isn't < 1231095782 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :no? < 1231095784 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :look at your assert above, for instance < 1231095788 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :anyway, you CAN'T even inferr it, ais523 < 1231095788 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :beacuse < 1231095790 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :you don't know < 1231095792 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :what it does < 1231095794 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :on < 1231095796 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :error < 1231095797 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :it's very easily to statically prove that x is true if it ever reaches the end of the function < 1231095798 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :it could print out to the screen < 1231095800 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :it could set a toaster off < 1231095802 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and I'm assuming something like an abort here < 1231095803 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :it could eat loads of memory on purpose < 1231095805 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :it could play pacman < 1231095807 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: aha, assuming < 1231095811 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :so now you have a new class < 1231095812 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :aborters < 1231095819 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :and you can't handle errors your own way < 1231095820 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :great < 1231095821 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: yes, all static analysers use those AFAIK < 1231095823 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and you can < 1231095829 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :yes, but they shouldn't < 1231095835 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :because that method is itself verifiable to abort < 1231095844 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :if it doesn't abort, then the assert isn't actually proving anything < 1231095845 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :idea: just use haskell, should be way easier to prove < 1231095845 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :it's far more robust to have a few primitive provers that are carefully checked < 1231095849 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :and rarely ever declare anything as a prover < 1231095855 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: yes, it's called the operators of the language < 1231095855 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: er, shut up, it's exactly the same for haskell < 1231095857 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :like while and + < 1231095865 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :those are your primitives < 1231095867 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: have fun solving the halting problem < 1231095870 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, excepts the dirty bits are all in monads < 1231095882 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: stop bullshitting... < 1231095884 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: it doesn't need to solve the halting problem, it's a static analyser by definition < 1231095888 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :it only has to do a finite amount of work < 1231095888 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, sorry :P < 1231095899 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, I meant nomads of course < 1231095901 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :it may not be able to prove everything, but if it can't, that's a warning/error < 1231095917 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and the programmer should annotate the program defensively so it can < 1231095932 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: if you think you can write a program that takes an arbitrary function and verifies whether it actually "proves" (where you don't know how it will handle success/failure of this proof) an arbitrary piece of code boolean condition < 1231095941 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :for instance, you can get assert to find a counterexample to the Riemann hypothesis if it finds the assertion is false < 1231095943 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :even though it may use different ways to say the same value than the prof < 1231095944 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :proof < 1231095946 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :then you're a crackpot < 1231095952 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :and I'm not going to continue talking < 1231095953 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :then, the static analyser will mark that code as buggy, even though it might not be < 1231095955 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :if you don't believe that < 1231095959 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :then provers are a better solution < 1231095996 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: I think I can write a program that takes an arbitrary function, and a statement about what it's meant to prove, and either deduce (in the 99% of cases that matter in practice) that it does indeed prove that, or be unable to prove it proves that and errors out < 1231096007 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :go do it < 1231096015 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :you can't solve the halting problem. But you can write a program in such a way that it can be verified that the program halts < 1231096017 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :there's a difference < 1231096026 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :meanwhile i'll spend the extra 5 seconds when writing a program to make sure the provers are correct, after having saved 5 years that it'll take you to write your mythical program < 1231096033 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :hf < 1231096042 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, " then you're a crackpot" <-- just remember he *did* win the wolfram price < 1231096045 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: but then, it's theoretically possible that someone could write a buggy program < 1231096049 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: yep, I'm a crackpot < 1231096052 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: Argument to authority also makes you a crackpot. < 1231096053 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :even if he *is* a crackpot as you say, he is a smart one < 1231096054 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric ::P < 1231096073 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: there are always buggy programs. < 1231096077 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :fuck, this checker will have like 500 bugs < 1231096084 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :the point is mitigation to a reasonable level < 1231096095 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :[i for i in [1,2,3,4,5] while i<3] i'm sad this doesn't exist in python < 1231096095 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :and since provers should be rare, you can mitigate their correctness almost 100% < 1231096100 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :save things like the stdlib failing < 1231096101 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: you can < 1231096104 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, same as the difference between eccentric(sp?) and mad < 1231096106 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :[i for i in [1,2,3,4,5] if i<3] < 1231096114 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :except not about money < 1231096116 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ehird: that's only the same in that case < 1231096135 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i meant, you know [i for i in [1,2,3,4,5,4,3,2,1] while i<3] >>> [1,2] < 1231096174 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: the thing is, I don't see why on earth you're saying that your assert needs to be marked as a prover, when it's trivially veifiable < 1231096183 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :it's much easier to verify than most of the nonprover functions out there < 1231096195 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :you're saying provers should be trivially verifiable. If it's so trivial, why not verify them automatically? < 1231096199 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, it should have fewer bugs than qmail < 1231096201 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: because assert is a trivial example < 1231096237 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :and i really don't care what you think is theoretically possible because the difference in the two in practice is neligible except mine invites more careful checking of programs, and takes years less tow rite < 1231096255 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: isn't qmail very bug-free? < 1231096256 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: yours takes longer to write, and checks less of the program < 1231096266 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: you're wrong. < 1231096282 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, yes it is < 1231096319 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, there hasn't been a bug for years iirc, and between 1.0 and now there has been less than 10 bugs iirc < 1231096330 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: can you give an example of a complicated prover? < 1231096340 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :Is qmail licensed yet? < 1231096357 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: sure -- think about e.g. KDE/Qt < 1231096358 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, public domain since some time iirc < 1231096372 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: what would it be proving? < 1231096373 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, that would involve proving X first < 1231096373 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :they almost certainly have bulky assertion functions which do things like report the error to a gui < 1231096381 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: who knows? < 1231096382 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :something. < 1231096388 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: yes, but it's trivial to verify that the functions in question exit < 1231096393 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :rather than returning < 1231096396 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :exiting is NOT ALWAYS CORRECT < 1231096397 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, and yet qmail is one of the most used (the most used?) MTAs out there < 1231096398 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :you don't even have to analyse the whole function for that < 1231096404 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :it could change the program to bug reporting mode instead < 1231096407 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: do they exit the program, or do they continue it? < 1231096414 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: continuing COULD BE CORRECT < 1231096415 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :if they're changing to bug report mode, your assertion is in fact /false/ < 1231096419 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :you've proved something false in that case < 1231096425 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :so your prover is actually buggy < 1231096429 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :... no < 1231096430 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :that's retarded < 1231096438 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :you've found that somethign is false, and you're handlnig that < 1231096439 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ehird, it is theoretically correct < 1231096441 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :if continuing from an assert when the condition is false is /ever/ correct, it /hasn't proved what it's claiming to prove/ < 1231096454 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :your definition of prove is completely wrong in the context < 1231096456 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :a more interesting case is if assert somehow alters the program's state so the condition becomes true < 1231096465 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :i'm not even talking about it any longer because it's worthless < 1231096466 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :seems ehird is one of those people who take the halting problem as the end of topic of proving. < 1231096472 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :no < 1231096475 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: using your method, assert(x != NULL); putchar(*x); could segfault < 1231096481 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: no, it couldn't < 1231096488 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :it could pop up a bug reporting window < 1231096491 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :yes it could, if assert ever returned when x was null < 1231096493 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :which then exit()s in itself < 1231096495 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :yes < 1231096499 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :or < 1231096503 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :in that case, it's trivial to determine that assert exits < 1231096503 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :maybe the platform doesn't do exit() < 1231096505 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :maybe it's embedded < 1231096509 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oklopol, oh yes, somewhat like a Godwin's law for TC discussions? < 1231096510 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :maybe it goes into an infinite loop of flashing a warning light < 1231096514 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: yes < 1231096525 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :anything but a complicated infiniloop is relatively easy to analyse < 1231096527 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :you can't fucking say that the program exiting is the only way it can handle a false proof < 1231096531 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :because that is simply WRONG < 1231096541 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: no, the only way it can handle it is /failing to continue past that point/ < 1231096548 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :there are only two ways to do that, exit and infiniloop < 1231096559 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :and NEITHER HAS TO HAPPEN IN THE ACTUAL FUNCTION < 1231096564 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :well, exactly < 1231096566 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :it could happen in a function in a binary blob that it calls < 1231096569 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :that's what the static analyser is for! < 1231096570 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :there's no way to prove THAT works < 1231096571 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, err < 1231096574 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, not correct < 1231096574 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :you analyse the functions it calls < 1231096581 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: yes, kinda like tcness is for language discussions < 1231096582 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, if another thread alters this thread < 1231096583 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :ais523: except you can't assert that a function in a binary blob exits < 1231096585 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :it could return < 1231096589 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :because it needs to fucking statically analyze the source for that < 1231096591 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, ! < 1231096592 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :beacuse it uses your retarded scheme < 1231096593 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: well, those do need annotations as primitives < 1231096599 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :o ho ho < 1231096600 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :but then, you're just taking the programmer on trust < 1231096601 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, this gets hugely complicated if you use phtreads < 1231096602 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :so now you have proves as an annotation < 1231096603 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :which is a bad idea < 1231096629 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: yes, but you have to realise that you're sacrificing guaranteed correctness in that situation < 1231096637 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, I'm uncertain you could prove anything in fact if the program was threaded < 1231096638 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :in fact, trusting binary blobs to do anything particular at all is a bad idea < 1231096642 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :if you want to make sure your program is gine < 1231096652 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :arguing with you is so pointless, you just continually reassert that you're right immediately after admitting you're wrong < 1231096653 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: you can, you just need to make assertions about how the threads affect each other < 1231096654 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, also I would love to see what splint did on #pragma omp < 1231096670 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, #pragma omp is OpenMP btw < 1231096676 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :much the same way as you annotate how you affect global variables in SPlint < 1231096677 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i didn't really read much of this, anyone feel like quickly explaining what the argument is about? < 1231096696 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oklopol, writing a static analyzer for a C like language that could verify the program < 1231096696 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :and what's the topic < 1231096697 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: ehird's arguing that a static analyser should take the programmer on trust for things rather than verifying them itself < 1231096702 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :... < 1231096705 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :shut up < 1231096707 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :that's not what i fucking said < 1231096715 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ais523: that's what i thought he meant < 1231096717 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :I'm arguing that a static analyser should in all cases possible determine things for itself < 1231096721 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oklopol, want some popcorn? < 1231096725 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: yes it is < 1231096725 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :this is interesting < 1231096733 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: I'm popping some! < 1231096735 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :please give an example of how that isn't your viewpoint < 1231096738 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: not yet, i want context before i start watching :P < 1231096740 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :GregorR, great! < 1231096741 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :REOWR HISS < 1231096746 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :GregorR, hm? < 1231096750 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :that's true IFF every function in every program is a prover. < 1231096756 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :whereas barely any are. < 1231096756 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: I'm watching a cat fight :P < 1231096761 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :and furthermore, this is tiring. goodbye. < 1231096762 0 :ehird!unknown@unknown.invalid PART #esoteric :? < 1231096764 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :what's a prover? < 1231096768 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: there is no difference between provers and nonprovers < 1231096768 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :damn he left < 1231096768 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :Awwww < 1231096771 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ouch < 1231096773 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: an idea invented by ehird < 1231096775 0 :GregorR!unknown@unknown.invalid PRIVMSG #esoteric :ACTION turns off his popper. < 1231096787 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :basically it's a function that the programmer asserts does something < 1231096794 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :special functions that can assert things the compiler then takes on trues? < 1231096801 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and the static analyser takes the programmer at their word < 1231096802 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :rather than checking that it actually does that < 1231096804 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ais523: right. that's an assert < 1231096807 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :assert ...; < 1231096812 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :yes, assert was the example we were mostly using < 1231096817 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :it's just an assert that doesn't actually fail. < 1231096825 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :it just helps the proves < 1231096829 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :*prover < 1231096833 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :I was arguing that it's better and more robust to get the compiler to look in the source of assert to make sure it actually does what it's supposed to dp < 1231096835 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :*do < 1231096852 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, well for assert() that is simple < 1231096857 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :after all, ehird's idea was that provers should be so simple that they can be checked by hand to unambiguously make sure they always work < 1231096857 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :it goes something like this: < 1231096861 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: I know < 1231096872 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :no need to argue this point with me, I'm on the same side as you I think < 1231096882 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :/usr/include/gentoo-multilib/amd64/assert.h:extern void __assert (const char *__assertion, const char *__file, int __line) < 1231096883 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :nice < 1231096886 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :well, if provers are so simple, just analyse them yourself like the rest of things < 1231096887 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :didn't exepect that < 1231096890 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ais523: and what would their point be? < 1231096904 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: ehird had to resort to things like binary blobs which couldn't be statically checked < 1231096909 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :or mentioining the halting problem < 1231096910 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :that the programmers would more easily believe the programmer is correct? < 1231096911 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :# define assert(expr) \ < 1231096911 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric : ((expr) \ < 1231096911 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric : ? __ASSERT_VOID_CAST (0) \ < 1231096911 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric : : __assert_fail (__STRING(expr), __FILE__, __LINE__, __ASSERT_FUNCTION)) < 1231096914 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, ^ < 1231096919 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :that is assert on my system < 1231096925 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i mean, that's what modularity and asserts are for < 1231096940 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :and that whole idea is equivalent to the assert statement found in all languages < 1231096945 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, can you prove it? I think it ends up calling a compiler built in < 1231096945 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: ehird thought it was impractical/impossible to verify that all provers worked statically < 1231096959 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: you need to know what compiler builtins do to be able to analyse them, ofc < 1231096965 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :except in a round-about fashion that i don't really see a use for. < 1231096967 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, right < 1231096967 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :there is a bottom level of provers as ehird calls them, obviously < 1231096976 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :but they shouldn't be programmer-written functions < 1231096982 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, a few standard C ones? < 1231096987 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :would make sense < 1231096988 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :they should be the primitives of the language, the operators, commands, functions and builtins < 1231096995 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :you can either do it on libc < 1231096999 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :or just look in the source of libc < 1231097014 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :for instance, you can run through the source of newlib and determine that assert doesn't always assert < 1231097020 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, gcc uses builtins for lots of things < 1231097023 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :because it raises a SIGABRT, which might be masked < 1231097029 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ais523: you could do that when proving something trivial that's hard to prove in the language of the prover < 1231097032 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: this isn't really relevant... < 1231097036 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: yes < 1231097039 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :assuming you're using a system where you can help the prover < 1231097041 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :except I don't see this situation coming up < 1231097048 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, also I believe assert() raises sigabort on glibc too < 1231097053 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, since it drops you into gdb < 1231097055 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: it does on all POSIX systems by default < 1231097061 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :right < 1231097061 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ais523: proofs tend to get three times bigger when you get technical < 1231097065 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :which means it's actually kind-of useless for asserting < 1231097089 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i'm assuming there would be automatic proving too? < 1231097092 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :maybe that's why Splint was complaining about my asserts! < 1231097096 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: yes, that's the whole point < 1231097102 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, unless you prove SIGABRT isn't masked < 1231097103 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :yeah, that's why i assumed it < 1231097107 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: ah, yes, ofc < 1231097113 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :Splint isn't that sophisticated < 1231097117 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :a good static analyser would be though < 1231097118 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :well i agree with ehird, that would be helpful < 1231097128 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, you could see if there is any call to signal() or sigaction() involving sigabrt < 1231097131 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :although probably for a different reason than him < 1231097135 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: yes I know < 1231097137 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :for example cfunge only masks sigpipe < 1231097140 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: what in particualr are you agreeing with? < 1231097141 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i'm thinking it would be useful for the trivial things, not the complicated ones. < 1231097149 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ais523: that they would be useful < 1231097165 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :that you could tell the prover about a high-level idea < 1231097165 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: what sort of trivial things are you thinking of which couldn't just be static-analysed like the rest of the code? < 1231097169 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, what would you do if the program used alarm() then everything is suddenly a timing issue < 1231097183 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: bail out if you couldn't prove for certain that it worked < 1231097199 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, well cfunge uses alarm() in fuzz testing builds < 1231097201 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ais523: probably something that's intuitively clear, but the prover just happens not to get right, and you don't feel like explaining it to it < 1231097205 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :I mean, you could write a program where on a failed assert it searched for a counterexample to the Riemann Hypothesis, then kept on going < 1231097208 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, to run for a limited time < 1231097216 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: I'd call that a bug in the linter < 1231097237 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :that's the sort of example that the linter couldn't prove correct < 1231097245 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :but people don't do that in practice, and IMO shouldn't use it in maintainable code < 1231097251 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, also you do need to trust the compiler to not have bugs in code generation < 1231097256 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: yes < 1231097257 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :like what + - and so on does < 1231097269 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :the idea is to avoid bugs in the original source code < 1231097281 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :bugs in the linter or in the compiler can still cause buggy output, of course < 1231097281 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, and you couldn't just run it on the compiler to see if it found issues < 1231097282 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :because < 1231097284 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ais523: i'm not saying there's any use with a good prover < 1231097294 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i just don't know how good provers are. < 1231097297 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :1) You could have a buggy build of the linter < 1231097308 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :2) you could have logic bugs causing such issues in the compiler < 1231097318 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: not very good atm, but the whole idea was a project to build a good one < 1231097338 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and we got sidetracked over the issue of where the primitives should be < 1231097350 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, well you got any idea how? < 1231097350 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :I certainly don't < 1231097350 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i mean some intuitively clear graph algorithms, even something as simple as dijkstra, aren't trivial to prove < 1231097365 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :well dijkstra is trivial to prove for a human, but an actual proof is pretty long < 1231097377 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oklopol, hm? < 1231097381 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oklopol, what? < 1231097388 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oklopol, that things are harmful? < 1231097389 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :!? < 1231097393 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: proving that it works, you mean? < 1231097394 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :what has that got to do with it < 1231097401 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ais523: yes < 1231097403 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :my point is < 1231097411 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :my vision is that you'd include a proof that it always returns the best answer < 1231097416 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :you might want to, even if your prover can't prove that part, to be sure about the parts it can prove < 1231097417 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :a machine-readable one, in C < 1231097431 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and yes, a proves_unsafe pragma would be helpful during development < 1231097443 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :but if I'm using such a superlinter as this, I wouldn't want any in a production build < 1231097448 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ais523: yes, that's better, i'm just saying you might want to be able to skip some of the proof, for instance to be able to try it out < 1231097452 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :(or, you could just do expected-error instead) < 1231097454 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, also there will be programs where it would be useful to prove parts of the code even if you can never prove it all < 1231097471 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :assuming you couldn't compile a program that hasn't been proven to be correct or something < 1231097478 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, for example you can't prove X ever since it depends hugely on agp card bugs < 1231097479 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :and such < 1231097509 0 :oerjan!unknown@unknown.invalid QUIT :"Bus" < 1231097510 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :but yes, of course, in the end, the proof should be given to the prover as steps in whatever system it uses for deduction itsel < 1231097511 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :f < 1231097524 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oklopol, yes < 1231097545 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, if you can write this linter it would rock < 1231097548 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :and i think ehird fails to realize most of the "intuitively clear" things you'd end up telling the prover like by trust, are exactly things that are trivial to prove in its own language < 1231097553 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :but I certainly know I couldn't help you < 1231097557 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :I don't know how simply < 1231097557 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: that was my main point < 1231097566 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :anyway, it seems assert crashes the program even if SIGABRT is masked < 1231097575 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :according to man assert, it unmasks SIGABRT first < 1231097578 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :*man abort < 1231097588 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, hm < 1231097598 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :well, unblocks < 1231097603 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric : If the SIGABRT signal is ignored, or caught by a handler that returns, the abort() function will still terminate the process. It does < 1231097604 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric : this by restoring the default disposition for SIGABRT and then raising the signal for a second time. < 1231097604 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :you can longjmp out of a signal handler < 1231097605 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :what? < 1231097611 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ah no < 1231097615 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, indeed you can < 1231097630 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :if you don't longjmp out, though, it ensures that the code nevertheless terminates < 1231097644 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :now, this is the sort of thing it would be great to have an automatic verifier for < 1231097652 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :assert isn't nearly as simple as I thought it was < 1231097666 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, one issue, consider the infiniloop way of exiting you mentioned < 1231097666 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ais523: well, i agreed with you all along, but i still also agree with ehird's idea's possible usefulness, although for just getting the prover to skip some unproven part for now. < 1231097670 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and really I wasn't confident that assert(0) always exits, but I am now < 1231097673 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, what if there are other threads < 1231097683 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :and they modify the first threads program memory < 1231097685 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: they'd need pointers into the program to change stuff in it < 1231097685 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :to jump out < 1231097694 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, sure, what about proving a jit compiler! < 1231097703 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :heh, that would be fun < 1231097713 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :we can certainly prove that it jumps into memory it's just modified < 1231097718 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :but not really what's happened from there < 1231097725 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, indeed < 1231097727 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :but at least we'd know there was something we couldn't handle < 1231097730 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, and if it is multi-threaded < 1231097734 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :... < 1231097736 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :multithreading isn't so bad < 1231097745 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :as you can analyse which threads can access what in which other threads < 1231097756 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :but still the variable execution times between the threads is still a pain < 1231097758 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, if you believe the valgrind docs: they are < 1231097765 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :valgrind does handle it < 1231097771 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :apart from condition variables < 1231097777 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :that's an issue for the wider linter though, not for the recent me/ehird argument < 1231097785 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, indeed < 1231097794 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: by the way, you have a tendency of focusing on points on the wrong level during these debates < 1231097811 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :yes, i actually was about to point that out too < 1231097815 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :it gets annoying sometimes when you're focusing on a corner case that isn't part of the main debate, for instance < 1231097824 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and not even the program we're originally planning to write < 1231097826 0 :ehird!n=ehird@eso-std.org JOIN :#esoteric < 1231097840 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :but i'm assuming that's at least partly on purpose < 1231097848 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, true < 1231097857 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oklopol, not fully < 1231097861 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :11:32:25 ais523, if you can write this linter it would rock <-- I see i'm getting all the credit for, you know, actually formulating this thing. < 1231097870 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: you weren't in-channel < 1231097876 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and we both had similar ideas for it independently < 1231097880 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :yes < 1231097885 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :interesting, I cease to exist when I leave. < 1231097886 0 :ehird!unknown@unknown.invalid PART #esoteric :? < 1231097892 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :who was that? < 1231097894 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric ::D < 1231097907 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oklopol, wrong, you should have said "who was who?" < 1231097911 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric ::/ < 1231097918 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ACTION is pretty sure ehird is getting younger as time goes by :D < 1231097928 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oklopol, who? < 1231097959 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: a guy i once knew < 1231097963 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :like a few minutes ago < 1231097974 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :what? < 1231097977 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :but he's gone now < 1231097982 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :who? < 1231097990 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: you can drop the joke now < 1231097997 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :what joke? < 1231097998 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :;P < 1231098001 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, right < 1231098002 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ais523: stop being an ehird :D < 1231098014 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oklopol, stop being an what? < 1231098015 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :;P < 1231098028 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :a what* < 1231098048 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :anyway < 1231098092 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, the prover the way you plan it sounds cool, but I think there needs to be some kind of override mechanism when the program can't prove something but a human can verify easily < 1231098103 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: yes < 1231098103 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :I don't know what it would look like < 1231098110 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :expected warnings, I think, just like in every other linter ever < 1231098119 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :you tell it "don't complain about this, I know you think it's wrong" < 1231098128 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and it shuts up < 1231098128 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, that sounds ok < 1231098148 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, unless this means it doesn't know if other memory is invalid any more < 1231098149 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :or such < 1231098176 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: well, my idea is pretty similar to ehird's, in that you can tell it "this function is meant to prove that strlen(x) >= 5", for instance < 1231098184 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, just consider for example that memory pool system I wrote, I was unable to express with valgrind annotations if the memory was valid or not < 1231098186 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :if it can't prove that, that's a warning < 1231098190 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :but it can assume it elsewhere < 1231098200 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and I didn't even know there was such a thing as valgrind annotations < 1231098203 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, due to it being used internally in the allocator as a linked list of blocks after freeing < 1231098225 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :so memory was legally accessed as something else after the allocator_free() call < 1231098233 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ais523: so like an assert? < 1231098236 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :basically all memory blocks were like this: < 1231098237 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: ah, you weren't using malloc/free? < 1231098241 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: yes, pretty much < 1231098249 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :in fact, just adding assert statements would be a good solution to that < 1231098256 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i mean isn't it exactly that, except that you don't specify what happens when the expression is false < 1231098260 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :yes < 1231098268 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, union memblock { union memblock *nextfree; struct datatype; } < 1231098274 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, I said mem pool < 1231098282 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :because you except it to be true even more than with an assert, in a way. < 1231098284 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, it allocated from a pool and returned to a free list < 1231098284 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :in actual code, that is a good place to put an actual assert statement though < 1231098292 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, single linked free list < 1231098300 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :well, nm my last comment < 1231098301 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :I generally don't put in assert statements if I ever expect them to be triggered < 1231098308 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :if an assertion is false, it's a bug in the program < 1231098312 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and you can NDEBUG them out anyway < 1231098318 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, thus the memory is to be considered "inaccessible" outside the allocator functions but "accessible" inside it < 1231098321 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, ^ < 1231098329 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :could you express that? < 1231098329 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: ok < 1231098334 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ais523: ndebug? < 1231098342 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oklopol, ifndef NDEBUG < 1231098347 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: #define NDEBUG turns off all the assert statements in the program < 1231098357 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :oh you meant like that. < 1231098357 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and other assert-like code is normally conditioned on NDEBUG by hand < 1231098365 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i thought you meant you can autoprove them out :D < 1231098371 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :and i was like k. < 1231098372 0 :ehird!n=ehird@eso-std.org JOIN :#esoteric < 1231098384 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: that would be good, warning if you can't prove an assert statement always has a true assertion < 1231098399 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, so could you handle that memory accessibility definition? even valgrind can't < 1231098403 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :that's a different kind of proving, it's "proving this program won't abort out with an assertion" rather than "proving this program won't work" < 1231098407 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :11:42:56 AnMaster: well, my idea is pretty similar to ehird's, in that you can tell it "this function is meant to prove that strlen(x) >= 5", for instance < 1231098411 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :you win the completely missing the point award < 1231098415 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :void atleast5(char *s) { assert(strlen(s) >= 5); } < 1231098417 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :that works < 1231098421 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :but assert itself has to be tagged proves < 1231098423 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :because it's a primitive < 1231098433 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ehird: my argument is you're putting the primitives on the wrong level < 1231098443 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :for instance, does assert always exit? < 1231098443 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :yes, you're wrong though. < 1231098445 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :in POSIX? < 1231098450 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :that is irrelevant. < 1231098454 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :no, it definitely isn't < 1231098464 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :sorry, 'tis. < 1231098464 0 :ehird!unknown@unknown.invalid PART #esoteric :? < 1231098465 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :I don't know all the details of the system library < 1231098466 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :I had to look it up just now < 1231098482 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :why would it be irrelevant? < 1231098492 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :to me it sounds highly relevant < 1231098497 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :because ehird wants the programmer to arbitrarily declare it irrelevant < 1231098510 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :I'm arguing that they shouldn't have to, and that way is likely to lead to buggier code < 1231098517 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :as it's definitely relevant in the bigger scheme of things < 1231098603 0 :ehird!n=ehird@eso-std.org JOIN :#esoteric < 1231098618 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ais523: hmm. i think you'd need two different asserts, ones that specify what you want it to do, ones that specify what you know it does < 1231098648 0 :ehird!unknown@unknown.invalid PRIVMSG #esoteric :readers are advised to not trust any results of ais523's mind-reading ability, as it has never been shown to be correct. < 1231098649 0 :ehird!unknown@unknown.invalid PART #esoteric :? < 1231098662 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :hmm... joining, making a few comments than parting before anyone can reply < 1231098668 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :wasn't someone doing that yesterday? < 1231098674 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :well you can reply, he's just making a statement < 1231098681 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :yes, I know < 1231098688 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and also reading the logs, clearly < 1231098691 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :but yeah, i get your reference < 1231098694 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :which rather misses the point of parting the channel < 1231098696 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :and i agree with it < 1231098714 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :as for your two asserts thing, I'm not quite sure I know what you mean < 1231098720 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :well. < 1231098733 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ones that say "this is true, assume it in your proofs" < 1231098741 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :and ones that say "this must be true" < 1231098745 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :"check that it is" < 1231098749 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :well, assert() is the second sort < 1231098760 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i mean, you have to have some way to tell the program what you want it to do, obviously < 1231098762 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :because it bails out if the statement is in fact false, thus forcing it true if the program continues < 1231098787 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :the first sort is what ehird wanted all primitives to be < 1231098795 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and the question is: what to do if it is in fact false? < 1231098800 0 :decipher!unknown@unknown.invalid QUIT :kornbluth.freenode.net irc.freenode.net < 1231098800 0 :rodgort!unknown@unknown.invalid QUIT :kornbluth.freenode.net irc.freenode.net < 1231098801 0 :psygnisfive!unknown@unknown.invalid QUIT :kornbluth.freenode.net irc.freenode.net < 1231098803 0 :Dewi!unknown@unknown.invalid QUIT :kornbluth.freenode.net irc.freenode.net < 1231098803 0 :flexo!unknown@unknown.invalid QUIT :kornbluth.freenode.net irc.freenode.net < 1231098805 0 :Badger!unknown@unknown.invalid QUIT :kornbluth.freenode.net irc.freenode.net < 1231098805 0 :AnMaster!unknown@unknown.invalid QUIT :kornbluth.freenode.net irc.freenode.net < 1231098806 0 :Slereah2!unknown@unknown.invalid QUIT :kornbluth.freenode.net irc.freenode.net < 1231098806 0 :Vendan!unknown@unknown.invalid QUIT :kornbluth.freenode.net irc.freenode.net < 1231098806 0 :Asztal!unknown@unknown.invalid QUIT :kornbluth.freenode.net irc.freenode.net < 1231098806 0 :sebbu2!unknown@unknown.invalid QUIT :kornbluth.freenode.net irc.freenode.net < 1231098808 0 :GregorR!unknown@unknown.invalid QUIT :kornbluth.freenode.net irc.freenode.net < 1231098810 0 :lament!unknown@unknown.invalid QUIT :kornbluth.freenode.net irc.freenode.net < 1231098811 0 :mtve!unknown@unknown.invalid QUIT :kornbluth.freenode.net irc.freenode.net < 1231098811 0 :SimonRC!unknown@unknown.invalid QUIT :kornbluth.freenode.net irc.freenode.net < 1231098813 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :if that's a programmer bug if it's false, you may as well use the second sort of assert < 1231098813 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :but the first one would be for skipping proofs of trivialities you don't feel like translating into the language of the prover, the thing you call ehird's idea, even though i guess he says it's not < 1231098819 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :as otherwise you're just going to have a mysterious crash later on < 1231098853 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :ACTION points and laughs at christel < 1231098873 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :although it's not all that bad a netsplit < 1231098889 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ais523: well this is what you and ehird were arguing about (i think), i just just now realized they are both asserts, in a way, just different < 1231098890 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: well, the whole point is that the prover language == the language you're writing in < 1231098901 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ais523: ohhhh < 1231098905 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :that i didn't know < 1231098906 0 :Slereah2!n=Slereah@ANantes-252-1-96-169.w81-53.abo.wanadoo.fr JOIN :#esoteric < 1231098906 0 :Vendan!n=Vendan@h215.43.16.98.dynamic.ip.windstream.net JOIN :#esoteric < 1231098906 0 :psygnisfive!n=psygnisf@c-71-57-164-119.hsd1.fl.comcast.net JOIN :#esoteric < 1231098906 0 :decipher!n=decipher@lyseo.edu.ouka.fi JOIN :#esoteric < 1231098906 0 :rodgort!n=rodgort@ludios.net JOIN :#esoteric < 1231098906 0 :GregorR!n=gregor@65.183.185.132 JOIN :#esoteric < 1231098906 0 :Dewi!n=dewi@203-206-249-67.dyn.iinet.net.au JOIN :#esoteric < 1231098906 0 :flexo!n=flexo@flexotec.eu JOIN :#esoteric < 1231098906 0 :Badger!i=badger@tremulous/player/badger JOIN :#esoteric < 1231098906 0 :AnMaster!n=AnMaster@unaffiliated/anmaster JOIN :#esoteric < 1231098906 0 :Asztal!n=moo@chunkybacon.org JOIN :#esoteric < 1231098906 0 :sebbu2!n=sebbu@ADijon-152-1-57-90.w83-194.abo.wanadoo.fr JOIN :#esoteric < 1231098906 0 :SimonRC!n=sc@fof.durge.org JOIN :#esoteric < 1231098906 0 :lament!n=lament@S010600110999ad06.vc.shawcable.net JOIN :#esoteric < 1231098906 0 :mtve!n=mtve@65.98.99.53 JOIN :#esoteric < 1231098909 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :thus there's no need to translate, unless you have a triviality that can't easily be asserted in C < 1231098910 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :lol that changes everything < 1231098928 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :then of course just the second kind is needed < 1231098931 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and or whatever lang < 1231098933 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :and ehird's idea has nothing to do with it < 1231098970 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :also the netsplit report came after everyone had already rejoined < 1231098978 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: lag my end < 1231099056 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :wait wait < 1231099075 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :actually of course it doesn't make ehird's idea irrelevant, i somewhat misunderstood < 1231099090 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :no, it doesn't; I just think ehird's putting the primitives at the wrong level < 1231099097 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :it's a minor argument really which blew up somehow < 1231099112 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :well if he thinks all proofs should have primitives with the programmer asserting something < 1231099120 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :back < 1231099126 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :then he if obviously wrong < 1231099161 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :I agree with the idea of only using a few well-checked primitives; but I think they should be the language's primitives themselves, not some layer the programmer puts on top of things < 1231099183 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: what do you think of bfrle.c, by the way? It's a BF interp designed specifically to debug gcc-bf < 1231099186 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ais523: well those are really two different ideas < 1231099210 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :well. < 1231099214 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, link? < 1231099215 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :they are different ideas, but I think they should be the same operators/commands/functions/whatever to reduce the chance of error < 1231099220 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: http://rafb.net/p/sRPjBK56.html < 1231099232 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :same one as before, just a different context for linking < 1231099244 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :it's not quite ESO-standard brainfuck < 1231099256 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :partly because ESO still hasn't started, and partly because it gives special meanings to % and * < 1231099263 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :% and * ? < 1231099268 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :what on earth do they do? < 1231099269 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :* because run-length-encoded BF is so much shorter < 1231099275 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :+*6 is equivalent to ++++++ < 1231099282 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ah < 1231099286 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and % followed by a number means "assert the pointer is here" < 1231099296 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :so %80 means that the pointer should be on the 80th cell < 1231099301 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :hm < 1231099302 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :how's that useful? < 1231099303 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :not sure offhand if it's 0-based or 1-based < 1231099312 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: to prevent mysterious crashes later < 1231099326 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :if the pointer isn't where it thinks it is, it's basically UB < 1231099329 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :which makes it hard to debug < 1231099359 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :the pointer not being where it thinks it is means there's a bug somewhere, at that point it dumps tape so I can debug what caused it < 1231099381 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, what about proving for programs like cfunge, what could you prove about it? < 1231099389 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: you could prove the state of globals < 1231099396 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and that you neve read past the null terminator of a string < 1231099400 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :*never < 1231099404 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and that you didn't overflow any buffers < 1231099416 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, the former totally depends on what the befunge program does < 1231099422 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: not all globals < 1231099430 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, true, a few are set at load time < 1231099436 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :but I mean, you could prove that whenever you tried to read the fungespace it had been allocated < 1231099441 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, however I had them overwritten once < 1231099445 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :due to an indexing errors < 1231099462 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :a static array overflowed a lot and wrote in another static variable < 1231099463 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :well, ideally a linter would detect that your program could potentially overwrite the wrong global < 1231099478 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :or something as simple as accessing element -1 of an array < 1231099484 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :only with mudflap did I detect it < 1231099487 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :hmm... this might be a good time to use some of the stranger features of C pointers < 1231099501 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, also it was a hard to prove case < 1231099502 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :for instance, if a is an array then even calculating a-1 is UB < 1231099513 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, and it was after, not before < 1231099518 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: well, I'm not really going for practicality here, but for idealism < 1231099524 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, true < 1231099538 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :also: what about VLA? < 1231099544 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :they are sure to mess up proving < 1231099545 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: that's much the same as malloc < 1231099548 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :I don't use VLA < 1231099549 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :and not at all < 1231099559 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, I *do* use flexible array members < 1231099561 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :VLAs are slightly easier to lint than the equivalent malloc/free pair < 1231099567 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :because you know they aren't there when they go out of scope < 1231099577 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :as in struct with a variable size last element < 1231099581 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ais523: okay yeah i see how it's useful < 1231099583 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :wasn't thinking < 1231099588 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, and which is resized in chunks < 1231099595 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i haven't been thinking much today < 1231099606 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :and only shrunk if the difference is too large < 1231099611 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: well, it could prove that the allocated size was always equal to the size the struct said it was < 1231099624 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :anyway, I have to go home, it's been an interesting conversation but I have to have dinner sometime < 1231099626 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, it isn't because of the flexible struct member... < 1231099638 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: I was giving an example of what a linter could prove < 1231099652 0 :ais523!unknown@unknown.invalid PRIVMSG #esoteric :bye everyone, anyway < 1231099655 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :ais523, so how would you be able to track what flexible struct member indexes are valid < 1231099656 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oh well < 1231099662 0 :ais523!unknown@unknown.invalid QUIT :Client Quit < 1231099679 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :dang. i was just about to need him. < 1231099697 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :also the reason I use flexible struct members instead of a linked list is cache locality (ehird will love that) < 1231099698 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :;P < 1231099710 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :yes it did impact performance < 1231099717 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :what are flexible struct members? < 1231099733 0 :Corun!n=Corun@cpc1-rdng19-0-0-cust700.winn.cable.ntl.com JOIN :#esoteric < 1231099739 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oklopol, you know what struct mystruct { int foo; int bar }; is? < 1231099741 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :well < 1231099751 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: i know c/c++ < 1231099754 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oklopol, struct mystruct { int foo; int bar; int someints[] }; < 1231099756 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :C99 < 1231099761 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :oh < 1231099768 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oklopol, it allows the last member to be variable size < 1231099770 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :you specify at allocation? < 1231099778 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :well yeah, makes sense they'd allow that < 1231099784 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oklopol, malloc(sizeof(mystruct) + whatever) < 1231099793 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :ah. < 1231099795 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :right right < 1231099804 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :what about mystruct x; < 1231099807 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :and then you can access it as mystructvariable->someints[4] < 1231099810 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :or whatever < 1231099820 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oklopol, I don't know, don't think it is legal < 1231099824 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: well you could just do someints[0] and have that same behavior. < 1231099835 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oklopol, err 0 isn't valid there < 1231099836 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :or rather < 1231099839 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :GCC allows it < 1231099839 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :1 then. < 1231099844 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :but not valid C89 < 1231099860 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i thought they allowed it at some point, but may have been c++, or just my imag < 1231099863 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oklopol, some compilers might complain that is out of valid range < 1231099876 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: i guess. < 1231099902 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :they *should* allow that for locals < 1231099928 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oklopol, eh? < 1231099936 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :i mean how hard is it to compute how much to move the stack pointer at runtime < 1231099956 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: that you could do mystruct x WITHLASTSIZE 100; < 1231099958 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :16 As a special case, the last element of a structure with more than one named member may < 1231099958 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric : have an incomplete array type; this is called a flexible array member. In most situations, < 1231099958 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric : the flexible array member is ignored. In particular, the size of the structure is as if the < 1231099958 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric : flexible array member were omitted except that it may have more trailing padding than the omission would imply. < 1231099967 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :WITHLASTSIZE being a keyword < 1231099985 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oklopol, GCC extension: alloca < 1231099998 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oklopol, also there is variable size array < 1231100003 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :which is variable sized array on stack < 1231100004 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :like < 1231100021 0 :MizardX!i=MizardX@92.254.128.248 JOIN :#esoteric < 1231100031 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :int foo(int x) { int array[x]; } < 1231100038 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :not very useful function < 1231100053 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oklopol, also I prefer to avoid that, larger risk for stack overflow < 1231100062 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :and most automated tools can't protect that < 1231100069 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :like stack smashing protection < 1231100077 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :well us real programmers don't use tools : D < 1231100103 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oklopol, stack smash protection means that the compiler inserts special values on the stack and verify them on return < 1231100107 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :if they were overwritten... < 1231100220 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oklopol: < 1231100222 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :EXAMPLE After the declaration: < 1231100222 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric : struct s { int n; double d[]; }; < 1231100222 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :the structure struct s has a flexible array member d. A typical way to use this is: < 1231100222 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric : int m = /* some value */; < 1231100222 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric : struct s *p = malloc(sizeof (struct s) + sizeof (double [m])); < 1231100223 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :and assuming that the call to malloc succeeds, the object pointed to by p behaves, for most purposes, as if < 1231100226 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :p had been declared as: < 1231100228 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric : struct { int n; double d[m]; } *p; < 1231100230 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :(there are circumstances in which this equivalence is broken; in particular, the offsets of member d might < 1231100235 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :not be the same). < 1231100237 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :from C99 specs < 1231100249 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :and: < 1231100251 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :struct s t1 = { 0 }; // valid < 1231100252 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :struct s t2 = { 1, { 4.2 }}; // invalid < 1231100252 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :t1.n = 4; // valid < 1231100252 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :t1.d[0] = 4.2; // might be undefined behavior < 1231100291 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :The initialization of t2 is invalid (and violates a constraint) because struct s is treated as if it did not < 1231100291 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :contain member d. The assignment to t1.d[0] is probably undefined behavior, but it is possible that < 1231100291 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric : sizeof (struct s) >= offsetof(struct s, d) + sizeof (double) < 1231100291 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :in which case the assignment would be legitimate. Nevertheless, it cannot appear in strictly conforming < 1231100291 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :code. < 1231100305 0 :AnMaster!unknown@unknown.invalid PRIVMSG #esoteric :oklopol, does that answer the issue of such structs on stack? < 1231100520 0 :moozilla!n=moozilla@207-118-49-52.dyn.centurytel.net JOIN :#esoteric < 1231100671 0 :moozilla!unknown@unknown.invalid QUIT :Read error: 54 (Connection reset by peer) < 1231100673 0 :moozilla!n=moozilla@207-118-49-52.dyn.centurytel.net JOIN :#esoteric < 1231100875 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :AnMaster: well all that was new was you could declare them as locals, and the array was by default empty. < 1231100886 0 :oklopol!unknown@unknown.invalid PRIVMSG #esoteric :which i don't consider that relevant a detail < 1231101109 0 :Corun!unknown@unknown.invalid QUIT :"This computer has gone to sleep" < 1231101581 0 :metazilla!n=moozilla@207-118-49-52.dyn.centurytel.net JOIN :#esoteric < 1231101583 0 :moozilla!unknown@unknown.invalid QUIT :Read error: 104 (Connection reset by peer) < 1231101591 0 :metazilla!unknown@unknown.invalid NICK :moozilla < 1231101720 0 :moozilla!unknown@unknown.invalid QUIT :Read error: 104 (Connection reset by peer) < 1231101723 0 :moozilla!n=moozilla@207-118-49-52.dyn.centurytel.net JOIN :#esoteric < 1231101995 0 :Judofyr!unknown@unknown.invalid QUIT :Read error: 54 (Connection reset by peer) < 1231102773 0 :moozilla!unknown@unknown.invalid QUIT :Read error: 104 (Connection reset by peer) < 1231103198 0 :CakeProphet!n=seveninc@wikipedia/The-Prophet-Wizard-of-the-Crayon-Cake JOIN :#esoteric < 1231104107 0 :Corun!n=Corun@cpc1-rdng19-0-0-cust700.winn.cable.ntl.com JOIN :#esoteric < 1231104118 0 :ehird!n=ehird@eso-std.org JOIN :#esoteric < 1231107747 0 :Sgeo!n=Sgeo@ool-18bf68ca.dyn.optonline.net JOIN :#esoteric < 1231107958 0 :seveninchbread!n=seveninc@wikipedia/The-Prophet-Wizard-of-the-Crayon-Cake JOIN :#esoteric < 1231107963 0 :CakeProphet!unknown@unknown.invalid QUIT :Read error: 110 (Connection timed out) < 1231107966 0 :seveninchbread!unknown@unknown.invalid NICK :CakeProphet < 1231108349 0 :oerjan!n=oerjan@hagbart.nvg.ntnu.no JOIN :#esoteric < 1231108588 0 :GreaseMonkey!n=gm@unaffiliated/greasemonkey JOIN :#esoteric < 1231108879 0 :Sgeo!unknown@unknown.invalid QUIT :Remote closed the connection < 1231110857 0 :Corun!unknown@unknown.invalid QUIT :"This computer has gone to sleep" < 1231111425 0 :psygnisfive!unknown@unknown.invalid QUIT :"Leaving..."